Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 575 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Attack Castle | 6783223 | 2294 days ago | IN | 0 ETH | 0.00100804 | ||||
Attack Castle | 4955386 | 2603 days ago | IN | 0 ETH | 0.00020468 | ||||
Attack Castle | 4945767 | 2604 days ago | IN | 0 ETH | 0.00000252 | ||||
Attack Castle | 4944215 | 2605 days ago | IN | 0 ETH | 0.00000253 | ||||
Attack Castle | 4943803 | 2605 days ago | IN | 0 ETH | 0.00000252 | ||||
Attack Castle | 4938380 | 2606 days ago | IN | 0 ETH | 0.00005065 | ||||
Attack Castle | 4938353 | 2606 days ago | IN | 0 ETH | 0.00001266 | ||||
Attack Castle | 4935724 | 2606 days ago | IN | 0 ETH | 0.00000252 | ||||
Attack Castle | 4934349 | 2606 days ago | IN | 0 ETH | 0.00002505 | ||||
Attack Castle | 4932870 | 2607 days ago | IN | 0 ETH | 0.0000252 | ||||
Attack Castle | 4928766 | 2607 days ago | IN | 0 ETH | 0.00002772 | ||||
Attack Castle | 4927515 | 2607 days ago | IN | 0 ETH | 0.0000504 | ||||
Attack Castle | 4927479 | 2607 days ago | IN | 0 ETH | 0.00005117 | ||||
Attack Castle | 4907063 | 2611 days ago | IN | 0 ETH | 0.00010131 | ||||
Attack Castle | 4905061 | 2612 days ago | IN | 0 ETH | 0.00025201 | ||||
Update Maintaini... | 4904520 | 2612 days ago | IN | 0 ETH | 0.00123939 | ||||
Attack Castle | 4901654 | 2612 days ago | IN | 0 ETH | 0.00022669 | ||||
Attack Castle | 4900930 | 2612 days ago | IN | 0 ETH | 0.00036621 | ||||
Attack Castle | 4900885 | 2612 days ago | IN | 0 ETH | 0.00028336 | ||||
Create Castle | 4900285 | 2612 days ago | IN | 0.08 ETH | 0.00320756 | ||||
Attack Castle | 4900285 | 2612 days ago | IN | 0 ETH | 0.00146614 | ||||
Attack Castle | 4900116 | 2612 days ago | IN | 0 ETH | 0.00480888 | ||||
Attack Castle | 4899955 | 2612 days ago | IN | 0 ETH | 0.00486588 | ||||
Withdraw Ether | 4874671 | 2617 days ago | IN | 0 ETH | 0.00212124 | ||||
Attack Castle | 4873116 | 2617 days ago | IN | 0 ETH | 0.0010996 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 4874671 | 2617 days ago | 6.256 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
EtheremonBattle
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-01-06 */ pragma solidity ^0.4.16; // copyright [email protected] contract SafeMath { /* function assert(bool assertion) internal { */ /* if (!assertion) { */ /* throw; */ /* } */ /* } // assert no longer needed once solidity is on 0.4.10 */ function safeAdd(uint256 x, uint256 y) pure internal returns(uint256) { uint256 z = x + y; assert((z >= x) && (z >= y)); return z; } function safeSubtract(uint256 x, uint256 y) pure internal returns(uint256) { assert(x >= y); uint256 z = x - y; return z; } function safeMult(uint256 x, uint256 y) pure internal returns(uint256) { uint256 z = x * y; assert((x == 0)||(z/x == y)); return z; } } contract BasicAccessControl { address public owner; // address[] public moderators; uint16 public totalModerators = 0; mapping (address => bool) public moderators; bool public isMaintaining = true; function BasicAccessControl() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } modifier onlyModerators() { require(msg.sender == owner || moderators[msg.sender] == true); _; } modifier isActive { require(!isMaintaining); _; } function ChangeOwner(address _newOwner) onlyOwner public { if (_newOwner != address(0)) { owner = _newOwner; } } function AddModerator(address _newModerator) onlyOwner public { if (moderators[_newModerator] == false) { moderators[_newModerator] = true; totalModerators += 1; } } function RemoveModerator(address _oldModerator) onlyOwner public { if (moderators[_oldModerator] == true) { moderators[_oldModerator] = false; totalModerators -= 1; } } function UpdateMaintaining(bool _isMaintaining) onlyOwner public { isMaintaining = _isMaintaining; } } contract EtheremonEnum { enum ResultCode { SUCCESS, ERROR_CLASS_NOT_FOUND, ERROR_LOW_BALANCE, ERROR_SEND_FAIL, ERROR_NOT_TRAINER, ERROR_NOT_ENOUGH_MONEY, ERROR_INVALID_AMOUNT, ERROR_OBJ_NOT_FOUND, ERROR_OBJ_INVALID_OWNERSHIP } enum ArrayType { CLASS_TYPE, STAT_STEP, STAT_START, STAT_BASE, OBJ_SKILL } enum PropertyType { ANCESTOR, XFACTOR } enum BattleResult { CASTLE_WIN, CASTLE_LOSE, CASTLE_DESTROYED } enum CacheClassInfoType { CLASS_TYPE, CLASS_STEP, CLASS_ANCESTOR } } contract EtheremonDataBase is EtheremonEnum, BasicAccessControl, SafeMath { uint64 public totalMonster; uint32 public totalClass; // read function getSizeArrayType(ArrayType _type, uint64 _id) constant public returns(uint); function getElementInArrayType(ArrayType _type, uint64 _id, uint _index) constant public returns(uint8); function getMonsterClass(uint32 _classId) constant public returns(uint32 classId, uint256 price, uint256 returnPrice, uint32 total, bool catchable); function getMonsterObj(uint64 _objId) constant public returns(uint64 objId, uint32 classId, address trainer, uint32 exp, uint32 createIndex, uint32 lastClaimIndex, uint createTime); function getMonsterName(uint64 _objId) constant public returns(string name); function getExtraBalance(address _trainer) constant public returns(uint256); function getMonsterDexSize(address _trainer) constant public returns(uint); function getMonsterObjId(address _trainer, uint index) constant public returns(uint64); function getExpectedBalance(address _trainer) constant public returns(uint256); function getMonsterReturn(uint64 _objId) constant public returns(uint256 current, uint256 total); } interface EtheremonTradeInterface { function isOnTrading(uint64 _objId) constant external returns(bool); } contract EtheremonGateway is EtheremonEnum, BasicAccessControl { // using for battle contract later function increaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public; function decreaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public; // read function isGason(uint64 _objId) constant external returns(bool); function getObjBattleInfo(uint64 _objId) constant external returns(uint32 classId, uint32 exp, bool isGason, uint ancestorLength, uint xfactorsLength); function getClassPropertySize(uint32 _classId, PropertyType _type) constant external returns(uint); function getClassPropertyValue(uint32 _classId, PropertyType _type, uint index) constant external returns(uint32); } contract EtheremonCastleContract is EtheremonEnum, BasicAccessControl{ uint32 public totalCastle = 0; uint64 public totalBattle = 0; function getCastleBasicInfo(address _owner) constant external returns(uint32, uint, uint32); function getCastleBasicInfoById(uint32 _castleId) constant external returns(uint, address, uint32); function countActiveCastle() constant external returns(uint); function getCastleObjInfo(uint32 _castleId) constant external returns(uint64, uint64, uint64, uint64, uint64, uint64); function getCastleStats(uint32 _castleId) constant external returns(string, address, uint32, uint32, uint32, uint); function isOnCastle(uint32 _castleId, uint64 _objId) constant external returns(bool); function getCastleWinLose(uint32 _castleId) constant external returns(uint32, uint32, uint32); function getTrainerBrick(address _trainer) constant external returns(uint32); function addCastle(address _trainer, string _name, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3, uint32 _brickNumber) onlyModerators external returns(uint32 currentCastleId); function renameCastle(uint32 _castleId, string _name) onlyModerators external; function removeCastleFromActive(uint32 _castleId) onlyModerators external; function deductTrainerBrick(address _trainer, uint32 _deductAmount) onlyModerators external returns(bool); function addBattleLog(uint32 _castleId, address _attacker, uint8 _ran1, uint8 _ran2, uint8 _ran3, uint8 _result, uint32 _castleExp1, uint32 _castleExp2, uint32 _castleExp3) onlyModerators external returns(uint64); function addBattleLogMonsterInfo(uint64 _battleId, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3, uint32 _exp1, uint32 _exp2, uint32 _exp3) onlyModerators external; } contract EtheremonBattle is EtheremonEnum, BasicAccessControl, SafeMath { uint8 constant public NO_MONSTER = 3; uint8 constant public STAT_COUNT = 6; uint8 constant public GEN0_NO = 24; struct MonsterClassAcc { uint32 classId; uint256 price; uint256 returnPrice; uint32 total; bool catchable; } struct MonsterObjAcc { uint64 monsterId; uint32 classId; address trainer; string name; uint32 exp; uint32 createIndex; uint32 lastClaimIndex; uint createTime; } struct BattleMonsterData { uint64 a1; uint64 a2; uint64 a3; uint64 s1; uint64 s2; uint64 s3; } struct SupporterData { uint32 classId1; bool isGason1; uint8 type1; uint32 classId2; bool isGason2; uint8 type2; uint32 classId3; bool isGason3; uint8 type3; } struct AttackData { uint64 aa; SupporterData asup; uint16 aAttackSupport; uint64 ba; SupporterData bsup; uint16 bAttackSupport; uint8 index; } struct MonsterBattleLog { uint64 objId; uint32 exp; } struct BattleLogData { address castleOwner; uint64 battleId; uint32 castleId; uint32 castleBrickBonus; uint castleIndex; uint32[6] monsterExp; uint8[3] randoms; bool win; BattleResult result; } struct CacheClassInfo { uint8[] types; uint8[] steps; uint32[] ancestors; } // event event EventCreateCastle(address indexed owner, uint32 castleId); event EventAttackCastle(address indexed attacker, uint32 castleId, uint8 result); event EventRemoveCastle(uint32 indexed castleId); // linked smart contract address public worldContract; address public dataContract; address public tradeContract; address public castleContract; // global variable mapping(uint8 => uint8) typeAdvantages; mapping(uint32 => CacheClassInfo) cacheClasses; mapping(uint8 => uint32) levelExps; uint8 public ancestorBuffPercentage = 10; uint8 public gasonBuffPercentage = 10; uint8 public typeBuffPercentage = 20; uint8 public maxLevel = 100; uint16 public maxActiveCastle = 30; uint8 public maxRandomRound = 4; uint8 public winBrickReturn = 8; uint32 public castleMinBrick = 5; uint256 public brickPrice = 0.008 ether; uint8 public minHpDeducted = 10; uint256 public totalEarn = 0; uint256 public totalWithdraw = 0; address private lastAttacker = address(0x0); // modifier modifier requireDataContract { require(dataContract != address(0)); _; } modifier requireTradeContract { require(tradeContract != address(0)); _; } modifier requireCastleContract { require(castleContract != address(0)); _; } modifier requireWorldContract { require(worldContract != address(0)); _; } function EtheremonBattle(address _dataContract, address _worldContract, address _tradeContract, address _castleContract) public { dataContract = _dataContract; worldContract = _worldContract; tradeContract = _tradeContract; castleContract = _castleContract; } // admin & moderators function setTypeAdvantages() onlyModerators external { typeAdvantages[1] = 14; typeAdvantages[2] = 16; typeAdvantages[3] = 8; typeAdvantages[4] = 9; typeAdvantages[5] = 2; typeAdvantages[6] = 11; typeAdvantages[7] = 3; typeAdvantages[8] = 5; typeAdvantages[9] = 15; typeAdvantages[11] = 18; // skipp 10 typeAdvantages[12] = 7; typeAdvantages[13] = 6; typeAdvantages[14] = 17; typeAdvantages[15] = 13; typeAdvantages[16] = 12; typeAdvantages[17] = 1; typeAdvantages[18] = 4; } function setTypeAdvantage(uint8 _type1, uint8 _type2) onlyModerators external { typeAdvantages[_type1] = _type2; } function setCacheClassInfo(uint32 _classId) onlyModerators requireDataContract requireWorldContract public { EtheremonDataBase data = EtheremonDataBase(dataContract); EtheremonGateway gateway = EtheremonGateway(worldContract); uint i = 0; CacheClassInfo storage classInfo = cacheClasses[_classId]; // add type i = data.getSizeArrayType(ArrayType.CLASS_TYPE, uint64(_classId)); uint8[] memory aTypes = new uint8[](i); for(; i > 0 ; i--) { aTypes[i-1] = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(_classId), i-1); } classInfo.types = aTypes; // add steps i = data.getSizeArrayType(ArrayType.STAT_STEP, uint64(_classId)); uint8[] memory steps = new uint8[](i); for(; i > 0 ; i--) { steps[i-1] = data.getElementInArrayType(ArrayType.STAT_STEP, uint64(_classId), i-1); } classInfo.steps = steps; // add ancestor i = gateway.getClassPropertySize(_classId, PropertyType.ANCESTOR); uint32[] memory ancestors = new uint32[](i); for(; i > 0 ; i--) { ancestors[i-1] = gateway.getClassPropertyValue(_classId, PropertyType.ANCESTOR, i-1); } classInfo.ancestors = ancestors; } function withdrawEther(address _sendTo, uint _amount) onlyModerators external { if (_amount > this.balance) { revert(); } uint256 validAmount = safeSubtract(totalEarn, totalWithdraw); if (_amount > validAmount) { revert(); } totalWithdraw += _amount; _sendTo.transfer(_amount); } function setContract(address _dataContract, address _worldContract, address _tradeContract, address _castleContract) onlyModerators external { dataContract = _dataContract; worldContract = _worldContract; tradeContract = _tradeContract; castleContract = _castleContract; } function setConfig(uint8 _ancestorBuffPercentage, uint8 _gasonBuffPercentage, uint8 _typeBuffPercentage, uint32 _castleMinBrick, uint8 _maxLevel, uint16 _maxActiveCastle, uint8 _maxRandomRound, uint8 _minHpDeducted) onlyModerators external{ ancestorBuffPercentage = _ancestorBuffPercentage; gasonBuffPercentage = _gasonBuffPercentage; typeBuffPercentage = _typeBuffPercentage; castleMinBrick = _castleMinBrick; maxLevel = _maxLevel; maxActiveCastle = _maxActiveCastle; maxRandomRound = _maxRandomRound; minHpDeducted = _minHpDeducted; } function genLevelExp() onlyModerators external { uint8 level = 1; uint32 requirement = 100; uint32 sum = requirement; while(level <= 100) { levelExps[level] = sum; level += 1; requirement = (requirement * 11) / 10 + 5; sum += requirement; } } // public function getCacheClassSize(uint32 _classId) constant public returns(uint, uint, uint) { CacheClassInfo storage classInfo = cacheClasses[_classId]; return (classInfo.types.length, classInfo.steps.length, classInfo.ancestors.length); } function getRandom(uint8 maxRan, uint8 index, address priAddress) constant public returns(uint8) { uint256 genNum = uint256(block.blockhash(block.number-1)) + uint256(priAddress); for (uint8 i = 0; i < index && i < 6; i ++) { genNum /= 256; } return uint8(genNum % maxRan); } function getLevel(uint32 exp) view public returns (uint8) { uint8 minIndex = 1; uint8 maxIndex = 100; uint8 currentIndex; while (minIndex < maxIndex) { currentIndex = (minIndex + maxIndex) / 2; while (minIndex < maxIndex) { currentIndex = (minIndex + maxIndex) / 2; if (exp < levelExps[currentIndex]) maxIndex = currentIndex; else minIndex = currentIndex + 1; } } return minIndex; } function getGainExp(uint32 _exp1, uint32 _exp2, bool _win) view public returns(uint32){ uint8 level = getLevel(_exp2); uint8 level2 = getLevel(_exp1); uint8 halfLevel1 = level; if (level > level2 + 3) { halfLevel1 = (level2 + 3) / 2; } else { halfLevel1 = level / 2; } uint32 gainExp = 1; uint256 rate = (21 ** uint256(halfLevel1)) * 1000 / (20 ** uint256(halfLevel1)); rate = rate * rate; if ((level > level2 + 3 && level2 + 3 > 2 * halfLevel1) || (level <= level2 + 3 && level > 2 * halfLevel1)) rate = rate * 21 / 20; if (_win) { gainExp = uint32(30 * rate / 1000000); } else { gainExp = uint32(10 * rate / 1000000); } if (level2 >= level + 5) { gainExp /= uint32(2) ** ((level2 - level) / 5); } return gainExp; } function getMonsterLevel(uint64 _objId) constant external returns(uint32, uint8) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; uint32 _ = 0; (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId); return (obj.exp, getLevel(obj.exp)); } function getMonsterCP(uint64 _objId) constant external returns(uint64) { uint16[6] memory stats; uint32 classId = 0; uint32 exp = 0; (classId, exp, stats) = getCurrentStats(_objId); uint256 total; for(uint i=0; i < STAT_COUNT; i+=1) { total += stats[i]; } return uint64(total/STAT_COUNT); } function isOnBattle(uint64 _objId) constant external returns(bool) { EtheremonDataBase data = EtheremonDataBase(dataContract); EtheremonCastleContract castle = EtheremonCastleContract(castleContract); uint32 castleId; uint castleIndex = 0; uint256 price = 0; MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId); (castleId, castleIndex, price) = castle.getCastleBasicInfo(obj.trainer); if (castleId > 0 && castleIndex > 0) return castle.isOnCastle(castleId, _objId); return false; } function isValidOwner(uint64 _objId, address _owner) constant public returns(bool) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId); return (obj.trainer == _owner); } function getObjExp(uint64 _objId) constant public returns(uint32, uint32) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; uint32 _ = 0; (_objId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId); return (obj.classId, obj.exp); } function getCurrentStats(uint64 _objId) constant public returns(uint32, uint32, uint16[6]){ EtheremonDataBase data = EtheremonDataBase(dataContract); uint16[6] memory stats; uint32 classId; uint32 exp; (classId, exp) = getObjExp(_objId); if (classId == 0) return (classId, exp, stats); uint i = 0; uint8 level = getLevel(exp); for(i=0; i < STAT_COUNT; i+=1) { stats[i] += data.getElementInArrayType(ArrayType.STAT_BASE, _objId, i); } for(i=0; i < cacheClasses[classId].steps.length; i++) { stats[i] += uint16(safeMult(cacheClasses[classId].steps[i], level*3)); } return (classId, exp, stats); } function safeDeduct(uint16 a, uint16 b) pure private returns(uint16){ if (a > b) { return a - b; } return 0; } function calHpDeducted(uint16 _attack, uint16 _specialAttack, uint16 _defense, uint16 _specialDefense, bool _lucky) view public returns(uint16){ if (_lucky) { _attack = _attack * 13 / 10; _specialAttack = _specialAttack * 13 / 10; } uint16 hpDeducted = safeDeduct(_attack, _defense * 3 /4); uint16 hpSpecialDeducted = safeDeduct(_specialAttack, _specialDefense* 3 / 4); if (hpDeducted < minHpDeducted && hpSpecialDeducted < minHpDeducted) return minHpDeducted; if (hpDeducted > hpSpecialDeducted) return hpDeducted; return hpSpecialDeducted; } function getAncestorBuff(uint32 _classId, SupporterData _support) constant private returns(uint16){ // check ancestors uint i =0; uint8 countEffect = 0; uint ancestorSize = cacheClasses[_classId].ancestors.length; if (ancestorSize > 0) { uint32 ancestorClass = 0; for (i=0; i < ancestorSize; i ++) { ancestorClass = cacheClasses[_classId].ancestors[i]; if (ancestorClass == _support.classId1 || ancestorClass == _support.classId2 || ancestorClass == _support.classId3) { countEffect += 1; } } } return countEffect * ancestorBuffPercentage; } function getGasonSupport(uint32 _classId, SupporterData _sup) constant private returns(uint16 defenseSupport) { uint i = 0; uint8 classType = 0; for (i = 0; i < cacheClasses[_classId].types.length; i++) { classType = cacheClasses[_classId].types[i]; if (_sup.isGason1) { if (classType == _sup.type1) { defenseSupport += 1; continue; } } if (_sup.isGason2) { if (classType == _sup.type2) { defenseSupport += 1; continue; } } if (_sup.isGason3) { if (classType == _sup.type3) { defenseSupport += 1; continue; } } defenseSupport = defenseSupport * gasonBuffPercentage; } } function getTypeSupport(uint32 _aClassId, uint32 _bClassId) constant private returns (uint16 aAttackSupport, uint16 bAttackSupport) { // check types bool aHasAdvantage; bool bHasAdvantage; for (uint i = 0; i < cacheClasses[_aClassId].types.length; i++) { for (uint j = 0; j < cacheClasses[_bClassId].types.length; j++) { if (typeAdvantages[cacheClasses[_aClassId].types[i]] == cacheClasses[_bClassId].types[j]) { aHasAdvantage = true; } if (typeAdvantages[cacheClasses[_bClassId].types[j]] == cacheClasses[_aClassId].types[i]) { bHasAdvantage = true; } } } if (aHasAdvantage) aAttackSupport += typeBuffPercentage; if (bHasAdvantage) bAttackSupport += typeBuffPercentage; } function calculateBattleStats(AttackData att) constant private returns(uint32 aExp, uint16[6] aStats, uint32 bExp, uint16[6] bStats) { uint32 aClassId = 0; (aClassId, aExp, aStats) = getCurrentStats(att.aa); uint32 bClassId = 0; (bClassId, bExp, bStats) = getCurrentStats(att.ba); // check gasonsupport (att.aAttackSupport, att.bAttackSupport) = getTypeSupport(aClassId, bClassId); att.aAttackSupport += getAncestorBuff(aClassId, att.asup); att.bAttackSupport += getAncestorBuff(bClassId, att.bsup); uint16 aDefenseBuff = getGasonSupport(aClassId, att.asup); uint16 bDefenseBuff = getGasonSupport(bClassId, att.bsup); // add attack aStats[1] += aStats[1] * att.aAttackSupport; aStats[3] += aStats[3] * att.aAttackSupport; bStats[1] += bStats[1] * att.bAttackSupport; bStats[3] += bStats[3] * att.bAttackSupport; // add offense aStats[2] += aStats[2] * aDefenseBuff; aStats[4] += aStats[4] * aDefenseBuff; bStats[2] += bStats[2] * bDefenseBuff; bStats[4] += bStats[4] * bDefenseBuff; } function attack(AttackData att) constant private returns(uint32 aExp, uint32 bExp, uint8 ran, bool win) { uint16[6] memory aStats; uint16[6] memory bStats; (aExp, aStats, bExp, bStats) = calculateBattleStats(att); ran = getRandom(maxRandomRound+2, att.index, lastAttacker); uint16 round = 0; while (round < maxRandomRound && aStats[0] > 0 && bStats[0] > 0) { if (aStats[5] > bStats[5]) { if (round % 2 == 0) { // a attack bStats[0] = safeDeduct(bStats[0], calHpDeducted(aStats[1], aStats[3], bStats[2], bStats[4], round==ran)); } else { aStats[0] = safeDeduct(aStats[0], calHpDeducted(bStats[1], bStats[3], aStats[2], aStats[4], round==ran)); } } else { if (round % 2 != 0) { bStats[0] = safeDeduct(bStats[0], calHpDeducted(aStats[1], aStats[3], bStats[2], bStats[4], round==ran)); } else { aStats[0] = safeDeduct(aStats[0], calHpDeducted(bStats[1], bStats[3], aStats[2], aStats[4], round==ran)); } } round+= 1; } win = aStats[0] >= bStats[0]; } function destroyCastle(uint32 _castleId, bool win) requireCastleContract private returns(uint32){ // if castle win, ignore if (win) return 0; EtheremonCastleContract castle = EtheremonCastleContract(castleContract); uint32 totalWin; uint32 totalLose; uint32 brickNumber; (totalWin, totalLose, brickNumber) = castle.getCastleWinLose(_castleId); if (brickNumber + totalWin/winBrickReturn <= totalLose + 1) { castle.removeCastleFromActive(_castleId); return brickNumber; } return 0; } function hasValidParam(address trainer, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3) constant public returns(bool) { if (_a1 == 0 || _a2 == 0 || _a3 == 0) return false; if (_a1 == _a2 || _a1 == _a3 || _a1 == _s1 || _a1 == _s2 || _a1 == _s3) return false; if (_a2 == _a3 || _a2 == _s1 || _a2 == _s2 || _a2 == _s3) return false; if (_a3 == _s1 || _a3 == _s2 || _a3 == _s3) return false; if (_s1 > 0 && (_s1 == _s2 || _s1 == _s3)) return false; if (_s2 > 0 && (_s2 == _s3)) return false; if (!isValidOwner(_a1, trainer) || !isValidOwner(_a2, trainer) || !isValidOwner(_a3, trainer)) return false; if (_s1 > 0 && !isValidOwner(_s1, trainer)) return false; if (_s2 > 0 && !isValidOwner(_s2, trainer)) return false; if (_s3 > 0 && !isValidOwner(_s3, trainer)) return false; return true; } // public function createCastle(string _name, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3) isActive requireDataContract requireTradeContract requireCastleContract payable external { if (!hasValidParam(msg.sender, _a1, _a2, _a3, _s1, _s2, _s3)) revert(); EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract); if (trade.isOnTrading(_a1) || trade.isOnTrading(_a2) || trade.isOnTrading(_a3) || trade.isOnTrading(_s1) || trade.isOnTrading(_s2) || trade.isOnTrading(_s3)) revert(); EtheremonCastleContract castle = EtheremonCastleContract(castleContract); uint32 castleId; uint castleIndex = 0; uint32 numberBrick = 0; (castleId, castleIndex, numberBrick) = castle.getCastleBasicInfo(msg.sender); if (castleId > 0 || castleIndex > 0) revert(); if (castle.countActiveCastle() >= uint(maxActiveCastle)) revert(); numberBrick = uint32(msg.value / brickPrice) + castle.getTrainerBrick(msg.sender); if (numberBrick < castleMinBrick) { revert(); } castle.deductTrainerBrick(msg.sender, castle.getTrainerBrick(msg.sender)); totalEarn += msg.value; castleId = castle.addCastle(msg.sender, _name, _a1, _a2, _a3, _s1, _s2, _s3, numberBrick); EventCreateCastle(msg.sender, castleId); } function renameCastle(uint32 _castleId, string _name) isActive requireCastleContract external { EtheremonCastleContract castle = EtheremonCastleContract(castleContract); uint index; address owner; uint256 price; (index, owner, price) = castle.getCastleBasicInfoById(_castleId); if (owner != msg.sender) revert(); castle.renameCastle(_castleId, _name); } function removeCastle(uint32 _castleId) isActive requireCastleContract external { EtheremonCastleContract castle = EtheremonCastleContract(castleContract); uint index; address owner; uint256 price; (index, owner, price) = castle.getCastleBasicInfoById(_castleId); if (owner != msg.sender) revert(); if (index > 0) { castle.removeCastleFromActive(_castleId); } EventRemoveCastle(_castleId); } function getSupporterInfo(uint64 s1, uint64 s2, uint64 s3) constant public returns(SupporterData sData) { uint temp; uint32 __; EtheremonGateway gateway = EtheremonGateway(worldContract); if (s1 > 0) (sData.classId1, __, sData.isGason1, temp, temp) = gateway.getObjBattleInfo(s1); if (s2 > 0) (sData.classId2, __, sData.isGason2, temp, temp) = gateway.getObjBattleInfo(s2); if (s3 > 0) (sData.classId3, __, sData.isGason3, temp, temp) = gateway.getObjBattleInfo(s3); EtheremonDataBase data = EtheremonDataBase(dataContract); if (sData.isGason1) { sData.type1 = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(sData.classId1), 0); } if (sData.isGason2) { sData.type2 = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(sData.classId2), 0); } if (sData.isGason3) { sData.type3 = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(sData.classId3), 0); } } function attackCastle(uint32 _castleId, uint64 _aa1, uint64 _aa2, uint64 _aa3, uint64 _as1, uint64 _as2, uint64 _as3) isActive requireDataContract requireTradeContract requireCastleContract external { if (!hasValidParam(msg.sender, _aa1, _aa2, _aa3, _as1, _as2, _as3)) revert(); EtheremonCastleContract castle = EtheremonCastleContract(castleContract); BattleLogData memory log; (log.castleIndex, log.castleOwner, log.castleBrickBonus) = castle.getCastleBasicInfoById(_castleId); if (log.castleIndex == 0 || log.castleOwner == msg.sender) revert(); EtheremonGateway gateway = EtheremonGateway(worldContract); BattleMonsterData memory b; (b.a1, b.a2, b.a3, b.s1, b.s2, b.s3) = castle.getCastleObjInfo(_castleId); lastAttacker = msg.sender; // init data uint8 countWin = 0; AttackData memory att; att.asup = getSupporterInfo(b.s1, b.s2, b.s3); att.bsup = getSupporterInfo(_as1, _as2, _as3); att.index = 0; att.aa = b.a1; att.ba = _aa1; (log.monsterExp[0], log.monsterExp[3], log.randoms[0], log.win) = attack(att); gateway.increaseMonsterExp(att.aa, getGainExp(log.monsterExp[0], log.monsterExp[3], log.win)); gateway.increaseMonsterExp(att.ba, getGainExp(log.monsterExp[3], log.monsterExp[0], !log.win)); if (log.win) countWin += 1; att.index = 1; att.aa = b.a2; att.ba = _aa2; (log.monsterExp[1], log.monsterExp[4], log.randoms[1], log.win) = attack(att); gateway.increaseMonsterExp(att.aa, getGainExp(log.monsterExp[1], log.monsterExp[4], log.win)); gateway.increaseMonsterExp(att.ba, getGainExp(log.monsterExp[4], log.monsterExp[1], !log.win)); if (log.win) countWin += 1; att.index = 2; att.aa = b.a3; att.ba = _aa3; (log.monsterExp[2], log.monsterExp[5], log.randoms[2], log.win) = attack(att); gateway.increaseMonsterExp(att.aa, getGainExp(log.monsterExp[2], log.monsterExp[5], log.win)); gateway.increaseMonsterExp(att.ba, getGainExp(log.monsterExp[5], log.monsterExp[2], !log.win)); if (log.win) countWin += 1; log.castleBrickBonus = destroyCastle(_castleId, countWin>1); if (countWin>1) { log.result = BattleResult.CASTLE_WIN; } else { if (log.castleBrickBonus > 0) { log.result = BattleResult.CASTLE_DESTROYED; } else { log.result = BattleResult.CASTLE_LOSE; } } log.battleId = castle.addBattleLog(_castleId, msg.sender, log.randoms[0], log.randoms[1], log.randoms[2], uint8(log.result), log.monsterExp[0], log.monsterExp[1], log.monsterExp[2]); castle.addBattleLogMonsterInfo(log.battleId, _aa1, _aa2, _aa3, _as1, _as2, _as3, log.monsterExp[3], log.monsterExp[4], log.monsterExp[5]); EventAttackCastle(msg.sender, _castleId, uint8(log.result)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getMonsterCP","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"moderators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"worldContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"trainer","type":"address"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"},{"name":"_s1","type":"uint64"},{"name":"_s2","type":"uint64"},{"name":"_s3","type":"uint64"}],"name":"hasValidParam","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getObjExp","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_attack","type":"uint16"},{"name":"_specialAttack","type":"uint16"},{"name":"_defense","type":"uint16"},{"name":"_specialDefense","type":"uint16"},{"name":"_lucky","type":"bool"}],"name":"calHpDeducted","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_type1","type":"uint8"},{"name":"_type2","type":"uint8"}],"name":"setTypeAdvantage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"genLevelExp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setTypeAdvantages","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"isOnBattle","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"maxRan","type":"uint8"},{"name":"index","type":"uint8"},{"name":"priAddress","type":"address"}],"name":"getRandom","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_castleId","type":"uint32"},{"name":"_name","type":"string"}],"name":"renameCastle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalWithdraw","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_castleId","type":"uint32"},{"name":"_aa1","type":"uint64"},{"name":"_aa2","type":"uint64"},{"name":"_aa3","type":"uint64"},{"name":"_as1","type":"uint64"},{"name":"_as2","type":"uint64"},{"name":"_as3","type":"uint64"}],"name":"attackCastle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"UpdateMaintaining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"castleMinBrick","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"},{"name":"_s1","type":"uint64"},{"name":"_s2","type":"uint64"},{"name":"_s3","type":"uint64"}],"name":"createCastle","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalModerators","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_classId","type":"uint32"}],"name":"getCacheClassSize","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sendTo","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"s1","type":"uint64"},{"name":"s2","type":"uint64"},{"name":"s3","type":"uint64"}],"name":"getSupporterInfo","outputs":[{"components":[{"name":"classId1","type":"uint32"},{"name":"isGason1","type":"bool"},{"name":"type1","type":"uint8"},{"name":"classId2","type":"uint32"},{"name":"isGason2","type":"bool"},{"name":"type2","type":"uint8"},{"name":"classId3","type":"uint32"},{"name":"isGason3","type":"bool"},{"name":"type3","type":"uint8"}],"name":"sData","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_tradeContract","type":"address"},{"name":"_castleContract","type":"address"}],"name":"setContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"winBrickReturn","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newModerator","type":"address"}],"name":"AddModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ancestorBuffPercentage","type":"uint8"},{"name":"_gasonBuffPercentage","type":"uint8"},{"name":"_typeBuffPercentage","type":"uint8"},{"name":"_castleMinBrick","type":"uint32"},{"name":"_maxLevel","type":"uint8"},{"name":"_maxActiveCastle","type":"uint16"},{"name":"_maxRandomRound","type":"uint8"},{"name":"_minHpDeducted","type":"uint8"}],"name":"setConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_NO","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NO_MONSTER","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getCurrentStats","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint16[6]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ancestorBuffPercentage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"typeBuffPercentage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_classId","type":"uint32"}],"name":"setCacheClassInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxActiveCastle","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"exp","type":"uint32"}],"name":"getLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oldModerator","type":"address"}],"name":"RemoveModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_exp1","type":"uint32"},{"name":"_exp2","type":"uint32"},{"name":"_win","type":"bool"}],"name":"getGainExp","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minHpDeducted","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getMonsterLevel","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_castleId","type":"uint32"}],"name":"removeCastle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gasonBuffPercentage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"brickPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STAT_COUNT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_owner","type":"address"}],"name":"isValidOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEarn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"castleContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxRandomRound","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isMaintaining","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"ChangeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tradeContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_tradeContract","type":"address"},{"name":"_castleContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"castleId","type":"uint32"}],"name":"EventCreateCastle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"attacker","type":"address"},{"indexed":false,"name":"castleId","type":"uint32"},{"indexed":false,"name":"result","type":"uint8"}],"name":"EventAttackCastle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"castleId","type":"uint32"}],"name":"EventRemoveCastle","type":"event"}]
Contract Creation Code
606060405260008060146101000a81548161ffff021916908361ffff1602179055506001600260006101000a81548160ff021916908315150217905550600a600960006101000a81548160ff021916908360ff160217905550600a600960016101000a81548160ff021916908360ff1602179055506014600960026101000a81548160ff021916908360ff1602179055506064600960036101000a81548160ff021916908360ff160217905550601e600960046101000a81548161ffff021916908361ffff1602179055506004600960066101000a81548160ff021916908360ff1602179055506008600960076101000a81548160ff021916908360ff1602179055506005600960086101000a81548163ffffffff021916908363ffffffff160217905550661c6bf526340000600a55600a600b60006101000a81548160ff021916908360ff1602179055506000600c556000600d556000600e60006101000a815481600160a060020a030219169083600160a060020a03160217905550341561018857600080fd5b604051608080614d0d8339810160405280805191906020018051919060200180519190602001805160008054600160a060020a03338116600160a060020a0319928316179092556003805498831698821698909817909755600280549682166101000261010060a860020a03199097169690961790955560048054948616948716949094179093555050600580549290911691909216179055614add806102306000396000f30060606040526004361061024d5763ffffffff60e060020a6000350416630672859b81146102525780630d6688181461028d57806314d0f1ba146102bc57806318758480146102ef5780631bab0908146103025780631cd982351461034b57806320046e911461038b5780633171cec4146103d357806333ced321146103f457806333d24dc41461040757806335f097f31461041a5780633a34f09a1461043957806343b37b451461047a578063455fd623146104a257806347cf8971146104c757806348ef5aa81461050d5780634a3d3c09146105255780634aaff006146105515780634efb023e14610590578063500e4297146105a3578063522f6815146105e357806354f0bde714610605578063615dbebb146106305780636b2a2691146106615780636c81fd6d14610674578063720ffedb1461069357806373d65c00146106dc578063775e38f7146106ef57806384be816c1461070257806385bbb53a1461076f578063891fe103146107825780638da5cb5b146107955780638fd8f783146107a8578063a0c66b43146107c4578063b2cad9b7146107d7578063b85d6275146107f3578063be44bd2114610812578063cc06c35914610839578063cfa830791461084c578063d2169d2f1461085f578063d4c15161146108a0578063d5425571146108bc578063d8e20e2c146108cf578063d98e14bd146108e2578063da5671ad146108f5578063dffd722f14610920578063eb83f01514610933578063ebfa3c1b14610946578063ee4e441614610959578063f28532921461096c578063ffa640d81461098b575b600080fd5b341561025d57600080fd5b6102716001604060020a036004351661099e565b6040516001604060020a03909116815260200160405180910390f35b341561029857600080fd5b6102a06109fb565b604051600160a060020a03909116815260200160405180910390f35b34156102c757600080fd5b6102db600160a060020a0360043516610a0a565b604051901515815260200160405180910390f35b34156102fa57600080fd5b6102a0610a1f565b341561030d57600080fd5b6102db600160a060020a03600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c43516610a33565b341561035657600080fd5b61036a6001604060020a0360043516610d2e565b60405163ffffffff9283168152911660208201526040908101905180910390f35b341561039657600080fd5b6103bc61ffff600435811690602435811690604435811690606435166084351515610e1b565b60405161ffff909116815260200160405180910390f35b34156103de57600080fd5b6103f260ff60043581169060243516610ec7565b005b34156103ff57600080fd5b6103f2610f2f565b341561041257600080fd5b6103f2610fdd565b341561042557600080fd5b6102db6001604060020a0360043516611306565b341561044457600080fd5b61046460ff60043581169060243516600160a060020a0360443516611538565b60405160ff909116815260200160405180910390f35b341561048557600080fd5b6103f26004803563ffffffff169060248035908101910135611592565b34156104ad57600080fd5b6104b56116f8565b60405190815260200160405180910390f35b34156104d257600080fd5b6103f263ffffffff600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c435166116fe565b341561051857600080fd5b6103f260043515156120a7565b341561053057600080fd5b6105386120d5565b60405163ffffffff909116815260200160405180910390f35b6103f260246004803582810192910135906001604060020a03903581169060443581169060643581169060843581169060a43581169060c435166120ed565b341561059b57600080fd5b6103bc612847565b34156105ae57600080fd5b6105bf63ffffffff60043516612869565b60405180848152602001838152602001828152602001935050505060405180910390f35b34156105ee57600080fd5b6103f2600160a060020a036004351660243561288e565b341561061057600080fd5b6104b56001604060020a0360043581169060243581169060443516612942565b341561063b57600080fd5b6103f2600160a060020a0360043581169060243581169060443581169060643516612dc1565b341561066c57600080fd5b610464612e7f565b341561067f57600080fd5b6103f2600160a060020a0360043516612e93565b341561069e57600080fd5b6103f260ff60043581169060243581169060443581169063ffffffff606435169060843581169061ffff60a435169060c43581169060e43516612f3d565b34156106e757600080fd5b610464613045565b34156106fa57600080fd5b61046461304a565b341561070d57600080fd5b6107216001604060020a036004351661304f565b60405163ffffffff808516825283166020820152604081018260c080838360005b8381101561075a578082015183820152602001610742565b50505050905001935050505060405180910390f35b341561077a57600080fd5b610464613239565b341561078d57600080fd5b610464613242565b34156107a057600080fd5b6102a0613251565b34156107b357600080fd5b6103f263ffffffff60043516613260565b34156107cf57600080fd5b6103bc613821565b34156107e257600080fd5b61046463ffffffff60043516613833565b34156107fe57600080fd5b6103f2600160a060020a03600435166138b4565b341561081d57600080fd5b61053863ffffffff60043581169060243516604435151561395e565b341561084457600080fd5b610464613a90565b341561085757600080fd5b610464613aa0565b341561086a57600080fd5b61087e6001604060020a0360043516613aa9565b60405163ffffffff909216825260ff1660208201526040908101905180910390f35b34156108ab57600080fd5b6103f263ffffffff60043516613ba6565b34156108c757600080fd5b610464613d19565b34156108da57600080fd5b6104b5613d27565b34156108ed57600080fd5b610464613d2d565b341561090057600080fd5b6102db6001604060020a0360043516600160a060020a0360243516613d32565b341561092b57600080fd5b6104b5613e39565b341561093e57600080fd5b6102a0613e3f565b341561095157600080fd5b610464613e4e565b341561096457600080fd5b6102db613e61565b341561097757600080fd5b6103f2600160a060020a0360043516613e6a565b341561099657600080fd5b6102a0613ec1565b60006109a8614771565b60008080806109b68761304f565b96509094509250600090505b60068110156109ed578481600681106109d757fe5b602002015161ffff1691909101906001016109c2565b506006900495945050505050565b600354600160a060020a031681565b60016020526000908152604090205460ff1681565b6002546101009004600160a060020a031681565b60006001604060020a0387161580610a5257506001604060020a038616155b80610a6457506001604060020a038516155b15610a7157506000610d23565b856001604060020a0316876001604060020a03161480610aa25750846001604060020a0316876001604060020a0316145b80610abe5750836001604060020a0316876001604060020a0316145b80610ada5750826001604060020a0316876001604060020a0316145b80610af65750816001604060020a0316876001604060020a0316145b15610b0357506000610d23565b846001604060020a0316866001604060020a03161480610b345750836001604060020a0316866001604060020a0316145b80610b505750826001604060020a0316866001604060020a0316145b80610b6c5750816001604060020a0316866001604060020a0316145b15610b7957506000610d23565b836001604060020a0316856001604060020a03161480610baa5750826001604060020a0316856001604060020a0316145b80610bc65750816001604060020a0316856001604060020a0316145b15610bd357506000610d23565b6000846001604060020a0316118015610c185750826001604060020a0316846001604060020a03161480610c185750816001604060020a0316846001604060020a0316145b15610c2557506000610d23565b6000836001604060020a0316118015610c4f5750816001604060020a0316836001604060020a0316145b15610c5c57506000610d23565b610c668789613d32565b1580610c795750610c778689613d32565b155b80610c8b5750610c898589613d32565b155b15610c9857506000610d23565b6000846001604060020a0316118015610cb85750610cb68489613d32565b155b15610cc557506000610d23565b6000836001604060020a0316118015610ce55750610ce38389613d32565b155b15610cf257506000610d23565b6000826001604060020a0316118015610d125750610d108289613d32565b155b15610d1f57506000610d23565b5060015b979650505050505050565b6000806000610d3b614799565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515610d9857600080fd5b6102c65a03f11515610da957600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501908152919750915051826080015194509450505050915091565b60008060008315610e4157600a61ffff600d8a0216049750600a61ffff600d8902160496505b610e5688600461ffff60038a02165b04613ed0565b9150610e6b87600461ffff6003890216610e50565b600b5490915060ff1661ffff8316108015610e8e5750600b5460ff1661ffff8216105b15610ea057600b5460ff169250610ebc565b8061ffff168261ffff161115610eb857819250610ebc565b8092505b505095945050505050565b60005433600160a060020a0390811691161480610f025750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610f0d57600080fd5b60ff9182166000908152600660205260409020805460ff191691909216179055565b600080548190819033600160a060020a0390811691161480610f6f5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610f7a57600080fd5b506001915060649050805b606460ff841611610fd85760ff83166000908152600860205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050610f85565b505050565b60005433600160a060020a03908116911614806110185750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561102357600080fd5b600660208190527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31805460ff19908116600e179091557f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace298054821660101790557f75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d28054821660081790557fc5069e24aaadb2addc3e52e868fcf3f4f8acf5a87e24300992fd4540c2a87eed8054821660091790557fbfd358e93f18da3ed276c3afdbdba00b8f0b6008a03476a6a86bd6320ee6938b8054821660021790557f697b2bd7bb2984c4e0dc14c79c987d37818484a62958b9c45a0e8b962f20650f80548216600b1790557f4ced6d0d36392b04cc5d8761b1327b3bbba6e1089c77f60a9a9ca18e05e4f00e8054821660031790557fb8d683c9d414f481826f3e7fe14b3ac6ae8c73450778287390c4bb8cb9f2e80b8054821660051790557fca4d0c6c94a9477136dd41a99cc19ecbe441c8f6609efe7c6fa65be007a4732380548216600f1790557f85291c2e7881182c13e19eca9b58927ebfdc2c5d04882018eeb33d8241d357118054821660129081179091557f0b94fa1b86997cc1f1148bfbe25b674e8cefc7cc6f976aa8d7c7966bd4cca3478054831660071790557f248457bacb20e239ae314d8db91c0f270e453c28ee138c84f97aea6cfcf9a499805483169093179092557faca6cdb4b5fe0ec50731a73f714dd191dc1911bfeb3f9eeb9e94ed0f6065ef8d8054821660111790557ff130046d53bc87538ab17e4752ba5f5082985eecc06ccb932c5a55e8242dd50280548216600d1790557f6fac4587033fa036e2426ad0134940d3a683633cc2b2b7862f39195344f163d180548216600c1790557f84a4048ee77615560f9afb39551a46e123dd0dd6c928af241dc565271d0325698054821660011790556000919091527fee4750d043edce57577a49a1f0c4b389e3b8c38c27dc693bc6b7154c0728077180549091166004179055565b600080600080600080611317614799565b600354600554600160a060020a03918216975016945060009250829150856307202460898460405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561138157600080fd5b6102c65a03f1151561139257600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529086169063f8a74501905160006040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b151561145957600080fd5b6102c65a03f1151561146a57600080fd5b50505060405180519060200180519060200180519296509094505063ffffffff908116925060009085161180156114a15750600083115b156115285784600160a060020a031663dc268db9858a60006040516020015260405163ffffffff84811660e060020a0282529290921660048301526001604060020a03166024820152604401602060405180830381600087803b151561150657600080fd5b6102c65a03f1151561151757600080fd5b50505060405180519050965061152d565b600096505b505050505050919050565b6000600019430140600160a060020a03831601815b8460ff168160ff16108015611565575060068160ff16105b15611579576101008204915060010161154d565b8560ff168281151561158757fe5b069695505050505050565b60025460009081908190819060ff16156115ab57600080fd5b600554600160a060020a031615156115c257600080fd5b600554600160a060020a031693508363f31dec5a8860006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561161857600080fd5b6102c65a03f1151561162957600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a039081169083161461166557600080fd5b83600160a060020a03166343b37b458888886040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff1681526020018060200182810382528484828181526020019250808284378201915050945050505050600060405180830381600087803b15156116db57600080fd5b6102c65a03f115156116ec57600080fd5b50505050505050505050565b600d5481565b60006117086147e5565b600061171261483e565b600061171c614873565b60025460ff161561172c57600080fd5b600354600160a060020a0316151561174357600080fd5b600454600160a060020a0316151561175a57600080fd5b600554600160a060020a0316151561177157600080fd5b611780338d8d8d8d8d8d610a33565b151561178b57600080fd5b600554600160a060020a031695508563f31dec5a8e60006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b15156117e157600080fd5b6102c65a03f115156117f257600080fd5b505050604051805190602001805190602001805163ffffffff16606089015250600160a060020a03168652608086019081525115806118435750600160a060020a0333168551600160a060020a0316145b1561184d57600080fd5b600254600160a060020a036101009091048116945086166301d439458e600060405160c0015260405163ffffffff83811660e060020a02825291909116600482015260240160c060405180830381600087803b15156118ab57600080fd5b6102c65a03f115156118bc57600080fd5b50505060405180519060200180519060200180519060200180519060200180519060200180516001604060020a0390811660a08b015291821660808a015250908116606088019081529181166040880152918216602087015291168452600e805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a031617905560009250611959905184608001518560a00151612942565b6020820152611969898989612942565b6080820152600060c082015282516001604060020a0390811682528c16606082015261199481613ef5565b8860a0015160a08a015160600160c08b015192151560e08c015260ff9390931690915263ffffffff92831690915291169052600160a060020a038416635643a71182516119f78860a00151518960a0015160035b60200201518a60e0015161395e565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611a3e57600080fd5b6102c65a03f11515611a4f57600080fd5b50505083600160a060020a0316635643a7118260600151611a8a8860a00151606001518960a0015160005b60200201518a60e001511561395e565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611ad157600080fd5b6102c65a03f11515611ae257600080fd5b5050508460e0015115611af6576001820191505b600160c082015260208301516001604060020a0390811682528b166060820152611b1f81613ef5565b8860a0015160200160a08a015160800160c08b015192151560e08c015260ff9390931660209092019190915263ffffffff92831690915291169052600160a060020a038416635643a7118251611b838860a00151602001518960a0015160046119e8565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611bca57600080fd5b6102c65a03f11515611bdb57600080fd5b50505083600160a060020a0316635643a7118260600151611c0a8860a00151608001518960a001516001611a7a565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611c5157600080fd5b6102c65a03f11515611c6257600080fd5b5050508460e0015115611c76576001820191505b600260c082015260408301516001604060020a0390811682528a166060820152611c9f81613ef5565b8860a0015160400160a08a015160a00160c08b015192151560e08c015260ff9390931660409092019190915263ffffffff92831690915291169052600160a060020a038416635643a7118251611d038860a00151604001518960a0015160056119e8565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611d4a57600080fd5b6102c65a03f11515611d5b57600080fd5b50505083600160a060020a0316635643a7118260600151611d8a8860a0015160a001518960a001516002611a7a565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611dd157600080fd5b6102c65a03f11515611de257600080fd5b5050508460e0015115611df6576001820191505b611e068d60018460ff161161409a565b63ffffffff166060860152600160ff83161115611e3a57610100850160005b90816002811115611e3257fe5b905250611e62565b6000856060015163ffffffff161115611e595761010085016002611e25565b60016101008601525b85600160a060020a0316631f674b5a8e338860c00151518960c00151602001518a60c00151604001518b61010001516002811115611e9c57fe5b8c60a00151518d60a00151602001518e60a001516040015160006040516020015260405163ffffffff8b811660e060020a028252998a166004820152600160a060020a0398909816602489015260ff968716604489015294861660648801529285166084870152931660a485015291841660c484015290831660e483015290911661010482015261012401602060405180830381600087803b1515611f4057600080fd5b6102c65a03f11515611f5157600080fd5b50505060405180516001604060020a031660208701908152600160a060020a03881691506330a8087090518e8e8e8e8e8e8d60a00151606001518e60a00151608001518f60a0015160a0015160405163ffffffff8c811660e060020a0282526001604060020a039b8c166004830152998b166024820152978a1660448901529589166064880152938816608487015291871660a486015290951660c484015293831660e4830152928216610104820152911661012482015261014401600060405180830381600087803b151561202657600080fd5b6102c65a03f1151561203757600080fd5b50505033600160a060020a03167f26194856c6c579d36bc6b21531c958237d96b3f18856c8a745fd16e0133f1e8a8e876101000151600281111561207757fe5b60405163ffffffff909216825260ff1660208201526040908101905180910390a250505050505050505050505050565b60005433600160a060020a039081169116146120c257600080fd5b6002805460ff1916911515919091179055565b60095468010000000000000000900463ffffffff1681565b600254600090819081908190819060ff161561210857600080fd5b600354600160a060020a0316151561211f57600080fd5b600454600160a060020a0316151561213657600080fd5b600554600160a060020a0316151561214d57600080fd5b61215c338c8c8c8c8c8c610a33565b151561216757600080fd5b600454600160a060020a031694508463a847a71c8c60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156121c357600080fd5b6102c65a03f115156121d457600080fd5b5050506040518051905080612257575084600160a060020a031663a847a71c8b60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561223b57600080fd5b6102c65a03f1151561224c57600080fd5b505050604051805190505b806122d0575084600160a060020a031663a847a71c8a60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156122b457600080fd5b6102c65a03f115156122c557600080fd5b505050604051805190505b80612349575084600160a060020a031663a847a71c8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561232d57600080fd5b6102c65a03f1151561233e57600080fd5b505050604051805190505b806123c2575084600160a060020a031663a847a71c8860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156123a657600080fd5b6102c65a03f115156123b757600080fd5b505050604051805190505b8061243b575084600160a060020a031663a847a71c8760006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561241f57600080fd5b6102c65a03f1151561243057600080fd5b505050604051805190505b1561244557600080fd5b5050600554600160a060020a031691506000808363f8a7450133836040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b15156124a557600080fd5b6102c65a03f115156124b657600080fd5b505050604051805190602001805190602001805192955090935090915050600063ffffffff841611806124e95750600082115b156124f357600080fd5b600954640100000000900461ffff16600160a060020a03851663d7ebf53d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561254857600080fd5b6102c65a03f1151561255957600080fd5b5050506040518051905010151561256f57600080fd5b83600160a060020a0316632ecfa02c3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156125c657600080fd5b6102c65a03f115156125d757600080fd5b50505060405180519050600a54348115156125ee57fe5b04019050600960089054906101000a900463ffffffff1663ffffffff168163ffffffff16101561261d57600080fd5b600160a060020a038416635b188d403382632ecfa02c8260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561267b57600080fd5b6102c65a03f1151561268c57600080fd5b5050506040518051905060006040516020015260405163ffffffff84811660e060020a028252600160a060020a0393909316600482015291166024820152604401602060405180830381600087803b15156126e657600080fd5b6102c65a03f115156126f757600080fd5b50505060405180515050600c805434019055600160a060020a03841663b5e5a50a338f8f8f8f8f8f8f8f8b60006040516020015260405163ffffffff8c811660e060020a028252600160a060020a038c16600483019081526001604060020a038a811660448501528981166064850152888116608485015287811660a485015286811660c4850152851660e48401529083166101048301526101206024830190815261012483018b90529091610144018b8b8082843782019150509b505050505050505050505050602060405180830381600087803b15156127d857600080fd5b6102c65a03f115156127e957600080fd5b5050506040518051935050600160a060020a0333167fb67c02473855217c5523d6db57e34ef9aeea067dffec2a3e33dc642f751dc1498460405163ffffffff909116815260200160405180910390a250505050505050505050505050565b60005474010000000000000000000000000000000000000000900461ffff1681565b63ffffffff166000908152600760205260409020805460018201546002909201549092565b6000805433600160a060020a03908116911614806128ca5750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156128d557600080fd5b30600160a060020a0316318211156128ec57600080fd5b6128fa600c54600d546141fd565b90508082111561290957600080fd5b600d805483019055600160a060020a03831682156108fc0283604051600060405180830381858888f193505050501515610fd857600080fd5b61294a6148a6565b60025460009081906101009004600160a060020a0316816001604060020a03881681901115612a145781600160a060020a031662119f3489600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b15156129c957600080fd5b6102c65a03f115156129da57600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515602089015263ffffffff909216875290945092505b6000876001604060020a03161115612aca5781600160a060020a031662119f3488600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612a7c57600080fd5b6102c65a03f11515612a8d57600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515608089015263ffffffff909216606088015290945092505b6000866001604060020a03161115612b805781600160a060020a031662119f3487600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612b3257600080fd5b6102c65a03f11515612b4357600080fd5b5050506040518051906020018051906020018051906020018051906020018051505090151560e089015263ffffffff90921660c088015290945092505b50600354600160a060020a0316602085015115612c4357600160a060020a0381166362b21ad76000875163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612bdc57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612c2057600080fd5b6102c65a03f11515612c3157600080fd5b505050604051805160ff166040870152505b846080015115612cfc5780600160a060020a03166362b21ad76000876060015163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612c9557fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612cd957600080fd5b6102c65a03f11515612cea57600080fd5b505050604051805160ff1660a0870152505b8460e0015115612db65780600160a060020a03166362b21ad760008760c0015163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612d4e57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612d9257600080fd5b6102c65a03f11515612da357600080fd5b505050604051805160ff16610100870152505b505050509392505050565b60005433600160a060020a0390811691161480612dfc5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612e0757600080fd5b60038054600160a060020a0395861673ffffffffffffffffffffffffffffffffffffffff1991821617909155600280549486166101000274ffffffffffffffffffffffffffffffffffffffff001990951694909417909355600480549285169284169290921790915560058054919093169116179055565b600954670100000000000000900460ff1681565b60005433600160a060020a03908116911614612eae57600080fd5b600160a060020a03811660009081526001602052604090205460ff161515612f3a57600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b60005433600160a060020a0390811691161480612f785750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612f8357600080fd5b6009805460ff1990811660ff9a8b161761ff001916610100998b16999099029890981762ff0000191662010000978a1697909702969096176bffffffff000000000000000019166801000000000000000063ffffffff96909616959095029490941763ff00000019166301000000938816939093029290921765ffff00000000191664010000000061ffff92909216919091021766ff000000000000191666010000000000009186169190910217909155600b80549092169216919091179055565b601881565b600381565b60008061305a614771565b6000613064614771565b600354600160a060020a0316915060008080806130808a610d2e565b909450925063ffffffff841615156130a05783838698509850985061322c565b600091506130ad83613833565b9050600091505b60068210156131845785600160a060020a03166362b21ad760038c856000604051602001526040518463ffffffff1660e060020a028152600401808460048111156130fb57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561313f57600080fd5b6102c65a03f1151561315057600080fd5b505050604051805160ff16905085836006811061316957fe5b602002018181510161ffff16905250600191909101906130b4565b600091505b63ffffffff84166000908152600760205260409020600101548210156132225763ffffffff8416600090815260076020526040902060010180546131fb9190849081106131d257fe5b6000918252602091829020828204015460ff929091066101000a90048116906003840216614211565b85836006811061320757fe5b6020020181815161ffff910116905250600190910190613189565b8383869850985098505b5050505050509193909250565b60095460ff1681565b60095462010000900460ff1681565b600054600160a060020a031681565b60008060008061326e6148f2565b6132766148f2565b61327e6148f2565b60005433600160a060020a03908116911614806132b95750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156132c457600080fd5b600354600160a060020a031615156132db57600080fd5b6002546101009004600160a060020a031615156132f757600080fd5b60035460025463ffffffff8a16600081815260076020526040808220600160a060020a039586169c506101009094049094169950975090955088916341b0eb53918891829051602001526040518363ffffffff1660e060020a0281526004018083600481111561336357fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b15156133a057600080fd5b6102c65a03f115156133b157600080fd5b505050604051805190509450846040518059106133cb5750595b908082528060200260200182016040525092505b60008511156134ba5786600160a060020a03166362b21ad760008a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561342f57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561347357600080fd5b6102c65a03f1151561348457600080fd5b5050506040518051905083600187038151811061349d57fe5b60ff909216602092830290910190910152600019909401936133df565b838380516134cc929160200190614904565b5086600160a060020a03166341b0eb5360018a63ffffffff166000604051602001526040518363ffffffff1660e060020a0281526004018083600481111561351057fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b151561354d57600080fd5b6102c65a03f1151561355e57600080fd5b505050604051805190509450846040518059106135785750595b908082528060200260200182016040525091505b60008511156136675786600160a060020a03166362b21ad760018a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a028152600401808460048111156135dc57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561362057600080fd5b6102c65a03f1151561363157600080fd5b5050506040518051905082600187038151811061364a57fe5b60ff9092166020928302909101909101526000199094019361358c565b6001840182805161367c929160200190614904565b5085600160a060020a03166388e9abb689600080604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff1681526020018260018111156136cb57fe5b60ff16815260200192505050602060405180830381600087803b15156136f057600080fd5b6102c65a03f1151561370157600080fd5b5050506040518051905094508460405180591061371b5750595b908082528060200260200182016040525090505b60008511156138015785600160a060020a0316635b626339896000600189036000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff16815260200183600181111561378b57fe5b60ff1681526020018281526020019350505050602060405180830381600087803b15156137b757600080fd5b6102c65a03f115156137c857600080fd5b505050604051805190508160018703815181106137e157fe5b63ffffffff9092166020928302909101909101526000199094019361372f565b600284018180516138169291602001906149aa565b505050505050505050565b600954640100000000900461ffff1681565b600060016064825b8160ff168360ff1610156138ab5750600281830160ff16045b8160ff168360ff1610156138a657600260ff848401160460ff811660009081526008602052604090205490915063ffffffff908116908616101561389a578091506138a1565b8060010192505b613854565b61383b565b50909392505050565b60005433600160a060020a039081169116146138cf57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff1615151415612f3a57600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b60008060008060008061397088613833565b945061397b89613833565b93508492508360030160ff168560ff1611156139a257600260ff60038601160492506139ac565b600260ff86160492505b600191508260ff1660140a8360ff1660150a6103e8028115156139cb57fe5b048002905060ff6003850181169086161180156139f357508260020260ff168460030160ff16115b80613a1a57508360030160ff168560ff1611158015613a1a57508260020260ff168560ff16115b15613a29576014601582020490505b8615613a3f57620f4240601e8202049150613a4b565b620f4240600a82020491505b60ff60058601811690851610613a8457600560ff868603160460ff1660020a63ffffffff168263ffffffff16811515613a8057fe5b0491505b50979650505050505050565b6009546301000000900460ff1681565b600b5460ff1681565b6000806000613ab6614799565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613b1357600080fd5b6102c65a03f11515613b2457600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff91821660808801908152600160a060020a039093166040880152921660208601526001604060020a039092168452915051613b9a8360800151613833565b94509450505050915091565b60025460009081908190819060ff1615613bbf57600080fd5b600554600160a060020a03161515613bd657600080fd5b600554600160a060020a031693508363f31dec5a8660006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b1515613c2c57600080fd5b6102c65a03f11515613c3d57600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a0390811690831614613c7957600080fd5b6000831115613cdf5783600160a060020a0316634377c1cf8660405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b1515613cca57600080fd5b6102c65a03f11515613cdb57600080fd5b5050505b8463ffffffff167f7896e0932299b049700f86ae09c1e775b823c8527fb25549987819578913046a60405160405180910390a25050505050565b600954610100900460ff1681565b600a5481565b600681565b600080613d3d614799565b600354600160a060020a0316915081630720246086600060405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613d9957600080fd5b6102c65a03f11515613daa57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529085169051600160a060020a03161492505b505092915050565b600c5481565b600554600160a060020a031681565b6009546601000000000000900460ff1681565b60025460ff1681565b60005433600160a060020a03908116911614613e8557600080fd5b600160a060020a03811615612f3a5760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b600454600160a060020a031681565b60008161ffff168361ffff161115613eeb5750808203613eef565b5060005b92915050565b600080600080613f03614771565b613f0b614771565b6000613f168861423c565b600954939a509098509094509250613f4e906601000000000000900460ff1660020160c08a0151600e54600160a060020a0316611538565b9450600090505b6009546601000000000000900460ff1661ffff8216108015613f7c57506000835161ffff16115b8015613f8d57506000825161ffff16115b156140805760a082015161ffff1660a084015161ffff16111561404257600261ffff82160661ffff166000141561400457613ff98260005b6020020151613ff46020860151606087015160408701518760045b60200201518b60ff168861ffff1614610e1b565b613ed0565b61ffff16825261403d565b61402a8360005b6020020151613ff4602085015160608601516040880151886004613fe0565b8360005b61ffff90921660209290920201525b614078565b600261ffff82160661ffff16156140665761405e826000613fc5565b82600061402e565b61407183600061400b565b61ffff1683525b600101613f55565b815161ffff16835161ffff16101593505050509193509193565b6005546000908190819081908190600160a060020a031615156140bc57600080fd5b85156140cb57600094506141f3565b600554600160a060020a031693508363bb583f198860006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561412157600080fd5b6102c65a03f1151561413257600080fd5b50505060405180519060200180519060200180516009549396509194509092505063ffffffff6001840181169160ff6701000000000000009091041690851681151561417a57fe5b04820163ffffffff161115156141ee5783600160a060020a0316634377c1cf8860405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b15156141d257600080fd5b6102c65a03f115156141e357600080fd5b5050508094506141f3565b600094505b5050505092915050565b6000808284101561420a57fe5b5050900390565b600082820283158061422d575082848281151561422a57fe5b04145b151561423557fe5b9392505050565b6000614246614771565b6000614250614771565b600080808061425f895161304f565b909950975093506000925061427760608a015161304f565b9097509550925061428884846143c3565b61ffff90811660a08c01521660408a01526142a78460208b0151614589565b896040018181510161ffff169052506142c48360808b0151614589565b8960a0018181510161ffff169052506142e18460208b015161467f565b91506142f1838a6080015161467f565b90508860400151602088015102602088018181510161ffff169052506040890151606088015102606088018181510161ffff1690525060a0890151602086015102602086018181510161ffff1690525060a0890151606086015102606086018181510161ffff1690525081604088015102604088018181510161ffff1690525081608088015102608088018181510161ffff1690525080604086015102604086018181510161ffff1690525080608086015102608086018181510161ffff169052509698959750939550919392505050565b600080808080805b63ffffffff881660009081526007602052604090205482101561454e575060005b63ffffffff87166000908152600760205260409020548110156145435763ffffffff8716600090815260076020526040902080548290811061442a57fe5b60009182526020808320818304015463ffffffff8c16845260078252604084208054929093066101000a900460ff169260069290918690811061446957fe5b60009182526020808320818304015460ff928290066101000a90048216845283019390935260409091019020541614156144a257600193505b63ffffffff881660009081526007602052604090208054839081106144c357fe5b60009182526020808320818304015463ffffffff8b16845260078252604084208054929093066101000a900460ff169260069290918590811061450257fe5b60009182526020808320818304015460ff928290066101000a900482168452830193909352604090910190205416141561453b57600192505b6001016143ec565b6001909101906143cb565b83156145665760095462010000900460ff1695909501945b821561457e5760095462010000900460ff1694909401935b505050509250929050565b63ffffffff8216600090815260076020526040812060020154819081908180821115614668575060009250825b818410156146685763ffffffff871660009081526007602052604090206002018054859081106145e257fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff169050856000015163ffffffff168163ffffffff1614806146375750856060015163ffffffff168163ffffffff16145b8061465157508560c0015163ffffffff168163ffffffff16145b1561465d576001830192505b6001909301926145b6565b60095460ff90811684021694505050505092915050565b600080805b63ffffffff8516600090815260076020526040902054821015613e315763ffffffff851660009081526007602052604090208054839081106146c257fe5b6000918252602091829020828204015460ff918390066101000a90041691508401511561470657836040015160ff168160ff16141561470657600183019250614766565b83608001511561472d578360a0015160ff168160ff16141561472d57600183019250614766565b8360e00151156147555783610100015160ff168160ff16141561475557600183019250614766565b600954610100900460ff1692909202915b600190910190614684565b60c06040519081016040526006815b6000815260001990910190602001816147805790505090565b610100604051908101604090815260008083526020830181905290820152606081016147c36148f2565b8152600060208201819052604082018190526060820181905260809091015290565b610200604051908101604090815260008083526020830181905290820181905260608201819052608082015260a0810161481d614771565b815260200161482a614a55565b815260006020820181905260409091015290565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b6102e0604051908101604052600081526020810161488f6148a6565b8152600060208201819052604082015260600161482a5b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015290565b60206040519081016040526000815290565b82805482825590600052602060002090601f0160209004810192821561499a5791602002820160005b8382111561496b57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261492d565b80156149985782816101000a81549060ff021916905560010160208160000104928301926001030261496b565b505b506149a6929150614a6f565b5090565b82805482825590600052602060002090600701600890048101928215614a495791602002820160005b83821115614a1757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026149d3565b8015614a475782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614a17565b505b506149a6929150614a90565b606060405190810160405260008152600260208201614780565b614a8d91905b808211156149a657805460ff19168155600101614a75565b90565b614a8d91905b808211156149a657805463ffffffff19168155600101614a965600a165627a7a7230582061caabcde420fb9a8f926ce3c35c312fbcdce18e7260d0f6d548c8de0b58a5130029000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d600000000000000000000000065c440683088134aef7af22f3fad6a9ee5c19fed00000000000000000000000075aa01dc00f6aeefe14bd58a5b6cbb091c6dc57b
Deployed Bytecode
0x60606040526004361061024d5763ffffffff60e060020a6000350416630672859b81146102525780630d6688181461028d57806314d0f1ba146102bc57806318758480146102ef5780631bab0908146103025780631cd982351461034b57806320046e911461038b5780633171cec4146103d357806333ced321146103f457806333d24dc41461040757806335f097f31461041a5780633a34f09a1461043957806343b37b451461047a578063455fd623146104a257806347cf8971146104c757806348ef5aa81461050d5780634a3d3c09146105255780634aaff006146105515780634efb023e14610590578063500e4297146105a3578063522f6815146105e357806354f0bde714610605578063615dbebb146106305780636b2a2691146106615780636c81fd6d14610674578063720ffedb1461069357806373d65c00146106dc578063775e38f7146106ef57806384be816c1461070257806385bbb53a1461076f578063891fe103146107825780638da5cb5b146107955780638fd8f783146107a8578063a0c66b43146107c4578063b2cad9b7146107d7578063b85d6275146107f3578063be44bd2114610812578063cc06c35914610839578063cfa830791461084c578063d2169d2f1461085f578063d4c15161146108a0578063d5425571146108bc578063d8e20e2c146108cf578063d98e14bd146108e2578063da5671ad146108f5578063dffd722f14610920578063eb83f01514610933578063ebfa3c1b14610946578063ee4e441614610959578063f28532921461096c578063ffa640d81461098b575b600080fd5b341561025d57600080fd5b6102716001604060020a036004351661099e565b6040516001604060020a03909116815260200160405180910390f35b341561029857600080fd5b6102a06109fb565b604051600160a060020a03909116815260200160405180910390f35b34156102c757600080fd5b6102db600160a060020a0360043516610a0a565b604051901515815260200160405180910390f35b34156102fa57600080fd5b6102a0610a1f565b341561030d57600080fd5b6102db600160a060020a03600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c43516610a33565b341561035657600080fd5b61036a6001604060020a0360043516610d2e565b60405163ffffffff9283168152911660208201526040908101905180910390f35b341561039657600080fd5b6103bc61ffff600435811690602435811690604435811690606435166084351515610e1b565b60405161ffff909116815260200160405180910390f35b34156103de57600080fd5b6103f260ff60043581169060243516610ec7565b005b34156103ff57600080fd5b6103f2610f2f565b341561041257600080fd5b6103f2610fdd565b341561042557600080fd5b6102db6001604060020a0360043516611306565b341561044457600080fd5b61046460ff60043581169060243516600160a060020a0360443516611538565b60405160ff909116815260200160405180910390f35b341561048557600080fd5b6103f26004803563ffffffff169060248035908101910135611592565b34156104ad57600080fd5b6104b56116f8565b60405190815260200160405180910390f35b34156104d257600080fd5b6103f263ffffffff600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c435166116fe565b341561051857600080fd5b6103f260043515156120a7565b341561053057600080fd5b6105386120d5565b60405163ffffffff909116815260200160405180910390f35b6103f260246004803582810192910135906001604060020a03903581169060443581169060643581169060843581169060a43581169060c435166120ed565b341561059b57600080fd5b6103bc612847565b34156105ae57600080fd5b6105bf63ffffffff60043516612869565b60405180848152602001838152602001828152602001935050505060405180910390f35b34156105ee57600080fd5b6103f2600160a060020a036004351660243561288e565b341561061057600080fd5b6104b56001604060020a0360043581169060243581169060443516612942565b341561063b57600080fd5b6103f2600160a060020a0360043581169060243581169060443581169060643516612dc1565b341561066c57600080fd5b610464612e7f565b341561067f57600080fd5b6103f2600160a060020a0360043516612e93565b341561069e57600080fd5b6103f260ff60043581169060243581169060443581169063ffffffff606435169060843581169061ffff60a435169060c43581169060e43516612f3d565b34156106e757600080fd5b610464613045565b34156106fa57600080fd5b61046461304a565b341561070d57600080fd5b6107216001604060020a036004351661304f565b60405163ffffffff808516825283166020820152604081018260c080838360005b8381101561075a578082015183820152602001610742565b50505050905001935050505060405180910390f35b341561077a57600080fd5b610464613239565b341561078d57600080fd5b610464613242565b34156107a057600080fd5b6102a0613251565b34156107b357600080fd5b6103f263ffffffff60043516613260565b34156107cf57600080fd5b6103bc613821565b34156107e257600080fd5b61046463ffffffff60043516613833565b34156107fe57600080fd5b6103f2600160a060020a03600435166138b4565b341561081d57600080fd5b61053863ffffffff60043581169060243516604435151561395e565b341561084457600080fd5b610464613a90565b341561085757600080fd5b610464613aa0565b341561086a57600080fd5b61087e6001604060020a0360043516613aa9565b60405163ffffffff909216825260ff1660208201526040908101905180910390f35b34156108ab57600080fd5b6103f263ffffffff60043516613ba6565b34156108c757600080fd5b610464613d19565b34156108da57600080fd5b6104b5613d27565b34156108ed57600080fd5b610464613d2d565b341561090057600080fd5b6102db6001604060020a0360043516600160a060020a0360243516613d32565b341561092b57600080fd5b6104b5613e39565b341561093e57600080fd5b6102a0613e3f565b341561095157600080fd5b610464613e4e565b341561096457600080fd5b6102db613e61565b341561097757600080fd5b6103f2600160a060020a0360043516613e6a565b341561099657600080fd5b6102a0613ec1565b60006109a8614771565b60008080806109b68761304f565b96509094509250600090505b60068110156109ed578481600681106109d757fe5b602002015161ffff1691909101906001016109c2565b506006900495945050505050565b600354600160a060020a031681565b60016020526000908152604090205460ff1681565b6002546101009004600160a060020a031681565b60006001604060020a0387161580610a5257506001604060020a038616155b80610a6457506001604060020a038516155b15610a7157506000610d23565b856001604060020a0316876001604060020a03161480610aa25750846001604060020a0316876001604060020a0316145b80610abe5750836001604060020a0316876001604060020a0316145b80610ada5750826001604060020a0316876001604060020a0316145b80610af65750816001604060020a0316876001604060020a0316145b15610b0357506000610d23565b846001604060020a0316866001604060020a03161480610b345750836001604060020a0316866001604060020a0316145b80610b505750826001604060020a0316866001604060020a0316145b80610b6c5750816001604060020a0316866001604060020a0316145b15610b7957506000610d23565b836001604060020a0316856001604060020a03161480610baa5750826001604060020a0316856001604060020a0316145b80610bc65750816001604060020a0316856001604060020a0316145b15610bd357506000610d23565b6000846001604060020a0316118015610c185750826001604060020a0316846001604060020a03161480610c185750816001604060020a0316846001604060020a0316145b15610c2557506000610d23565b6000836001604060020a0316118015610c4f5750816001604060020a0316836001604060020a0316145b15610c5c57506000610d23565b610c668789613d32565b1580610c795750610c778689613d32565b155b80610c8b5750610c898589613d32565b155b15610c9857506000610d23565b6000846001604060020a0316118015610cb85750610cb68489613d32565b155b15610cc557506000610d23565b6000836001604060020a0316118015610ce55750610ce38389613d32565b155b15610cf257506000610d23565b6000826001604060020a0316118015610d125750610d108289613d32565b155b15610d1f57506000610d23565b5060015b979650505050505050565b6000806000610d3b614799565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515610d9857600080fd5b6102c65a03f11515610da957600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501908152919750915051826080015194509450505050915091565b60008060008315610e4157600a61ffff600d8a0216049750600a61ffff600d8902160496505b610e5688600461ffff60038a02165b04613ed0565b9150610e6b87600461ffff6003890216610e50565b600b5490915060ff1661ffff8316108015610e8e5750600b5460ff1661ffff8216105b15610ea057600b5460ff169250610ebc565b8061ffff168261ffff161115610eb857819250610ebc565b8092505b505095945050505050565b60005433600160a060020a0390811691161480610f025750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610f0d57600080fd5b60ff9182166000908152600660205260409020805460ff191691909216179055565b600080548190819033600160a060020a0390811691161480610f6f5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610f7a57600080fd5b506001915060649050805b606460ff841611610fd85760ff83166000908152600860205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050610f85565b505050565b60005433600160a060020a03908116911614806110185750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561102357600080fd5b600660208190527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31805460ff19908116600e179091557f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace298054821660101790557f75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d28054821660081790557fc5069e24aaadb2addc3e52e868fcf3f4f8acf5a87e24300992fd4540c2a87eed8054821660091790557fbfd358e93f18da3ed276c3afdbdba00b8f0b6008a03476a6a86bd6320ee6938b8054821660021790557f697b2bd7bb2984c4e0dc14c79c987d37818484a62958b9c45a0e8b962f20650f80548216600b1790557f4ced6d0d36392b04cc5d8761b1327b3bbba6e1089c77f60a9a9ca18e05e4f00e8054821660031790557fb8d683c9d414f481826f3e7fe14b3ac6ae8c73450778287390c4bb8cb9f2e80b8054821660051790557fca4d0c6c94a9477136dd41a99cc19ecbe441c8f6609efe7c6fa65be007a4732380548216600f1790557f85291c2e7881182c13e19eca9b58927ebfdc2c5d04882018eeb33d8241d357118054821660129081179091557f0b94fa1b86997cc1f1148bfbe25b674e8cefc7cc6f976aa8d7c7966bd4cca3478054831660071790557f248457bacb20e239ae314d8db91c0f270e453c28ee138c84f97aea6cfcf9a499805483169093179092557faca6cdb4b5fe0ec50731a73f714dd191dc1911bfeb3f9eeb9e94ed0f6065ef8d8054821660111790557ff130046d53bc87538ab17e4752ba5f5082985eecc06ccb932c5a55e8242dd50280548216600d1790557f6fac4587033fa036e2426ad0134940d3a683633cc2b2b7862f39195344f163d180548216600c1790557f84a4048ee77615560f9afb39551a46e123dd0dd6c928af241dc565271d0325698054821660011790556000919091527fee4750d043edce57577a49a1f0c4b389e3b8c38c27dc693bc6b7154c0728077180549091166004179055565b600080600080600080611317614799565b600354600554600160a060020a03918216975016945060009250829150856307202460898460405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561138157600080fd5b6102c65a03f1151561139257600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529086169063f8a74501905160006040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b151561145957600080fd5b6102c65a03f1151561146a57600080fd5b50505060405180519060200180519060200180519296509094505063ffffffff908116925060009085161180156114a15750600083115b156115285784600160a060020a031663dc268db9858a60006040516020015260405163ffffffff84811660e060020a0282529290921660048301526001604060020a03166024820152604401602060405180830381600087803b151561150657600080fd5b6102c65a03f1151561151757600080fd5b50505060405180519050965061152d565b600096505b505050505050919050565b6000600019430140600160a060020a03831601815b8460ff168160ff16108015611565575060068160ff16105b15611579576101008204915060010161154d565b8560ff168281151561158757fe5b069695505050505050565b60025460009081908190819060ff16156115ab57600080fd5b600554600160a060020a031615156115c257600080fd5b600554600160a060020a031693508363f31dec5a8860006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561161857600080fd5b6102c65a03f1151561162957600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a039081169083161461166557600080fd5b83600160a060020a03166343b37b458888886040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff1681526020018060200182810382528484828181526020019250808284378201915050945050505050600060405180830381600087803b15156116db57600080fd5b6102c65a03f115156116ec57600080fd5b50505050505050505050565b600d5481565b60006117086147e5565b600061171261483e565b600061171c614873565b60025460ff161561172c57600080fd5b600354600160a060020a0316151561174357600080fd5b600454600160a060020a0316151561175a57600080fd5b600554600160a060020a0316151561177157600080fd5b611780338d8d8d8d8d8d610a33565b151561178b57600080fd5b600554600160a060020a031695508563f31dec5a8e60006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b15156117e157600080fd5b6102c65a03f115156117f257600080fd5b505050604051805190602001805190602001805163ffffffff16606089015250600160a060020a03168652608086019081525115806118435750600160a060020a0333168551600160a060020a0316145b1561184d57600080fd5b600254600160a060020a036101009091048116945086166301d439458e600060405160c0015260405163ffffffff83811660e060020a02825291909116600482015260240160c060405180830381600087803b15156118ab57600080fd5b6102c65a03f115156118bc57600080fd5b50505060405180519060200180519060200180519060200180519060200180519060200180516001604060020a0390811660a08b015291821660808a015250908116606088019081529181166040880152918216602087015291168452600e805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a031617905560009250611959905184608001518560a00151612942565b6020820152611969898989612942565b6080820152600060c082015282516001604060020a0390811682528c16606082015261199481613ef5565b8860a0015160a08a015160600160c08b015192151560e08c015260ff9390931690915263ffffffff92831690915291169052600160a060020a038416635643a71182516119f78860a00151518960a0015160035b60200201518a60e0015161395e565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611a3e57600080fd5b6102c65a03f11515611a4f57600080fd5b50505083600160a060020a0316635643a7118260600151611a8a8860a00151606001518960a0015160005b60200201518a60e001511561395e565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611ad157600080fd5b6102c65a03f11515611ae257600080fd5b5050508460e0015115611af6576001820191505b600160c082015260208301516001604060020a0390811682528b166060820152611b1f81613ef5565b8860a0015160200160a08a015160800160c08b015192151560e08c015260ff9390931660209092019190915263ffffffff92831690915291169052600160a060020a038416635643a7118251611b838860a00151602001518960a0015160046119e8565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611bca57600080fd5b6102c65a03f11515611bdb57600080fd5b50505083600160a060020a0316635643a7118260600151611c0a8860a00151608001518960a001516001611a7a565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611c5157600080fd5b6102c65a03f11515611c6257600080fd5b5050508460e0015115611c76576001820191505b600260c082015260408301516001604060020a0390811682528a166060820152611c9f81613ef5565b8860a0015160400160a08a015160a00160c08b015192151560e08c015260ff9390931660409092019190915263ffffffff92831690915291169052600160a060020a038416635643a7118251611d038860a00151604001518960a0015160056119e8565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611d4a57600080fd5b6102c65a03f11515611d5b57600080fd5b50505083600160a060020a0316635643a7118260600151611d8a8860a0015160a001518960a001516002611a7a565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611dd157600080fd5b6102c65a03f11515611de257600080fd5b5050508460e0015115611df6576001820191505b611e068d60018460ff161161409a565b63ffffffff166060860152600160ff83161115611e3a57610100850160005b90816002811115611e3257fe5b905250611e62565b6000856060015163ffffffff161115611e595761010085016002611e25565b60016101008601525b85600160a060020a0316631f674b5a8e338860c00151518960c00151602001518a60c00151604001518b61010001516002811115611e9c57fe5b8c60a00151518d60a00151602001518e60a001516040015160006040516020015260405163ffffffff8b811660e060020a028252998a166004820152600160a060020a0398909816602489015260ff968716604489015294861660648801529285166084870152931660a485015291841660c484015290831660e483015290911661010482015261012401602060405180830381600087803b1515611f4057600080fd5b6102c65a03f11515611f5157600080fd5b50505060405180516001604060020a031660208701908152600160a060020a03881691506330a8087090518e8e8e8e8e8e8d60a00151606001518e60a00151608001518f60a0015160a0015160405163ffffffff8c811660e060020a0282526001604060020a039b8c166004830152998b166024820152978a1660448901529589166064880152938816608487015291871660a486015290951660c484015293831660e4830152928216610104820152911661012482015261014401600060405180830381600087803b151561202657600080fd5b6102c65a03f1151561203757600080fd5b50505033600160a060020a03167f26194856c6c579d36bc6b21531c958237d96b3f18856c8a745fd16e0133f1e8a8e876101000151600281111561207757fe5b60405163ffffffff909216825260ff1660208201526040908101905180910390a250505050505050505050505050565b60005433600160a060020a039081169116146120c257600080fd5b6002805460ff1916911515919091179055565b60095468010000000000000000900463ffffffff1681565b600254600090819081908190819060ff161561210857600080fd5b600354600160a060020a0316151561211f57600080fd5b600454600160a060020a0316151561213657600080fd5b600554600160a060020a0316151561214d57600080fd5b61215c338c8c8c8c8c8c610a33565b151561216757600080fd5b600454600160a060020a031694508463a847a71c8c60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156121c357600080fd5b6102c65a03f115156121d457600080fd5b5050506040518051905080612257575084600160a060020a031663a847a71c8b60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561223b57600080fd5b6102c65a03f1151561224c57600080fd5b505050604051805190505b806122d0575084600160a060020a031663a847a71c8a60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156122b457600080fd5b6102c65a03f115156122c557600080fd5b505050604051805190505b80612349575084600160a060020a031663a847a71c8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561232d57600080fd5b6102c65a03f1151561233e57600080fd5b505050604051805190505b806123c2575084600160a060020a031663a847a71c8860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156123a657600080fd5b6102c65a03f115156123b757600080fd5b505050604051805190505b8061243b575084600160a060020a031663a847a71c8760006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561241f57600080fd5b6102c65a03f1151561243057600080fd5b505050604051805190505b1561244557600080fd5b5050600554600160a060020a031691506000808363f8a7450133836040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b15156124a557600080fd5b6102c65a03f115156124b657600080fd5b505050604051805190602001805190602001805192955090935090915050600063ffffffff841611806124e95750600082115b156124f357600080fd5b600954640100000000900461ffff16600160a060020a03851663d7ebf53d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561254857600080fd5b6102c65a03f1151561255957600080fd5b5050506040518051905010151561256f57600080fd5b83600160a060020a0316632ecfa02c3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156125c657600080fd5b6102c65a03f115156125d757600080fd5b50505060405180519050600a54348115156125ee57fe5b04019050600960089054906101000a900463ffffffff1663ffffffff168163ffffffff16101561261d57600080fd5b600160a060020a038416635b188d403382632ecfa02c8260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561267b57600080fd5b6102c65a03f1151561268c57600080fd5b5050506040518051905060006040516020015260405163ffffffff84811660e060020a028252600160a060020a0393909316600482015291166024820152604401602060405180830381600087803b15156126e657600080fd5b6102c65a03f115156126f757600080fd5b50505060405180515050600c805434019055600160a060020a03841663b5e5a50a338f8f8f8f8f8f8f8f8b60006040516020015260405163ffffffff8c811660e060020a028252600160a060020a038c16600483019081526001604060020a038a811660448501528981166064850152888116608485015287811660a485015286811660c4850152851660e48401529083166101048301526101206024830190815261012483018b90529091610144018b8b8082843782019150509b505050505050505050505050602060405180830381600087803b15156127d857600080fd5b6102c65a03f115156127e957600080fd5b5050506040518051935050600160a060020a0333167fb67c02473855217c5523d6db57e34ef9aeea067dffec2a3e33dc642f751dc1498460405163ffffffff909116815260200160405180910390a250505050505050505050505050565b60005474010000000000000000000000000000000000000000900461ffff1681565b63ffffffff166000908152600760205260409020805460018201546002909201549092565b6000805433600160a060020a03908116911614806128ca5750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156128d557600080fd5b30600160a060020a0316318211156128ec57600080fd5b6128fa600c54600d546141fd565b90508082111561290957600080fd5b600d805483019055600160a060020a03831682156108fc0283604051600060405180830381858888f193505050501515610fd857600080fd5b61294a6148a6565b60025460009081906101009004600160a060020a0316816001604060020a03881681901115612a145781600160a060020a031662119f3489600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b15156129c957600080fd5b6102c65a03f115156129da57600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515602089015263ffffffff909216875290945092505b6000876001604060020a03161115612aca5781600160a060020a031662119f3488600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612a7c57600080fd5b6102c65a03f11515612a8d57600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515608089015263ffffffff909216606088015290945092505b6000866001604060020a03161115612b805781600160a060020a031662119f3487600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612b3257600080fd5b6102c65a03f11515612b4357600080fd5b5050506040518051906020018051906020018051906020018051906020018051505090151560e089015263ffffffff90921660c088015290945092505b50600354600160a060020a0316602085015115612c4357600160a060020a0381166362b21ad76000875163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612bdc57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612c2057600080fd5b6102c65a03f11515612c3157600080fd5b505050604051805160ff166040870152505b846080015115612cfc5780600160a060020a03166362b21ad76000876060015163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612c9557fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612cd957600080fd5b6102c65a03f11515612cea57600080fd5b505050604051805160ff1660a0870152505b8460e0015115612db65780600160a060020a03166362b21ad760008760c0015163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612d4e57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612d9257600080fd5b6102c65a03f11515612da357600080fd5b505050604051805160ff16610100870152505b505050509392505050565b60005433600160a060020a0390811691161480612dfc5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612e0757600080fd5b60038054600160a060020a0395861673ffffffffffffffffffffffffffffffffffffffff1991821617909155600280549486166101000274ffffffffffffffffffffffffffffffffffffffff001990951694909417909355600480549285169284169290921790915560058054919093169116179055565b600954670100000000000000900460ff1681565b60005433600160a060020a03908116911614612eae57600080fd5b600160a060020a03811660009081526001602052604090205460ff161515612f3a57600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b60005433600160a060020a0390811691161480612f785750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612f8357600080fd5b6009805460ff1990811660ff9a8b161761ff001916610100998b16999099029890981762ff0000191662010000978a1697909702969096176bffffffff000000000000000019166801000000000000000063ffffffff96909616959095029490941763ff00000019166301000000938816939093029290921765ffff00000000191664010000000061ffff92909216919091021766ff000000000000191666010000000000009186169190910217909155600b80549092169216919091179055565b601881565b600381565b60008061305a614771565b6000613064614771565b600354600160a060020a0316915060008080806130808a610d2e565b909450925063ffffffff841615156130a05783838698509850985061322c565b600091506130ad83613833565b9050600091505b60068210156131845785600160a060020a03166362b21ad760038c856000604051602001526040518463ffffffff1660e060020a028152600401808460048111156130fb57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561313f57600080fd5b6102c65a03f1151561315057600080fd5b505050604051805160ff16905085836006811061316957fe5b602002018181510161ffff16905250600191909101906130b4565b600091505b63ffffffff84166000908152600760205260409020600101548210156132225763ffffffff8416600090815260076020526040902060010180546131fb9190849081106131d257fe5b6000918252602091829020828204015460ff929091066101000a90048116906003840216614211565b85836006811061320757fe5b6020020181815161ffff910116905250600190910190613189565b8383869850985098505b5050505050509193909250565b60095460ff1681565b60095462010000900460ff1681565b600054600160a060020a031681565b60008060008061326e6148f2565b6132766148f2565b61327e6148f2565b60005433600160a060020a03908116911614806132b95750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156132c457600080fd5b600354600160a060020a031615156132db57600080fd5b6002546101009004600160a060020a031615156132f757600080fd5b60035460025463ffffffff8a16600081815260076020526040808220600160a060020a039586169c506101009094049094169950975090955088916341b0eb53918891829051602001526040518363ffffffff1660e060020a0281526004018083600481111561336357fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b15156133a057600080fd5b6102c65a03f115156133b157600080fd5b505050604051805190509450846040518059106133cb5750595b908082528060200260200182016040525092505b60008511156134ba5786600160a060020a03166362b21ad760008a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561342f57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561347357600080fd5b6102c65a03f1151561348457600080fd5b5050506040518051905083600187038151811061349d57fe5b60ff909216602092830290910190910152600019909401936133df565b838380516134cc929160200190614904565b5086600160a060020a03166341b0eb5360018a63ffffffff166000604051602001526040518363ffffffff1660e060020a0281526004018083600481111561351057fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b151561354d57600080fd5b6102c65a03f1151561355e57600080fd5b505050604051805190509450846040518059106135785750595b908082528060200260200182016040525091505b60008511156136675786600160a060020a03166362b21ad760018a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a028152600401808460048111156135dc57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561362057600080fd5b6102c65a03f1151561363157600080fd5b5050506040518051905082600187038151811061364a57fe5b60ff9092166020928302909101909101526000199094019361358c565b6001840182805161367c929160200190614904565b5085600160a060020a03166388e9abb689600080604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff1681526020018260018111156136cb57fe5b60ff16815260200192505050602060405180830381600087803b15156136f057600080fd5b6102c65a03f1151561370157600080fd5b5050506040518051905094508460405180591061371b5750595b908082528060200260200182016040525090505b60008511156138015785600160a060020a0316635b626339896000600189036000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff16815260200183600181111561378b57fe5b60ff1681526020018281526020019350505050602060405180830381600087803b15156137b757600080fd5b6102c65a03f115156137c857600080fd5b505050604051805190508160018703815181106137e157fe5b63ffffffff9092166020928302909101909101526000199094019361372f565b600284018180516138169291602001906149aa565b505050505050505050565b600954640100000000900461ffff1681565b600060016064825b8160ff168360ff1610156138ab5750600281830160ff16045b8160ff168360ff1610156138a657600260ff848401160460ff811660009081526008602052604090205490915063ffffffff908116908616101561389a578091506138a1565b8060010192505b613854565b61383b565b50909392505050565b60005433600160a060020a039081169116146138cf57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff1615151415612f3a57600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b60008060008060008061397088613833565b945061397b89613833565b93508492508360030160ff168560ff1611156139a257600260ff60038601160492506139ac565b600260ff86160492505b600191508260ff1660140a8360ff1660150a6103e8028115156139cb57fe5b048002905060ff6003850181169086161180156139f357508260020260ff168460030160ff16115b80613a1a57508360030160ff168560ff1611158015613a1a57508260020260ff168560ff16115b15613a29576014601582020490505b8615613a3f57620f4240601e8202049150613a4b565b620f4240600a82020491505b60ff60058601811690851610613a8457600560ff868603160460ff1660020a63ffffffff168263ffffffff16811515613a8057fe5b0491505b50979650505050505050565b6009546301000000900460ff1681565b600b5460ff1681565b6000806000613ab6614799565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613b1357600080fd5b6102c65a03f11515613b2457600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff91821660808801908152600160a060020a039093166040880152921660208601526001604060020a039092168452915051613b9a8360800151613833565b94509450505050915091565b60025460009081908190819060ff1615613bbf57600080fd5b600554600160a060020a03161515613bd657600080fd5b600554600160a060020a031693508363f31dec5a8660006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b1515613c2c57600080fd5b6102c65a03f11515613c3d57600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a0390811690831614613c7957600080fd5b6000831115613cdf5783600160a060020a0316634377c1cf8660405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b1515613cca57600080fd5b6102c65a03f11515613cdb57600080fd5b5050505b8463ffffffff167f7896e0932299b049700f86ae09c1e775b823c8527fb25549987819578913046a60405160405180910390a25050505050565b600954610100900460ff1681565b600a5481565b600681565b600080613d3d614799565b600354600160a060020a0316915081630720246086600060405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613d9957600080fd5b6102c65a03f11515613daa57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529085169051600160a060020a03161492505b505092915050565b600c5481565b600554600160a060020a031681565b6009546601000000000000900460ff1681565b60025460ff1681565b60005433600160a060020a03908116911614613e8557600080fd5b600160a060020a03811615612f3a5760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b600454600160a060020a031681565b60008161ffff168361ffff161115613eeb5750808203613eef565b5060005b92915050565b600080600080613f03614771565b613f0b614771565b6000613f168861423c565b600954939a509098509094509250613f4e906601000000000000900460ff1660020160c08a0151600e54600160a060020a0316611538565b9450600090505b6009546601000000000000900460ff1661ffff8216108015613f7c57506000835161ffff16115b8015613f8d57506000825161ffff16115b156140805760a082015161ffff1660a084015161ffff16111561404257600261ffff82160661ffff166000141561400457613ff98260005b6020020151613ff46020860151606087015160408701518760045b60200201518b60ff168861ffff1614610e1b565b613ed0565b61ffff16825261403d565b61402a8360005b6020020151613ff4602085015160608601516040880151886004613fe0565b8360005b61ffff90921660209290920201525b614078565b600261ffff82160661ffff16156140665761405e826000613fc5565b82600061402e565b61407183600061400b565b61ffff1683525b600101613f55565b815161ffff16835161ffff16101593505050509193509193565b6005546000908190819081908190600160a060020a031615156140bc57600080fd5b85156140cb57600094506141f3565b600554600160a060020a031693508363bb583f198860006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561412157600080fd5b6102c65a03f1151561413257600080fd5b50505060405180519060200180519060200180516009549396509194509092505063ffffffff6001840181169160ff6701000000000000009091041690851681151561417a57fe5b04820163ffffffff161115156141ee5783600160a060020a0316634377c1cf8860405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b15156141d257600080fd5b6102c65a03f115156141e357600080fd5b5050508094506141f3565b600094505b5050505092915050565b6000808284101561420a57fe5b5050900390565b600082820283158061422d575082848281151561422a57fe5b04145b151561423557fe5b9392505050565b6000614246614771565b6000614250614771565b600080808061425f895161304f565b909950975093506000925061427760608a015161304f565b9097509550925061428884846143c3565b61ffff90811660a08c01521660408a01526142a78460208b0151614589565b896040018181510161ffff169052506142c48360808b0151614589565b8960a0018181510161ffff169052506142e18460208b015161467f565b91506142f1838a6080015161467f565b90508860400151602088015102602088018181510161ffff169052506040890151606088015102606088018181510161ffff1690525060a0890151602086015102602086018181510161ffff1690525060a0890151606086015102606086018181510161ffff1690525081604088015102604088018181510161ffff1690525081608088015102608088018181510161ffff1690525080604086015102604086018181510161ffff1690525080608086015102608086018181510161ffff169052509698959750939550919392505050565b600080808080805b63ffffffff881660009081526007602052604090205482101561454e575060005b63ffffffff87166000908152600760205260409020548110156145435763ffffffff8716600090815260076020526040902080548290811061442a57fe5b60009182526020808320818304015463ffffffff8c16845260078252604084208054929093066101000a900460ff169260069290918690811061446957fe5b60009182526020808320818304015460ff928290066101000a90048216845283019390935260409091019020541614156144a257600193505b63ffffffff881660009081526007602052604090208054839081106144c357fe5b60009182526020808320818304015463ffffffff8b16845260078252604084208054929093066101000a900460ff169260069290918590811061450257fe5b60009182526020808320818304015460ff928290066101000a900482168452830193909352604090910190205416141561453b57600192505b6001016143ec565b6001909101906143cb565b83156145665760095462010000900460ff1695909501945b821561457e5760095462010000900460ff1694909401935b505050509250929050565b63ffffffff8216600090815260076020526040812060020154819081908180821115614668575060009250825b818410156146685763ffffffff871660009081526007602052604090206002018054859081106145e257fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff169050856000015163ffffffff168163ffffffff1614806146375750856060015163ffffffff168163ffffffff16145b8061465157508560c0015163ffffffff168163ffffffff16145b1561465d576001830192505b6001909301926145b6565b60095460ff90811684021694505050505092915050565b600080805b63ffffffff8516600090815260076020526040902054821015613e315763ffffffff851660009081526007602052604090208054839081106146c257fe5b6000918252602091829020828204015460ff918390066101000a90041691508401511561470657836040015160ff168160ff16141561470657600183019250614766565b83608001511561472d578360a0015160ff168160ff16141561472d57600183019250614766565b8360e00151156147555783610100015160ff168160ff16141561475557600183019250614766565b600954610100900460ff1692909202915b600190910190614684565b60c06040519081016040526006815b6000815260001990910190602001816147805790505090565b610100604051908101604090815260008083526020830181905290820152606081016147c36148f2565b8152600060208201819052604082018190526060820181905260809091015290565b610200604051908101604090815260008083526020830181905290820181905260608201819052608082015260a0810161481d614771565b815260200161482a614a55565b815260006020820181905260409091015290565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b6102e0604051908101604052600081526020810161488f6148a6565b8152600060208201819052604082015260600161482a5b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015290565b60206040519081016040526000815290565b82805482825590600052602060002090601f0160209004810192821561499a5791602002820160005b8382111561496b57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261492d565b80156149985782816101000a81549060ff021916905560010160208160000104928301926001030261496b565b505b506149a6929150614a6f565b5090565b82805482825590600052602060002090600701600890048101928215614a495791602002820160005b83821115614a1757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026149d3565b8015614a475782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614a17565b505b506149a6929150614a90565b606060405190810160405260008152600260208201614780565b614a8d91905b808211156149a657805460ff19168155600101614a75565b90565b614a8d91905b808211156149a657805463ffffffff19168155600101614a965600a165627a7a7230582061caabcde420fb9a8f926ce3c35c312fbcdce18e7260d0f6d548c8de0b58a5130029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d600000000000000000000000065c440683088134aef7af22f3fad6a9ee5c19fed00000000000000000000000075aa01dc00f6aeefe14bd58a5b6cbb091c6dc57b
-----Decoded View---------------
Arg [0] : _dataContract (address): 0xABC1c404424BDF24C19A5cC5EF8F47781D18Eb3E
Arg [1] : _worldContract (address): 0x1fC7bD85293f3982f40D52698DF8D26be89360d6
Arg [2] : _tradeContract (address): 0x65c440683088134aEF7aF22F3FAd6A9eE5C19fED
Arg [3] : _castleContract (address): 0x75AA01dC00F6aEeFe14bd58A5B6cbb091C6dC57B
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : 0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6
Arg [2] : 00000000000000000000000065c440683088134aef7af22f3fad6a9ee5c19fed
Arg [3] : 00000000000000000000000075aa01dc00f6aeefe14bd58a5b6cbb091c6dc57b
Swarm Source
bzzr://61caabcde420fb9a8f926ce3c35c312fbcdce18e7260d0f6d548c8de0b58a513
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.