[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "address", "name": "tokenOwner", "type": "address" }, { "indexed": false, "internalType": "address", "name": "factoryOwner", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isAuthorized", "type": "bool" } ], "name": "AuthorizationCheck", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "description", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "CalculationCheck", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ETHReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pair", "type": "address" }, { "indexed": true, "internalType": "address", "name": "locker", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "LPTokensLocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "ethAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "LiquidityAddedFromOTC", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "step", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "ethBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "LiquidityCheckpoint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "liquidityLockerAddress", "type": "address" } ], "name": "LiquidityLocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "newLogoURL", "type": "string" } ], "name": "LogoUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokensAdded", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ethAdded", "type": "uint256" } ], "name": "OTCExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "ethAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "OTCPurchase", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "availableTokens", "type": "uint256" } ], "name": "OTCStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ethCollected", "type": "uint256" } ], "name": "OTCStopped", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokensAllocated", "type": "uint256" } ], "name": "OwnerTokensAllocated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "OwnerTokensAllocatedFromOTC", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pair", "type": "address" } ], "name": "PairCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newPrice", "type": "uint256" } ], "name": "PriceUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "hasFactoryApproval", "type": "bool" } ], "name": "RecoveryAttempt", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldRouter", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newRouter", "type": "address" } ], "name": "RouterAddressUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "releaseTime", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "releasedBy", "type": "address" } ], "name": "SoftLockReleased", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "requestId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TokenMintExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "requestId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TokenRecoveryExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "softLockEndTime", "type": "uint256" } ], "name": "TokenSaleClosed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "MAX_RELEASE_SPAN", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_SOFT_LOCK_DURATION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "addStoredLiquidity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "buyTokensETH", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "buyTokensOTC", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "canTransferTokensPresale", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentStage", "outputs": [ { "internalType": "enum BaseToken.SaleStage", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "endPresale", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "requestId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "executeTokenMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "requestId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "executeTokenRecovery", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getCurrentOTCPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCurrentState", "outputs": [ { "internalType": "address", "name": "contractOwner", "type": "address" }, { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "bool", "name": "isActive", "type": "bool" }, { "internalType": "uint256", "name": "ethBalance", "type": "uint256" }, { "internalType": "uint256", "name": "storedEth", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getLockedBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwnershipInfo", "outputs": [ { "internalType": "address", "name": "tokenOwner", "type": "address" }, { "internalType": "address", "name": "msgSender", "type": "address" }, { "internalType": "address", "name": "factoryOwner", "type": "address" }, { "internalType": "bool", "name": "isSenderOwner", "type": "bool" }, { "internalType": "bool", "name": "isSenderFactoryOwner", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSoftLockPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getStoredLiquidityETH", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokenAllocation", "outputs": [ { "internalType": "uint256", "name": "liquidityAllocation", "type": "uint256" }, { "internalType": "uint256", "name": "presaleAllocation", "type": "uint256" }, { "internalType": "uint256", "name": "ownerAllocation", "type": "uint256" }, { "internalType": "uint256", "name": "feeAllocation", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokenPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalETHReceived", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialTokenPriceWei", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint256", "name": "initialSupply", "type": "uint256" }, { "internalType": "uint256", "name": "presaleStartPriceWei", "type": "uint256" }, { "internalType": "address", "name": "tokenOwner", "type": "address" }, { "internalType": "address", "name": "factoryAddress", "type": "address" }, { "internalType": "string", "name": "logoURL_", "type": "string" }, { "internalType": "address", "name": "pancakeswapRouterAddress", "type": "address" }, { "internalType": "uint256", "name": "ownerAllocationPercentage_", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isContractOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isOTCActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isSoftLockReleased", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastActionTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidityAdded", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidityLocker", "outputs": [ { "internalType": "contract LiquidityLocker", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "lockedBalances", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "logoURL", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lpPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxPresaleSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "otcPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ownerAllocationPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pancakeswapV2PairAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pancakeswapV2Router", "outputs": [ { "internalType": "contract IPancakeswapV2Router02", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "presaleSupplyPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "priceFetcher", "outputs": [ { "internalType": "contract PancakeswapPriceFetcher", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "purchasedLockedBalances", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "recalculateLiquidityReservations", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "factoryAddress", "type": "address" } ], "name": "recoverEthFromContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "releaseSoftLock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "releaseSpan", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "remainingTokensForSale", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "factoryAddress", "type": "address" } ], "name": "resetRecoveryRestrictions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_span", "type": "uint256" } ], "name": "setReleaseSpan", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_duration", "type": "uint256" } ], "name": "setSoftLockDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newTokenPriceWei", "type": "uint256" } ], "name": "setTokenPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "slippagePercentage", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "softLockDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "softLockEndTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "startOTC", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newTokenPriceWei", "type": "uint256" } ], "name": "startPresale", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stopOTC", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenSaleClosed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "tokenSaleEnded", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalReservedForLiquidity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalTokensSold", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "transactionFeePercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newLogoURL", "type": "string" } ], "name": "updateLogoURL", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newRouterAddress", "type": "address" } ], "name": "updateRouterAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6080604052600e805460ff19908116909155600360115561012c60135561151860149081556019805483169055601b80549092169091556032601c819055601d556021805460ff60a01b19169055602355348015605a575f5ffd5b50606233606b565b600160065560c4565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b615fe0806100d15f395ff3fe60806040526004361061040d575f3560e01c80637ec4e9761161021b578063c408689311610121578063e5dffed3116100af578063f2fde38b11610076578063f2fde38b14610bf9578063f99f5d3014610c18578063fa5a541614610c2d578063fc7ebebd14610c46578063ff24f6b014610c5b57005b8063e5dffed314610b66578063e75d844e14610b85578063e7b2a17b14610bb0578063e99861db14610bcf578063eac697c914610be457005b8063dd62ed3e116100f3578063dd62ed3e14610a9f578063dde0c01114610ae3578063de11768814610aeb578063e0bcbcbc14610b1e578063e55a07c214610b5257005b8063c408689314610a23578063d2ce89e514610a57578063d944392314610a6b578063da0ea06514610a8b57005b806397e48c21116101a9578063a43be57b11610170578063a43be57b146109c7578063a9059cbb146109db578063aafa1584146109fa578063b0073d6714610a0e578063b0d437ae1461072d57005b806397e48c211461091c5780639b39f9bf1461096b5780639b7a7d071461097f5780639d1b464a14610993578063a132aad1146109a857005b80638b3c8a4c116101ed5780638b3c8a4c146108b55780638da5cb5b1461087a578063951c936e146108d457806395d89b41146108e95780639759164a146108fd57005b80637ec4e97614610846578063865ad0d914610865578063893d20e81461087a5780638a5407841461089c57005b80634452d81c1161032057806363b20117116102ae57806370a082311161027557806370a08231146107cb578063711b010d146107ea578063715018a614610809578063796ca42d1461081d5780637df776731461083257005b806363b20117146107445780636829052c146107595780636a61e5fc146107785780636dbc95cb146107975780636f970c2c146107b657005b80634b94f50e116102f25780634b94f50e146106b95780634cd88b76146106cd5780635b6d7fdf146106ec5780635bf5d54c146107005780635f7be8eb1461072d57005b80634452d81c1461067057806345068ba81461068457806345b7388e1461069d5780634a06cd50146106a557005b806319fab5e01161039d57806324373bbd1161036f57806324373bbd146105ba5780632ee5340c146105ce578063309192cc146105ed578063313ce56714610602578063378aa7011461062357005b806319fab5e01461053057806321bdb26e1461054f57806323b872dd146105645780632421d7261461058357005b8063105d12e6116103e1578063105d12e6146104bc57806310fb7377146104d55780631797dfd9146104f457806318160ddd1461050857806319f87bc61461051c57005b8062e6be7b1461040f5780630483a7f61461042e57806306fdde031461046c578063095ea7b31461048d575b005b34801561041a575f5ffd5b5061040d61042936600461512b565b610c70565b348015610439575f5ffd5b5061045961044836600461512b565b60166020525f908152604090205481565b6040519081526020015b60405180910390f35b348015610477575f5ffd5b50610480610d7a565b604051610463919061514d565b348015610498575f5ffd5b506104ac6104a7366004615182565b610e0a565b6040519015158152602001610463565b3480156104c7575f5ffd5b506019546104ac9060ff1681565b3480156104e0575f5ffd5b5061040d6104ef3660046151ac565b610e20565b3480156104ff575f5ffd5b5061040d610f21565b348015610513575f5ffd5b50600254610459565b348015610527575f5ffd5b50600b54610459565b34801561053b575f5ffd5b5061040d61054a36600461512b565b611138565b34801561055a575f5ffd5b50610459600c5481565b34801561056f575f5ffd5b506104ac61057e3660046151c3565b611330565b34801561058e575f5ffd5b50601f546105a2906001600160a01b031681565b6040516001600160a01b039091168152602001610463565b3480156105c5575f5ffd5b5061040d6113d8565b3480156105d9575f5ffd5b5061040d6105e836600461512b565b61169f565b3480156105f8575f5ffd5b50610459600d5481565b34801561060d575f5ffd5b5060125b60405160ff9091168152602001610463565b34801561062e575f5ffd5b506106376117c5565b604080516001600160a01b039687168152959094166020860152911515928401929092526060830191909152608082015260a001610463565b34801561067b575f5ffd5b50610611600581565b34801561068f575f5ffd5b50601b546104ac9060ff1681565b61040d611818565b3480156106b0575f5ffd5b50610459611c84565b3480156106c4575f5ffd5b50600f54610459565b3480156106d8575f5ffd5b5061040d6106e73660046152a0565b611d42565b3480156106f7575f5ffd5b50610459611db6565b34801561070b575f5ffd5b50601f5461072090600160a01b900460ff1681565b6040516104639190615319565b348015610738575f5ffd5b506104596301da9c0081565b34801561074f575f5ffd5b50610459600a5481565b348015610764575f5ffd5b506021546105a2906001600160a01b031681565b348015610783575f5ffd5b5061040d6107923660046151ac565b611e12565b3480156107a2575f5ffd5b5061040d6107b136600461533f565b611f7b565b3480156107c1575f5ffd5b5061045960145481565b3480156107d6575f5ffd5b506104596107e536600461512b565b6120fb565b3480156107f5575f5ffd5b5061040d61080436600461535f565b612115565b348015610814575f5ffd5b5061040d61257b565b348015610828575f5ffd5b5061045960095481565b34801561083d575f5ffd5b50601054610459565b348015610851575f5ffd5b5061040d61086036600461543d565b61258c565b348015610870575f5ffd5b5061045960135481565b348015610885575f5ffd5b5060055461010090046001600160a01b03166105a2565b3480156108a7575f5ffd5b50600e546104ac9060ff1681565b3480156108c0575f5ffd5b5061040d6108cf3660046151ac565b6125a0565b3480156108df575f5ffd5b50610459601c5481565b3480156108f4575f5ffd5b5061048061269b565b348015610908575f5ffd5b506022546105a2906001600160a01b031681565b348015610927575f5ffd5b506109306126aa565b604080516001600160a01b0396871681529486166020860152929094169183019190915215156060820152901515608082015260a001610463565b348015610976575f5ffd5b5061045961274e565b34801561098a575f5ffd5b5061040d61275f565b34801561099e575f5ffd5b50610459600f5481565b3480156109b3575f5ffd5b5061040d6109c23660046151ac565b61296b565b3480156109d2575f5ffd5b5061040d612aa9565b3480156109e6575f5ffd5b506104ac6109f5366004615182565b612c3d565b348015610a05575f5ffd5b5061040d612c49565b348015610a19575f5ffd5b5061045960235481565b348015610a2e575f5ffd5b50610459610a3d36600461512b565b6001600160a01b03165f9081526016602052604090205490565b348015610a62575f5ffd5b50610480612d58565b348015610a76575f5ffd5b506021546104ac90600160a01b900460ff1681565b348015610a96575f5ffd5b5061040d612de4565b348015610aaa575f5ffd5b50610459610ab9366004615477565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61040d6130e0565b348015610af6575f5ffd5b506104ac610b0536600461512b565b60055461010090046001600160a01b0390811691161490565b348015610b29575f5ffd5b50610b326134c8565b604080519485526020850193909352918301526060820152608001610463565b348015610b5d575f5ffd5b5061040d61351e565b348015610b71575f5ffd5b506020546105a2906001600160a01b031681565b348015610b90575f5ffd5b50610459610b9f36600461512b565b60176020525f908152604090205481565b348015610bbb575f5ffd5b5061040d610bca36600461533f565b61381b565b348015610bda575f5ffd5b5061045960115481565b348015610bef575f5ffd5b5061045960185481565b348015610c04575f5ffd5b5061040d610c1336600461512b565b613a00565b348015610c23575f5ffd5b5061045960155481565b348015610c38575f5ffd5b506024546104ac9060ff1681565b348015610c51575f5ffd5b50610459601d5481565b348015610c66575f5ffd5b50610459601a5481565b610c78613a79565b6001600160a01b038116610cd35760405162461bcd60e51b815260206004820152601d60248201527f526f7574657220616464726573732063616e6e6f74206265207a65726f00000060448201526064015b60405180910390fd5b602154600160a01b900460ff1615610d405760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f742075706461746520726f75746572206166746572206c69717569604482015269191a5d1e48185919195960b21b6064820152608401610cca565b602080546001600160a01b038381166001600160a01b031983161790925516610d6a30825f613ad9565b610d7630835f19613ad9565b5050565b606060038054610d89906154ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610db5906154ae565b8015610e005780601f10610dd757610100808354040283529160200191610e00565b820191905f5260205f20905b815481529060010190602001808311610de357829003601f168201915b5050505050905090565b5f610e16338484613ad9565b5060015b92915050565b610e28613a79565b600e5460ff1615610ea15760405162461bcd60e51b815260206004820152603960248201527f43616e6e6f742073657420736f6674206c6f636b206475726174696f6e20616660448201527f74657220746f6b656e2073616c652068617320656e6465642e000000000000006064820152608401610cca565b61012c8110158015610eb55750610e108111155b610f1c5760405162461bcd60e51b815260206004820152603260248201527f4475726174696f6e206d757374206265206265747765656e2035206d696e757460448201527132b99030b732101b181036b4b73aba32b99760711b6064820152608401610cca565b601355565b610f29613a79565b600e5460ff16610f7b5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e2073616c65206e6f7420656e6465642079657400000000000000006044820152606401610cca565b601454601554610f8b91906154fa565b4210610fd95760405162461bcd60e51b815260206004820152601e60248201527f536f6674206c6f636b20706572696f6420616c726561647920656e64656400006044820152606401610cca565b60245460ff161561102c5760405162461bcd60e51b815260206004820152601a60248201527f536f6674206c6f636b20616c72656164792072656c65617365640000000000006044820152606401610cca565b601254604051635774466d60e11b81523060048201526001600160a01b039091169063aee88cda90602401602060405180830381865afa158015611072573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611096919061550d565b6110e25760405162461bcd60e51b815260206004820152601f60248201527f52656c65617365206e6f7420617070726f76656420627920666163746f7279006044820152606401610cca565b6015544210156110f157426015555b6024805460ff19166001179055604080514281523360208201527fafb9cfdf5d42d8c9388fca49e7418c3fd0ecb3798e02a70687482d2a0b277079910160405180910390a1565b6001600160a01b03811661118e5760405162461bcd60e51b815260206004820152601e60248201527f466163746f727920616464726573732063616e6e6f74206265207a65726f00006044820152606401610cca565b604051630796271160e11b81523060048201526001600160a01b03821690630f2c4e2290602401602060405180830381865afa1580156111d0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f4919061550d565b6112405760405162461bcd60e51b815260206004820181905260248201527f5265636f76657279206e6f7420617070726f76656420627920666163746f72796044820152606401610cca565b60055461010090046001600160a01b03166001600160a01b0316336001600160a01b031614806112e05750806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cb919061552c565b6001600160a01b0316336001600160a01b0316145b6112fc5760405162461bcd60e51b8152600401610cca90615547565b505f6010819055601e819055601f805460ff60a01b19908116909155600e805460ff19169055602180549091169055601a55565b5f61133c848484613bfc565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156113c05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cca565b6113cd8533858403613ad9565b506001949350505050565b6113e0613a79565b5f601054116114315760405162461bcd60e51b815260206004820152601760248201527f4e6f2073746f7265642045544820617661696c61626c650000000000000000006044820152606401610cca565b601054601f54604080516375c8e9bf60e11b815290515f926001600160a01b03169163eb91d37e9160048083019260209291908290030181865afa15801561147b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149f919061556f565b90505f81116114c05760405162461bcd60e51b8152600401610cca90615586565b5f816114d4670de0b6b3a7640000856155ad565b6114de91906155c4565b90505f6114ea306120fb565b90508181101561150d575f6114ff82846155e3565b905061150b3082613e9e565b505b5f6010556020546001600160a01b031663f305d719853085606461153282605f6155ad565b61153c91906155c4565b60646115498b605f6155ad565b61155391906155c4565b306115604261012c6154fa565b6040518863ffffffff1660e01b8152600401611581969594939291906155f6565b60606040518083038185885af1935050505080156115bc575060408051601f3d908101601f191682019092526115b991810190615631565b60015b61168b576020546001600160a01b031663f305d71985308560646115e182605a6155ad565b6115eb91906155c4565b60646115f88b605a6155ad565b61160291906155c4565b3061160f4261012c6154fa565b6040518863ffffffff1660e01b8152600401611630969594939291906155f6565b60606040518083038185885af19350505050801561166b575060408051601f3d908101601f1916820190925261166891810190615631565b60015b611679576010849055611699565b6116838383613f86565b505050611699565b6116958383613f86565b5050505b50505050565b6001600160a01b0381166116f55760405162461bcd60e51b815260206004820152601e60248201527f466163746f727920616464726573732063616e6e6f74206265207a65726f00006044820152606401610cca565b60055461010090046001600160a01b031633146117545760405162461bcd60e51b815260206004820152601960248201527f446972656374206f776e657220636865636b206661696c6564000000000000006044820152606401610cca565b47806117965760405162461bcd60e51b815260206004820152601160248201527027379022aa24103a37903932b1b7bb32b960791b6044820152606401610cca565b604051339082156108fc029083905f818181858888f193505050501580156117c0573d5f5f3e3d5ffd5b505050565b5f5f5f5f5f6117e26005546001600160a01b036101009091041690565b335f601f54600160a01b900460ff16600181111561180257611802615305565b6010549399929850141595504794509092509050565b601b5460ff1661185e5760405162461bcd60e51b81526020600482015260116024820152704f5443206973206e6f742061637469766560781b6044820152606401610cca565b611866614092565b5f34116118a55760405162461bcd60e51b815260206004820152600d60248201526c09aeae6e840e6cadcc8408aa89609b1b6044820152606401610cca565b601f546001600160a01b03166118fd5760405162461bcd60e51b815260206004820152601d60248201527f50726963652066657463686572206e6f7420696e697469616c697a65640000006044820152606401610cca565b601f54604080516375c8e9bf60e11b815290515f926001600160a01b03169163eb91d37e9160048083019260209291908290030181865afa158015611944573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611968919061556f565b90505f81116119895760405162461bcd60e51b8152600401610cca90615586565b5f8161199d670de0b6b3a7640000346155ad565b6119a791906155c4565b90505f8111611a045760405162461bcd60e51b815260206004820152602360248201527f496e73756666696369656e742045544820666f7220746f6b656e20707572636860448201526261736560e81b6064820152608401610cca565b601254604080516334666bdd60e01b815290515f926001600160a01b0316916334666bdd9160048083019260209291908290030181865afa158015611a4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a6f919061550d565b90505f60125f9054906101000a90046001600160a01b03166001600160a01b031663e99861db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae6919061556f565b90505f82611af4575f611b0b565b612710611b0183866155ad565b611b0b91906155c4565b90505f611b1882866155e3565b90505f601a54611b27306120fb565b611b3191906155e3565b905081811015611b945760405162461bcd60e51b815260206004820152602860248201527f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6520666f7220604482015267707572636861736560c01b6064820152608401610cca565b34601e5f828254611ba591906154fa565b90915550611bb69050303384613bfc565b8215611c2e57601254611bd49030906001600160a01b031685613bfc565b601254604051635c24e57360e01b8152600481018590526001600160a01b0390911690635c24e573906024015f604051808303815f87803b158015611c17575f5ffd5b505af1158015611c29573d5f5f3e3d5ffd5b505050505b604080513481526020810184905290810188905233907f097bceb6e1996b24a133004d2f6e860d57512be749c3b12a8b51b51a737e43219060600160405180910390a250505050505050611c826001600655565b565b601b545f9060ff16611cc95760405162461bcd60e51b815260206004820152600e60248201526d4f5443206e6f742061637469766560901b6044820152606401610cca565b601f5f9054906101000a90046001600160a01b03166001600160a01b031663eb91d37e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d19573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3d919061556f565b905090565b60055460ff1615611d8b5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610cca565b6003611d9783826156a7565b506004611da482826156a7565b50506005805460ff1916600117905550565b5f601454601554611dc791906154fa565b4210611dd35750606490565b601554421015611de257505f90565b5f60155442611df191906155e3565b601454909150611e028260646155ad565b611e0c91906155c4565b91505090565b611e1a613a79565b6001601f54600160a01b900460ff166001811115611e3a57611e3a615305565b14611e7f5760405162461bcd60e51b815260206004820152601560248201527450726573616c65206973206e6f742061637469766560581b6044820152606401610cca565b5f8111611ece5760405162461bcd60e51b815260206004820152601f60248201527f5072696365206d7573742062652067726561746572207468616e207a65726f006044820152606401610cca565b600954811015611f355760405162461bcd60e51b815260206004820152602c60248201527f50726963652063616e6e6f74206265206c6f776572207468616e20746865206960448201526b6e697469616c20707269636560a01b6064820152608401610cca565b600f80549082905560408051828152602081018490527f945c1c4e99aa89f648fbfe3df471b916f719e16d960fcec0737d4d56bd69683891015b60405180910390a15050565b611f83613a79565b5f8111611fd25760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cca565b601254604051632f3fcaf760e21b815230600482015260248101849052604481018390526001600160a01b039091169063bcff2bdc906064016020604051808303815f875af1158015612027573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204b919061550d565b6120b35760405162461bcd60e51b815260206004820152603360248201527f4d696e74206e6f7420617070726f7665642c20616c726561647920757365642c604482015272040dee440c2dadeeadce840dad2e6dac2e8c6d606b1b6064820152608401610cca565b6120bd3082613e9e565b817f05c6f528da3fbb4a69401b2d37fa7839ac1f8b996cd42368f0d3140765be83f6826040516120ef91815260200190565b60405180910390a25050565b6001600160a01b03165f9081526020819052604090205490565b600754610100900460ff16158080156121355750600754600160ff909116105b8061214f5750303b15801561214f575060075460ff166001145b6121b25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cca565b6007805460ff1916600117905580156121d5576007805461ff0019166101001790555b6001600160a01b03851661222b5760405162461bcd60e51b815260206004820152601f60248201527f466163746f727920616464726573732063616e6e6f74206265207a65726f2e006044820152606401610cca565b6001600160a01b0383166122945760405162461bcd60e51b815260206004820152602a60248201527f50616e63616b657377617020726f7574657220616464726573732063616e6e6f6044820152693a103132903d32b9379760b11b6064820152608401610cca565b5f88116122f55760405162461bcd60e51b815260206004820152602960248201527f496e697469616c20737570706c79206d757374206265206772656174657220746044820152683430b7103d32b9379760b91b6064820152608401610cca565b5f871161235b5760405162461bcd60e51b815260206004820152602e60248201527f50726573616c65207374617274207072696365206d757374206265206772656160448201526d3a32b9103a3430b7103d32b9379760911b6064820152608401610cca565b6001821015801561236d575060148211155b6123cc5760405162461bcd60e51b815260206004820152602a60248201527f4f776e657220616c6c6f636174696f6e206d757374206265206265747765656e60448201526910189030b7321019181760b11b6064820152608401610cca565b6123d68a8a611d42565b602080546001600160a01b0319166001600160a01b0385169081179091556124019030905f19613ad9565b612420306124116012600a615845565b61241b908b6155ad565b613e9e565b5f606461242e8a60616155ad565b61243891906155c4565b90505f606461244785846155ad565b61245191906155c4565b90505f61245e82846155e3565b9050600261246e6012600a615845565b61247890836155ad565b61248291906155c4565b601a5560026124936012600a615845565b61249d90836155ad565b6124a791906155c4565b600c556124b66012600a615845565b6124c0908c6155ad565b601a546124ce9060646155ad565b6124d891906155c4565b601d55601280546001600160a01b0319166001600160a01b038a1617905560098a9055600f8a9055600861250c88826156a7565b50602385905562278d0060135542601855612526896140eb565b505050801561256f576007805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b612583613a79565b611c825f6140eb565b612594613a79565b6008610d7682826156a7565b6125a8613a79565b600e5460ff16156126175760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f74207365742072656c65617365207370616e20616674657220746f60448201527235b2b71039b0b632903430b99032b73232b21760691b6064820152608401610cca565b61012c811015801561262b5750610e108111155b6126965760405162461bcd60e51b815260206004820152603660248201527f52656c65617365207370616e206d757374206265206265747765656e2035206d60448201527534b73aba32b99030b732101b181036b4b73aba32b99760511b6064820152608401610cca565b601455565b606060048054610d89906154ae565b5f5f5f5f5f5f60125f9054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612700573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612724919061552c565b6005546001600160a01b036101009091048116983398509196508789149550861687149350915050565b5f600a54600c54611d3d91906155e3565b612767613a79565b601b5460ff166127ad5760405162461bcd60e51b81526020600482015260116024820152704f5443206973206e6f742061637469766560781b6044820152606401610cca565b6127b5612c49565b5f601e54116128065760405162461bcd60e51b815260206004820152601b60248201527f4e6f2045544820636f6c6c656374656420647572696e67204f544300000000006044820152606401610cca565b601e54601a546023545f9060649061281e90846155ad565b61282891906155c4565b90505f61283582846154fa565b90505f612841306120fb565b90508181101561286f575f61285682846155e3565b90506128623082613e9e565b61286b306120fb565b9150505b818110156128a75761288183826155e3565b9350670de0b6b3a7640000600f548561289a91906155ad565b6128a491906155c4565b94505b6020545f9081906001600160a01b031663f305d71988308960646128cc82605f6155ad565b6128d691906155c4565b60646128e38e605f6155ad565b6128ed91906155c4565b306128fa4261012c6154fa565b6040518863ffffffff1660e01b815260040161291b969594939291906155f6565b60606040518083038185885af1158015612937573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061295c9190615631565b50915091506116958282613f86565b612973613a79565b5f601f54600160a01b900460ff16600181111561299257612992615305565b146129df5760405162461bcd60e51b815260206004820152601760248201527f416e6f746865722073616c65206973206163746976652e0000000000000000006044820152606401610cca565b600e5460ff1615612a2a5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b71039b0b632903430b99032b73232b21760591b6044820152606401610cca565b5f8111612a885760405162461bcd60e51b815260206004820152602660248201527f546f6b656e207072696365206d7573742062652067726561746572207468616e604482015265103d32b9379760d11b6064820152608401610cca565b601f805460ff60a01b1916600160a01b1790556009819055600f5542601855565b60125f9054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b1d919061552c565b6001600160a01b03163303612b8e57601854612b3b9061012c6154fa565b4211612b895760405162461bcd60e51b815260206004820152601f60248201527f466163746f7279206163636573732074696d65206c6f636b20616374697665006044820152606401610cca565b612bcf565b60055461010090046001600160a01b03166001600160a01b0316336001600160a01b031614612bcf5760405162461bcd60e51b8152600401610cca90615547565b6001601f54600160a01b900460ff166001811115612bef57612bef615305565b14612c355760405162461bcd60e51b8152602060048201526016602482015275283932b9b0b6329034b9903737ba1030b1ba34bb329760511b6044820152606401610cca565b611c82614144565b5f610e16338484613bfc565b601f546001600160a01b0316612ca15760405162461bcd60e51b815260206004820152601d60248201527f50726963652066657463686572206e6f7420696e697469616c697a65640000006044820152606401610cca565b601f54604080516375c8e9bf60e11b8152905147925f926001600160a01b039091169163eb91d37e916004808201926020929091908290030181865afa158015612ced573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d11919061556f565b90505f8111612d325760405162461bcd60e51b8152600401610cca90615586565b5f81612d46670de0b6b3a7640000856155ad565b612d5091906155c4565b601a55505050565b60088054612d65906154ae565b80601f0160208091040260200160405190810160405280929190818152602001828054612d91906154ae565b8015612ddc5780601f10612db357610100808354040283529160200191612ddc565b820191905f5260205f20905b815481529060010190602001808311612dbf57829003601f168201915b505050505081565b612dec613a79565b601b5460ff1615612e2f5760405162461bcd60e51b815260206004820152600d60248201526c4f54432069732061637469766560981b6044820152606401610cca565b602154600160a01b900460ff16612e885760405162461bcd60e51b815260206004820152601b60248201527f496e697469616c206c6971756964697479206e6f7420616464656400000000006044820152606401610cca565b600e5460ff16612ed15760405162461bcd60e51b8152602060048201526014602482015273151bdad95b881cd85b19481b9bdd08195b99195960621b6044820152606401610cca565b6021546001600160a01b0316612f205760405162461bcd60e51b815260206004820152601460248201527314185a5c881b9bdd081a5b9a5d1a585b1a5e995960621b6044820152606401610cca565b5f612f2a306120fb565b90505f8111612f715760405162461bcd60e51b81526020600482015260136024820152724e6f20746f6b656e7320617661696c61626c6560681b6044820152606401610cca565b5f6305f5e100612f8060025490565b612f8a91906155c4565b905080821015612fdc5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420746f6b656e7320666f72204f544300000000006044820152606401610cca565b601f546001600160a01b03166130c35760215460208054604080516315ab88c960e31b815290516001600160a01b0394851694309493169263ad5c464892600480820193918290030181865afa158015613038573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061305c919061552c565b604051613068906150ed565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff0801580156130a1573d5f5f3e3d5ffd5b50601f80546001600160a01b0319166001600160a01b03929092169190911790555b6130cb612c49565b5050601b805460ff191660011790555f601e55565b6130e8614092565b6001601f54600160a01b900460ff16600181111561310857613108615305565b1461314e5760405162461bcd60e51b8152602060048201526016602482015275283932b9b0b6329034b9903737ba1030b1ba34bb329760511b6044820152606401610cca565b5f341161318c5760405162461bcd60e51b815260206004820152600c60248201526b27379022aa241039b2b73a1760a11b6044820152606401610cca565b5f613196600f5490565b90505f816131a66012600a615845565b6131b090346155ad565b6131ba91906155c4565b90505f81116132025760405162461bcd60e51b81526020600482015260146024820152732737ba1032b737bab3b41022aa241039b2b73a1760611b6044820152606401610cca565b601254604080516334666bdd60e01b815290515f926001600160a01b0316916334666bdd9160048083019260209291908290030181865afa158015613249573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061326d919061550d565b90505f60125f9054906101000a90046001600160a01b03166001600160a01b031663e99861db6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132e4919061556f565b90505f826132f2575f613309565b6127106132ff83866155ad565b61330991906155c4565b90505f61331682866155e3565b9050600c5485600a5461332991906154fa565b11156133775760405162461bcd60e51b815260206004820181905260248201527f4578636565647320617661696c61626c652070726573616c6520737570706c796044820152606401610cca565b84600a5f82825461338891906154fa565b9250508190555034600b5f8282546133a091906154fa565b909155506133b19050303383613bfc565b60055461010090046001600160a01b0316330361341c578060175f6133e46005546001600160a01b036101009091041690565b6001600160a01b03166001600160a01b031681526020019081526020015f205f82825461341191906154fa565b909155506134409050565b335f908152601660205260408120805483929061343a9084906154fa565b90915550505b81156134b85760125461345e9030906001600160a01b031684613bfc565b601254604051635c24e57360e01b8152600481018490526001600160a01b0390911690635c24e573906024015f604051808303815f87803b1580156134a1575f5ffd5b505af11580156134b3573d5f5f3e3d5ffd5b505050505b505050505050611c826001600655565b5f5f5f5f5f6134d660025490565b9050601a54600c546064602354846134ee91906155ad565b6134f891906155c4565b60646135058560036155ad565b61350f91906155c4565b94509450945094505090919293565b60125f9054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561356e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613592919061552c565b6001600160a01b03163303613603576018546135b09061012c6154fa565b42116135fe5760405162461bcd60e51b815260206004820152601f60248201527f466163746f7279206163636573732074696d65206c6f636b20616374697665006044820152606401610cca565b613644565b60055461010090046001600160a01b03166001600160a01b0316336001600160a01b0316146136445760405162461bcd60e51b8152600401610cca90615547565b600e5460ff16156136975760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e2073616c6520616c726561647920636c6f7365642e0000000000006044820152606401610cca565b5f600f54116136d85760405162461bcd60e51b815260206004820152600d60248201526c141c9a58d9481b9bdd081cd95d609a1b6044820152606401610cca565b5f601f54600160a01b900460ff1660018111156136f7576136f7615305565b146137445760405162461bcd60e51b815260206004820152601f60248201527f4163746976652073616c65206d75737420626520656e646564206669727374006044820152606401610cca565b475f61374f306120fb565b90505f82116137975760405162461bcd60e51b81526020600482015260146024820152734e6f2045544820666f72206c697175696469747960601b6044820152606401610cca565b5f81116137e65760405162461bcd60e51b815260206004820152601760248201527f4e6f20746f6b656e7320666f72206c69717569646974790000000000000000006044820152606401610cca565b6013546137f390426154fa565b601555600e8054600160ff199182168117909255601980549091169091179055610d76614161565b613823613a79565b5f81116138725760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cca565b8061387c306120fb565b10156138c15760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610cca565b601254604051637352999160e01b815230600482015260248101849052604481018390526001600160a01b03909116906373529991906064016020604051808303815f875af1158015613916573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061393a919061550d565b6139ac5760405162461bcd60e51b815260206004820152603760248201527f5265636f76657279206e6f7420617070726f7665642c20616c7265616479207560448201527f7365642c206f7220616d6f756e74206d69736d617463680000000000000000006064820152608401610cca565b6139ce306139c86005546001600160a01b036101009091041690565b83613bfc565b817f431748e90f6cbbef9532ea20f2f99fc6980c00bd61783d92a7fd889888ee5bea826040516120ef91815260200190565b613a08613a79565b6001600160a01b038116613a6d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cca565b613a76816140eb565b50565b6005546001600160a01b03610100909104163314611c825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cca565b6001600160a01b038316613b3b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cca565b6001600160a01b038216613b9c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cca565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316301480613c2057506012546001600160a01b038481169116145b80613c3d57506005546001600160a01b0384811661010090920416145b15613c4d576117c0838383614528565b600e5460ff16613c6f5760405162461bcd60e51b8152600401610cca90615853565b336001600160a01b03841614801590613c8d57611699848484614528565b601254604080516334666bdd60e01b815290515f926001600160a01b0316916334666bdd9160048083019260209291908290030181865afa158015613cd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cf8919061550d565b90505f60125f9054906101000a90046001600160a01b03166001600160a01b031663e99861db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d6f919061556f565b90508115613e8b575f612710613d8583876155ad565b613d8f91906155c4565b90505f613d9c82876155e3565b905085613da8896120fb565b1015613e085760405162461bcd60e51b815260206004820152602960248201527f496e73756666696369656e742062616c616e636520666f72207472616e7366656044820152687220616e642066656560b81b6064820152608401610cca565b601254613e209089906001600160a01b031684614528565b601254604051635c24e57360e01b8152600481018490526001600160a01b0390911690635c24e573906024015f604051808303815f87803b158015613e63575f5ffd5b505af1158015613e75573d5f5f3e3d5ffd5b50505050613e84888883614528565b5050613e96565b613e96868686614528565b505050505050565b6001600160a01b038216613ef45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610cca565b613eff5f8383614700565b8060025f828254613f1091906154fa565b90915550506001600160a01b0382165f9081526020819052604081208054839290613f3c9084906154fa565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b601b5460ff161561403b575f606460235484613fa291906155ad565b613fac91906155c4565b905080156140395780613fbe306120fb565b101561401d5760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e7420746f6b656e7320666f72206f776e657220616c6044820152673637b1b0ba34b7b760c11b6064820152608401610cca565b614039306139c86005546001600160a01b036101009091041690565b505b6140436149f1565b601b5460ff1615610d7657601b805460ff191690555f601e5560408051428152602081018390527f5a299b23efa8ad38cf9a7fde30995dfb3b5c8476801f36ccc793249d471d1f089101611f6f565b6002600654036140e45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cca565b6002600655565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600f5461414f614c1d565b601f805460ff60a01b19169055600f55565b614169614092565b602154600160a01b900460ff1615806141845750601b5460ff165b6141de5760405162461bcd60e51b815260206004820152602560248201527f4c697175696469747920616c7265616479206164646564206f72206e6f7420696044820152646e204f544360d81b6064820152608401610cca565b5f600f541161421f5760405162461bcd60e51b815260206004820152600d60248201526c141c9a58d9481b9bdd081cd95d609a1b6044820152606401610cca565b5f614229306120fb565b60215490915047905f90600160a01b900460ff1661451b57600f54620f4240905f90670de0b6b3a76400009061425f90846155ad565b61426991906155c4565b90505f8111801561427a5750838111155b6142c65760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e697469616c2045544820616d6f756e740000000000006044820152606401610cca565b6020546001600160a01b031663f305d7198230855f80836142e94261012c6154fa565b6040518863ffffffff1660e01b815260040161430a969594939291906155f6565b60606040518083038185885af193505050508015614345575060408051601f3d908101601f1916820190925261434291810190615631565b60015b61439b5760405162461bcd60e51b815260206004820152602160248201527f496e697469616c206c6971756964697479206164646974696f6e206661696c656044820152601960fa1b6064820152608401610cca565b82955081876143aa91906155e3565b96506143b683896155e3565b97505050505f841180156143c957505f85115b156144fd57600f545f906143e5670de0b6b3a7640000876155ad565b6143ef91906155c4565b60205490915081906001600160a01b031663f305d719873084606461441582605f6155ad565b61441f91906155c4565b606461442c8d605f6155ad565b61443691906155c4565b306144434261012c6154fa565b6040518863ffffffff1660e01b8152600401614464969594939291906155f6565b60606040518083038185885af19350505050801561449f575060408051601f3d908101601f1916820190925261449c91810190615631565b60015b6144eb5760405162461bcd60e51b815260206004820152601e60248201527f4d61696e206c6971756964697479206164646974696f6e206661696c656400006044820152606401610cca565b6144f584896154fa565b975050505050505b6021805460ff60a01b1916600160a01b179055614518614ce8565b50505b505050611c826001600655565b6001600160a01b03831661458c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cca565b6001600160a01b0382166145ee5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cca565b6145f9838383614700565b6001600160a01b0383165f90815260208190526040902054818110156146705760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cca565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906146a69084906154fa565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516146f291815260200190565b60405180910390a350505050565b6001600160a01b038316158061471e57506001600160a01b03831630145b8061473657506012546001600160a01b038481169116145b1561474057505050565b60055461010090046001600160a01b03166001600160a01b0316836001600160a01b0316036148bc57600e5460ff161580156147b557505f60175f6147936005546001600160a01b036101009091041690565b6001600160a01b03166001600160a01b031681526020019081526020015f2054115b80156147cf57506020546001600160a01b03838116911614155b80156147e957506021546001600160a01b03838116911614155b156117c0575f60175f61480a6005546001600160a01b036101009091041690565b6001600160a01b03166001600160a01b031681526020019081526020015f20546148456107e56005546001600160a01b036101009091041690565b61484f91906155e3565b9050808211156116995760405162461bcd60e51b815260206004820152603260248201527f5472616e7366657220616d6f756e74206578636565647320756e6c6f636b6564604482015271207075726368617365642062616c616e636560701b6064820152608401610cca565b600e5460ff166148de5760405162461bcd60e51b8152600401610cca90615853565b6001600160a01b0383165f90815260166020526040902054158015906149125750601554421080614912575060245460ff16155b156117c0575f614920611db6565b6001600160a01b0385165f908152601660205260408120549192509060649061494a9084906155ad565b61495491906155c4565b6001600160a01b0386165f908152601660205260408120549192509061497b9083906155e3565b614984876120fb565b61498e91906155e3565b905080841115613e965760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320756e6c6f636b65646044820152672062616c616e636560c01b6064820152608401610cca565b602154600160a01b900460ff16614a4a5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610cca565b6022546001600160a01b0316614aa25760405162461bcd60e51b815260206004820152601e60248201527f4c6971756964697479206c6f636b6572206e6f74206465706c6f7965642e00006044820152606401610cca565b6021546040516370a0823160e01b81523060048201526001600160a01b03909116905f9082906370a0823190602401602060405180830381865afa158015614aec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b10919061556f565b90505f8111614b595760405162461bcd60e51b81526020600482015260156024820152742737902628103a37b5b2b739903a37903637b1b59760591b6044820152606401610cca565b60225460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390525f9184169063a9059cbb906044016020604051808303815f875af1158015614baa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614bce919061550d565b9050806117c05760405162461bcd60e51b815260206004820152601960248201527f4c5020746f6b656e207472616e73666572206661696c65642e000000000000006044820152606401610cca565b5f601f54600160a01b900460ff166001811115614c3c57614c3c615305565b03614c815760405162461bcd60e51b815260206004820152601560248201527427379030b1ba34bb329039b0b6329039ba30b3b29760591b6044820152606401610cca565b4780614ccf5760405162461bcd60e51b815260206004820152601e60248201527f4e6f2045544820746f2073746f726520666f72206c69717569646974792e00006044820152606401610cca565b8060105f828254614ce091906154fa565b909155505050565b602154600160a01b900460ff16614d415760405162461bcd60e51b815260206004820152601d60248201527f4c6971756964697479206d7573742062652061646465642066697273740000006044820152606401610cca565b602080546040805163c45a015560e01b815290515f936001600160a01b039093169263c45a015592600480820193918290030181865afa158015614d87573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614dab919061552c565b90506001600160a01b038116614e035760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420666163746f727920616464726573730000000000000000006044820152606401610cca565b806001600160a01b031663e6a439053060205f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614e63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614e87919061552c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015614ed0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614ef4919061552c565b602180546001600160a01b0319166001600160a01b03929092169182179055614f5f5760405162461bcd60e51b815260206004820152601a60248201527f50616e63616b65737761702070616972206e6f7420666f756e640000000000006044820152606401610cca565b602154614f789030906001600160a01b03165f19613ad9565b6021546040516001600160a01b0390911690614f93906150fa565b6001600160a01b039091168152602001604051809103905ff080158015614fbc573d5f5f3e3d5ffd5b50602280546001600160a01b0319166001600160a01b039290921691821790556150335760405162461bcd60e51b815260206004820152602260248201527f4c6971756964697479206c6f636b6572206465706c6f796d656e74206661696c604482015261195960f21b6064820152608401610cca565b6021546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015615079573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061509d919061556f565b90506150a76149f1565b6022546021546040518381526001600160a01b0392831692909116907f852ceeee4e832286d749edbb60f6c68baf9a4af76f3fa21ce6d35f32fd17d6eb90602001613f7a565b610594806158a383390190565b61017480615e3783390190565b6001600160a01b0381168114613a76575f5ffd5b803561512681615107565b919050565b5f6020828403121561513b575f5ffd5b813561514681615107565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215615193575f5ffd5b823561519e81615107565b946020939093013593505050565b5f602082840312156151bc575f5ffd5b5035919050565b5f5f5f606084860312156151d5575f5ffd5b83356151e081615107565b925060208401356151f081615107565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112615224575f5ffd5b813567ffffffffffffffff81111561523e5761523e615201565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561526d5761526d615201565b604052818152838201602001851015615284575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156152b1575f5ffd5b823567ffffffffffffffff8111156152c7575f5ffd5b6152d385828601615215565b925050602083013567ffffffffffffffff8111156152ef575f5ffd5b6152fb85828601615215565b9150509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061533957634e487b7160e01b5f52602160045260245ffd5b91905290565b5f5f60408385031215615350575f5ffd5b50508035926020909101359150565b5f5f5f5f5f5f5f5f5f6101208a8c031215615378575f5ffd5b893567ffffffffffffffff81111561538e575f5ffd5b61539a8c828d01615215565b99505060208a013567ffffffffffffffff8111156153b6575f5ffd5b6153c28c828d01615215565b98505060408a0135965060608a013595506153df60808b0161511b565b94506153ed60a08b0161511b565b935060c08a013567ffffffffffffffff811115615408575f5ffd5b6154148c828d01615215565b93505061542360e08b0161511b565b989b979a5095989497939692955090936101000135919050565b5f6020828403121561544d575f5ffd5b813567ffffffffffffffff811115615463575f5ffd5b61546f84828501615215565b949350505050565b5f5f60408385031215615488575f5ffd5b823561549381615107565b915060208301356154a381615107565b809150509250929050565b600181811c908216806154c257607f821691505b6020821081036154e057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e1a57610e1a6154e6565b5f6020828403121561551d575f5ffd5b81518015158114615146575f5ffd5b5f6020828403121561553c575f5ffd5b815161514681615107565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b5f6020828403121561557f575f5ffd5b5051919050565b6020808252600d908201526c496e76616c696420707269636560981b604082015260600190565b8082028115828204841417610e1a57610e1a6154e6565b5f826155de57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610e1a57610e1a6154e6565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f5f5f60608486031215615643575f5ffd5b5050815160208301516040909301519094929350919050565b601f8211156117c057805f5260205f20601f840160051c810160208510156156815750805b601f840160051c820191505b818110156156a0575f815560010161568d565b5050505050565b815167ffffffffffffffff8111156156c1576156c1615201565b6156d5816156cf84546154ae565b8461565c565b6020601f821160018114615707575f83156156f05750848201515b5f19600385901b1c1916600184901b1784556156a0565b5f84815260208120601f198516915b828110156157365787850151825560209485019460019092019101615716565b508482101561575357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001815b600184111561579d57808504811115615781576157816154e6565b600184161561578f57908102905b60019390931c928002615766565b935093915050565b5f826157b357506001610e1a565b816157bf57505f610e1a565b81600181146157d557600281146157df576157fb565b6001915050610e1a565b60ff8411156157f0576157f06154e6565b50506001821b610e1a565b5060208310610133831016604e8410600b841016171561581e575081810a610e1a565b61582a5f198484615762565b805f190482111561583d5761583d6154e6565b029392505050565b5f61514660ff8416836157a5565b6020808252602f908201527f546f6b656e207472616e736665727320617265206e6f7420616c6c6f7765642060408201526e756e74696c2073616c6520656e647360881b60608201526080019056fe60e060405234801561000f575f5ffd5b5060405161059438038061059483398101604081905261002e9161016d565b6001600160a01b0383166100895760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070616972206164647265737300000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0382166100df5760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e206164647265737300000000000000000000006044820152606401610080565b6001600160a01b0381166101355760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964205745544820616464726573730000000000000000000000006044820152606401610080565b6001600160a01b0392831660805290821660a0521660c0526101ad565b80516001600160a01b0381168114610168575f5ffd5b919050565b5f5f5f6060848603121561017f575f5ffd5b61018884610152565b925061019660208501610152565b91506101a460408501610152565b90509250925092565b60805160a05160c0516103ac6101e85f395f605301525f818160be015261020301525f818160970152818160fb015261018101526103ac5ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80634b57b0be1461004e5780635289288414610092578063c55dae63146100b9578063eb91d37e146100e0575b5f5ffd5b6100757f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100757f000000000000000000000000000000000000000000000000000000000000000081565b6100757f000000000000000000000000000000000000000000000000000000000000000081565b6100e86100f6565b604051908152602001610089565b5f5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610155573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017991906102b5565b50915091505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ff9190610301565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03160361027357826001600160701b0316826001600160701b0316670de0b6b3a7640000610261919061032e565b61026b9190610357565b935050505090565b816001600160701b0316836001600160701b0316670de0b6b3a7640000610261919061032e565b80516001600160701b03811681146102b0575f5ffd5b919050565b5f5f5f606084860312156102c7575f5ffd5b6102d08461029a565b92506102de6020850161029a565b9150604084015163ffffffff811681146102f6575f5ffd5b809150509250925092565b5f60208284031215610311575f5ffd5b81516001600160a01b0381168114610327575f5ffd5b9392505050565b808202811582820484141761035157634e487b7160e01b5f52601160045260245ffd5b92915050565b5f8261037157634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212205a4317ac03fe507852d3055609271ce4ac804c1a3560e0836f3b9805e42b71d664736f6c634300081c003360a0604052348015600e575f5ffd5b50604051610174380380610174833981016040819052602b916094565b6001600160a01b03811660845760405162461bcd60e51b815260206004820152601f60248201527f4c5020746f6b656e20616464726573732063616e6e6f74206265207a65726f00604482015260640160405180910390fd5b6001600160a01b031660805260bf565b5f6020828403121560a3575f5ffd5b81516001600160a01b038116811460b8575f5ffd5b9392505050565b60805160a06100d45f395f602c015260a05ff3fe608060405260043610601b575f3560e01c80635fcbd28514601d575b005b3480156027575f5ffd5b50604e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f3fea2646970667358221220584033c93e8480ce1a9f0a1560e0198e8e2b7a5b590784b4c6fa385b56d8da9564736f6c634300081c0033a264697066735822122003c8437320cf5ded28f83b5f18f646f3f3f8efe544bd4cbd12662f6632790faf64736f6c634300081c0033