More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 27 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Sell Drago | 11456289 | 1401 days ago | IN | 0 ETH | 0.00280942 | ||||
Operate On Excha... | 8710695 | 1833 days ago | IN | 0 ETH | 0.00013033 | ||||
Operate On Excha... | 8710622 | 1833 days ago | IN | 0 ETH | 0.00013033 | ||||
Operate On Excha... | 8709623 | 1833 days ago | IN | 0 ETH | 0.00011929 | ||||
Operate On Excha... | 8709282 | 1833 days ago | IN | 0 ETH | 0.00011944 | ||||
Operate On Excha... | 8421577 | 1878 days ago | IN | 0 ETH | 0.00009954 | ||||
Operate On Excha... | 7681640 | 1993 days ago | IN | 0 ETH | 0.00033295 | ||||
Operate On Excha... | 7681639 | 1993 days ago | IN | 0 ETH | 0.00032959 | ||||
Operate On Excha... | 7528107 | 2017 days ago | IN | 0 ETH | 0.00020522 | ||||
Set Prices | 7527556 | 2017 days ago | IN | 0 ETH | 0.00013465 | ||||
Operate On Excha... | 7526959 | 2018 days ago | IN | 0 ETH | 0.00020522 | ||||
Operate On Excha... | 7484076 | 2024 days ago | IN | 0 ETH | 0.00032909 | ||||
Operate On Excha... | 7484063 | 2024 days ago | IN | 0 ETH | 0.00021985 | ||||
Operate On Excha... | 7459690 | 2028 days ago | IN | 0 ETH | 0.00010261 | ||||
Operate On Excha... | 7459376 | 2028 days ago | IN | 0 ETH | 0.00010261 | ||||
Operate On Excha... | 7450347 | 2030 days ago | IN | 0 ETH | 0.00020522 | ||||
Operate On Excha... | 7439189 | 2031 days ago | IN | 0 ETH | 0.00020522 | ||||
Operate On Excha... | 7321641 | 2050 days ago | IN | 0 ETH | 0.00061567 | ||||
Operate On Excha... | 7149396 | 2085 days ago | IN | 0 ETH | 0.00037776 | ||||
Operate On Excha... | 7149393 | 2085 days ago | IN | 0 ETH | 0.00032889 | ||||
Operate On Excha... | 7149345 | 2085 days ago | IN | 0 ETH | 0.0008784 | ||||
Operate On Excha... | 6782299 | 2149 days ago | IN | 0 ETH | 0.00074818 | ||||
Operate On Excha... | 6782218 | 2149 days ago | IN | 0 ETH | 0.00062348 | ||||
Buy Drago | 6782210 | 2149 days ago | IN | 0.2 ETH | 0.00034008 | ||||
Operate On Excha... | 6685966 | 2165 days ago | IN | 0 ETH | 0.0003318 |
Latest 14 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11456289 | 1401 days ago | 0.2789721 ETH | ||||
8709623 | 1833 days ago | 0 ETH | ||||
8709282 | 1833 days ago | 0.01 ETH | ||||
8421577 | 1878 days ago | 0.000005 ETH | ||||
7681639 | 1993 days ago | 0.2 ETH | ||||
7484076 | 2024 days ago | 0.2 ETH | ||||
7484063 | 2024 days ago | 0.28927 ETH | ||||
7149393 | 2085 days ago | 0.01 ETH | ||||
7149345 | 2085 days ago | 0.01 ETH | ||||
6782299 | 2149 days ago | 0.1 ETH | ||||
6782218 | 2149 days ago | 0.2 ETH | ||||
6685966 | 2165 days ago | 0.01 ETH | ||||
6685716 | 2165 days ago | 0.01 ETH | ||||
6685273 | 2165 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Drago
Compiler Version
v0.4.25+commit.59dbf8f1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-08-21 */ /* Copyright 2017-2018 RigoBlock, Rigo Investment Sagl. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ pragma solidity 0.4.25; pragma experimental ABIEncoderV2; interface Authority { /* * EVENTS */ event AuthoritySet(address indexed authority); event WhitelisterSet(address indexed whitelister); event WhitelistedUser(address indexed target, bool approved); event WhitelistedRegistry(address indexed registry, bool approved); event WhitelistedFactory(address indexed factory, bool approved); event WhitelistedVault(address indexed vault, bool approved); event WhitelistedDrago(address indexed drago, bool isWhitelisted); event NewDragoEventful(address indexed dragoEventful); event NewVaultEventful(address indexed vaultEventful); event NewNavVerifier(address indexed navVerifier); event NewExchangesAuthority(address indexed exchangesAuthority); /* * CORE FUNCTIONS */ function setAuthority(address _authority, bool _isWhitelisted) external; function setWhitelister(address _whitelister, bool _isWhitelisted) external; function whitelistUser(address _target, bool _isWhitelisted) external; function whitelistDrago(address _drago, bool _isWhitelisted) external; function whitelistVault(address _vault, bool _isWhitelisted) external; function whitelistRegistry(address _registry, bool _isWhitelisted) external; function whitelistFactory(address _factory, bool _isWhitelisted) external; function setDragoEventful(address _dragoEventful) external; function setVaultEventful(address _vaultEventful) external; function setNavVerifier(address _navVerifier) external; function setExchangesAuthority(address _exchangesAuthority) external; /* * CONSTANT PUBLIC FUNCTIONS */ function isWhitelistedUser(address _target) external view returns (bool); function isAuthority(address _authority) external view returns (bool); function isWhitelistedRegistry(address _registry) external view returns (bool); function isWhitelistedDrago(address _drago) external view returns (bool); function isWhitelistedVault(address _vault) external view returns (bool); function isWhitelistedFactory(address _factory) external view returns (bool); function getDragoEventful() external view returns (address); function getVaultEventful() external view returns (address); function getNavVerifier() external view returns (address); function getExchangesAuthority() external view returns (address); } interface ExchangesAuthority { /* * EVENTS */ event AuthoritySet(address indexed authority); event WhitelisterSet(address indexed whitelister); event WhitelistedAsset(address indexed asset, bool approved); event WhitelistedExchange(address indexed exchange, bool approved); event WhitelistedWrapper(address indexed wrapper, bool approved); event WhitelistedProxy(address indexed proxy, bool approved); event WhitelistedMethod(bytes4 indexed method, address indexed exchange, bool approved); event NewSigVerifier(address indexed sigVerifier); event NewExchangeEventful(address indexed exchangeEventful); event NewCasper(address indexed casper); /* * CORE FUNCTIONS */ /// @dev Allows the owner to whitelist an authority /// @param _authority Address of the authority /// @param _isWhitelisted Bool whitelisted function setAuthority(address _authority, bool _isWhitelisted) external; /// @dev Allows the owner to whitelist a whitelister /// @param _whitelister Address of the whitelister /// @param _isWhitelisted Bool whitelisted function setWhitelister(address _whitelister, bool _isWhitelisted) external; /// @dev Allows a whitelister to whitelist an asset /// @param _asset Address of the token /// @param _isWhitelisted Bool whitelisted function whitelistAsset(address _asset, bool _isWhitelisted) external; /// @dev Allows a whitelister to whitelist an exchange /// @param _exchange Address of the target exchange /// @param _isWhitelisted Bool whitelisted function whitelistExchange(address _exchange, bool _isWhitelisted) external; /// @dev Allows a whitelister to whitelist an token wrapper /// @param _wrapper Address of the target token wrapper /// @param _isWhitelisted Bool whitelisted function whitelistWrapper(address _wrapper, bool _isWhitelisted) external; /// @dev Allows a whitelister to whitelist a tokenTransferProxy /// @param _tokenTransferProxy Address of the proxy /// @param _isWhitelisted Bool whitelisted function whitelistTokenTransferProxy( address _tokenTransferProxy, bool _isWhitelisted) external; /// @dev Allows a whitelister to enable trading on a particular exchange /// @param _asset Address of the token /// @param _exchange Address of the exchange /// @param _isWhitelisted Bool whitelisted function whitelistAssetOnExchange( address _asset, address _exchange, bool _isWhitelisted) external; /// @dev Allows a whitelister to enable assiciate wrappers to a token /// @param _token Address of the token /// @param _wrapper Address of the exchange /// @param _isWhitelisted Bool whitelisted function whitelistTokenOnWrapper( address _token, address _wrapper, bool _isWhitelisted) external; /// @dev Allows an admin to whitelist a factory /// @param _method Hex of the function ABI /// @param _isWhitelisted Bool whitelisted function whitelistMethod( bytes4 _method, address _adapter, bool _isWhitelisted) external; /// @dev Allows the owner to set the signature verifier /// @param _sigVerifier Address of the logs contract function setSignatureVerifier(address _sigVerifier) external; /// @dev Allows the owner to set the exchange eventful /// @param _exchangeEventful Address of the exchange logs contract function setExchangeEventful(address _exchangeEventful) external; /// @dev Allows the owner to associate an exchange to its adapter /// @param _exchange Address of the exchange /// @param _adapter Address of the adapter function setExchangeAdapter(address _exchange, address _adapter) external; /// @dev Allows the owner to set the casper contract /// @param _casper Address of the casper contract function setCasper(address _casper) external; /* * CONSTANT PUBLIC FUNCTIONS */ /// @dev Provides whether an address is an authority /// @param _authority Address of the target authority /// @return Bool is whitelisted function isAuthority(address _authority) external view returns (bool); /// @dev Provides whether an asset is whitelisted /// @param _asset Address of the target asset /// @return Bool is whitelisted function isWhitelistedAsset(address _asset) external view returns (bool); /// @dev Provides whether an exchange is whitelisted /// @param _exchange Address of the target exchange /// @return Bool is whitelisted function isWhitelistedExchange(address _exchange) external view returns (bool); /// @dev Provides whether a token wrapper is whitelisted /// @param _wrapper Address of the target exchange /// @return Bool is whitelisted function isWhitelistedWrapper(address _wrapper) external view returns (bool); /// @dev Provides whether a proxy is whitelisted /// @param _tokenTransferProxy Address of the proxy /// @return Bool is whitelisted function isWhitelistedProxy(address _tokenTransferProxy) external view returns (bool); /// @dev Provides the address of the exchange adapter /// @param _exchange Address of the exchange /// @return Address of the adapter function getExchangeAdapter(address _exchange) external view returns (address); /// @dev Provides the address of the signature verifier /// @return Address of the verifier function getSigVerifier() external view returns (address); /// @dev Checkes whether a token is allowed on an exchange /// @param _token Address of the token /// @param _exchange Address of the exchange /// @return Bool the token is whitelisted on the exchange function canTradeTokenOnExchange(address _token, address _exchange) external view returns (bool); /// @dev Checkes whether a token is allowed on a wrapper /// @param _token Address of the token /// @return Bool the token is whitelisted on the exchange function canWrapTokenOnWrapper(address _token, address _wrapper) external view returns (bool); /// @dev Checkes whether a method is allowed on an exchange function isMethodAllowed(bytes4 _method, address _exchange) external view returns (bool); /// @dev Checkes whether casper has been inizialized /// @return Bool the casper contract has been initialized function isCasperInitialized() external view returns (bool); /// @dev Provides the address of the casper contract /// @return Address of the casper contract function getCasper() external view returns (address); } interface SigVerifier { /// @dev Verifies that a signature is valid. /// @param hash Message hash that is signed. /// @param signature Proof of signing. /// @return Validity of order signature. function isValidSignature( bytes32 hash, bytes signature ) external view returns (bool isValid); } interface NavVerifier { /// @dev Verifies that a signature is valid. /// @param sellPrice Price in wei /// @param buyPrice Price in wei /// @param signaturevaliduntilBlock Number of blocks till price expiry /// @param hash Message hash that is signed. /// @param signedData Proof of nav validity. /// @notice mock function which returns true function isValidNav( uint256 sellPrice, uint256 buyPrice, uint256 signaturevaliduntilBlock, bytes32 hash, bytes signedData) external view returns (bool isValid); } interface Kyc { function isWhitelistedUser(address hodler) external view returns (bool); } interface DragoEventful { /* * EVENTS */ event BuyDrago(address indexed drago, address indexed from, address indexed to, uint256 amount, uint256 revenue, bytes name, bytes symbol); event SellDrago(address indexed drago, address indexed from, address indexed to, uint256 amount, uint256 revenue, bytes name, bytes symbol); event NewRatio(address indexed drago, address indexed from, uint256 newRatio); event NewNAV(address indexed drago, address indexed from, address indexed to, uint256 sellPrice, uint256 buyPrice); event NewFee(address indexed drago, address indexed group, address indexed who, uint256 transactionFee); event NewCollector( address indexed drago, address indexed group, address indexed who, address feeCollector); event DragoDao(address indexed drago, address indexed from, address indexed to, address dragoDao); event DepositExchange(address indexed drago, address indexed exchange, address indexed token, uint256 value, uint256 amount); event WithdrawExchange(address indexed drago, address indexed exchange, address indexed token, uint256 value, uint256 amount); event OrderExchange(address indexed drago, address indexed exchange, address indexed cfd, uint256 value, uint256 revenue); event TradeExchange(address indexed drago, address indexed exchange, address tokenGet, address tokenGive, uint256 amountGet, uint256 amountGive, address get); event CancelOrder(address indexed drago, address indexed exchange, address indexed cfd, uint256 value, uint256 id); event DealFinalized(address indexed drago, address indexed exchange, address indexed cfd, uint256 value, uint256 id); event CustomDragoLog(bytes4 indexed methodHash, bytes encodedParams); event CustomDragoLog2(bytes4 indexed methodHash, bytes32 topic2, bytes32 topic3, bytes encodedParams); event DragoCreated(address indexed drago, address indexed group, address indexed owner, uint256 dragoId, string name, string symbol); /* * CORE FUNCTIONS */ function buyDrago(address _who, address _targetDrago, uint256 _value, uint256 _amount, bytes _name, bytes _symbol) external returns (bool success); function sellDrago(address _who, address _targetDrago, uint256 _amount, uint256 _revenue, bytes _name, bytes _symbol) external returns(bool success); function changeRatio(address _who, address _targetDrago, uint256 _ratio) external returns(bool success); function changeFeeCollector(address _who, address _targetDrago, address _feeCollector) external returns(bool success); function changeDragoDao(address _who, address _targetDrago, address _dragoDao) external returns(bool success); function setDragoPrice(address _who, address _targetDrago, uint256 _sellPrice, uint256 _buyPrice) external returns(bool success); function setTransactionFee(address _who, address _targetDrago, uint256 _transactionFee) external returns(bool success); function depositToExchange(address _who, address _targetDrago, address _exchange, address _token, uint256 _value) external returns(bool success); function withdrawFromExchange(address _who, address _targetDrago, address _exchange, address _token, uint256 _value) external returns(bool success); function customDragoLog(bytes4 _methodHash, bytes _encodedParams) external returns (bool success); function customDragoLog2(bytes4 _methodHash, bytes32 topic2, bytes32 topic3, bytes _encodedParams) external returns (bool success); function customExchangeLog(bytes4 _methodHash, bytes _encodedParams) external returns (bool success); function customExchangeLog2(bytes4 _methodHash, bytes32 topic2, bytes32 topic3,bytes _encodedParams) external returns (bool success); function createDrago(address _who, address _newDrago, string _name, string _symbol, uint256 _dragoId) external returns(bool success); } interface Token { event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function balanceOf(address _who) external view returns (uint256); function allowance(address _owner, address _spender) external view returns (uint256); } contract ReentrancyGuard { // Locked state of mutex bool private locked = false; /// @dev Functions with this modifer cannot be reentered. The mutex will be locked /// before function execution and unlocked after. modifier nonReentrant() { // Ensure mutex is unlocked require( !locked, "REENTRANCY_ILLEGAL" ); // Lock mutex before function call locked = true; // Perform function call _; // Unlock mutex after function call locked = false; } } contract Owned { address public owner; event NewOwner(address indexed old, address indexed current); modifier onlyOwner { require(msg.sender == owner); _; } function setOwner(address _new) public onlyOwner { require(_new != address(0)); owner = _new; emit NewOwner(owner, _new); } } contract SafeMath { function safeMul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c>=a && c>=b); return c; } } library LibFindMethod { /// @dev Returns the method of an ABIencoded call /// @param assembledData Bytes of the call data /// @return Bytes4 of the function signature function findMethod(bytes assembledData) internal pure returns (bytes4 method) { // find the bytes4(keccak256('functionABI')) of the function assembly { // Load free memory pointer method := mload(0x00) let transaction := assembledData method := mload(add(transaction, 0x20)) } return method; } } /// @title Drago - A set of rules for a drago. /// @author Gabriele Rigo - <[email protected]> // solhint-disable-next-line contract Drago is Owned, SafeMath, ReentrancyGuard { using LibFindMethod for *; string constant VERSION = 'HF 0.5.2'; uint256 constant BASE = 1000000; // tokens are divisible by 1 million mapping (address => Account) accounts; DragoData data; Admin admin; struct Receipt { uint256 units; uint32 activation; } struct Account { uint256 balance; Receipt receipt; mapping(address => address[]) approvedAccount; } struct Transaction { bytes assembledData; } struct DragoData { string name; string symbol; uint256 dragoId; uint256 totalSupply; uint256 sellPrice; uint256 buyPrice; uint256 transactionFee; // in basis points 1 = 0.01% uint32 minPeriod; } struct Admin { address authority; address dragoDao; address feeCollector; address kycProvider; bool kycEnforced; uint256 minOrder; // minimum stake to avoid dust clogging things up uint256 ratio; // ratio is 80% } modifier onlyDragoDao() { require(msg.sender == admin.dragoDao); _; } modifier onlyOwnerOrAuthority() { Authority auth = Authority(admin.authority); require(auth.isAuthority(msg.sender) || msg.sender == owner); _; } modifier whenApprovedExchangeOrWrapper(address _target) { bool approvedExchange = ExchangesAuthority(getExchangesAuthority()) .isWhitelistedExchange(_target); bool approvedWrapper = ExchangesAuthority(getExchangesAuthority()) .isWhitelistedWrapper(_target); require(approvedWrapper || approvedExchange); _; } modifier whenApprovedProxy(address _proxy) { bool approved = ExchangesAuthority(getExchangesAuthority()) .isWhitelistedProxy(_proxy); require(approved); _; } modifier minimumStake(uint256 amount) { require (amount >= admin.minOrder); _; } modifier hasEnough(uint256 _amount) { require(accounts[msg.sender].balance >= _amount); _; } modifier positiveAmount(uint256 _amount) { require(accounts[msg.sender].balance + _amount > accounts[msg.sender].balance); _; } modifier minimumPeriodPast() { require(block.timestamp >= accounts[msg.sender].receipt.activation); _; } modifier buyPriceHigherOrEqual(uint256 _sellPrice, uint256 _buyPrice) { require(_sellPrice <= _buyPrice); _; } modifier notPriceError(uint256 _sellPrice, uint256 _buyPrice) { if (_sellPrice <= data.sellPrice / 10 || _buyPrice >= data.buyPrice * 10) return; _; } constructor( string _dragoName, string _dragoSymbol, uint256 _dragoId, address _owner, address _authority) public { data.name = _dragoName; data.symbol = _dragoSymbol; data.dragoId = _dragoId; data.sellPrice = 1 ether; data.buyPrice = 1 ether; owner = _owner; admin.authority = _authority; admin.dragoDao = msg.sender; admin.minOrder = 1 finney; admin.feeCollector = _owner; admin.ratio = 80; } /* * CORE FUNCTIONS */ /// @dev Allows Ether to be received. /// @notice Used for settlements and withdrawals. function() external payable { require(msg.value != 0); } /// @dev Allows a user to buy into a drago. /// @return Bool the function executed correctly. function buyDrago() external payable minimumStake(msg.value) returns (bool success) { require(buyDragoInternal(msg.sender)); return true; } /// @dev Allows a user to buy into a drago on behalf of an address. /// @param _hodler Address of the target user. /// @return Bool the function executed correctly. function buyDragoOnBehalf(address _hodler) external payable minimumStake(msg.value) returns (bool success) { require(buyDragoInternal(_hodler)); return true; } /// @dev Allows a user to sell from a drago. /// @param _amount Number of shares to sell. /// @return Bool the function executed correctly. function sellDrago(uint256 _amount) external nonReentrant hasEnough(_amount) positiveAmount(_amount) minimumPeriodPast returns (bool success) { uint256 feeDrago; uint256 feeDragoDao; uint256 netAmount; uint256 netRevenue; (feeDrago, feeDragoDao, netAmount, netRevenue) = getSaleAmounts(_amount); addSaleLog(_amount, netRevenue); allocateSaleTokens(msg.sender, _amount, feeDrago, feeDragoDao); data.totalSupply = safeSub(data.totalSupply, netAmount); msg.sender.transfer(netRevenue); return true; } /// @dev Allows drago owner or authority to set the price for a drago. /// @param _newSellPrice Price in wei. /// @param _newBuyPrice Price in wei. /// @param _signaturevaliduntilBlock Number of blocks till expiry of new data. /// @param _hash Bytes32 of the transaction hash. /// @param _signedData Bytes of extradata and signature. function setPrices( uint256 _newSellPrice, uint256 _newBuyPrice, uint256 _signaturevaliduntilBlock, bytes32 _hash, bytes _signedData) external nonReentrant onlyOwnerOrAuthority buyPriceHigherOrEqual(_newSellPrice, _newBuyPrice) notPriceError(_newSellPrice, _newBuyPrice) { require( isValidNav( _newSellPrice, _newBuyPrice, _signaturevaliduntilBlock, _hash, _signedData ) ); DragoEventful events = DragoEventful(getDragoEventful()); require(events.setDragoPrice(msg.sender, this, _newSellPrice, _newBuyPrice)); data.sellPrice = _newSellPrice; data.buyPrice = _newBuyPrice; } /// @dev Allows drago dao/factory to change fee split ratio. /// @param _ratio Number of ratio for wizard, from 0 to 100. function changeRatio(uint256 _ratio) external onlyDragoDao { DragoEventful events = DragoEventful(getDragoEventful()); require(events.changeRatio(msg.sender, this, _ratio)); admin.ratio = _ratio; } /// @dev Allows drago owner to set the transaction fee. /// @param _transactionFee Value of the transaction fee in basis points. function setTransactionFee(uint256 _transactionFee) external onlyOwner { require(_transactionFee <= 100); //fee cannot be higher than 1% DragoEventful events = DragoEventful(getDragoEventful()); require(events.setTransactionFee(msg.sender, this, _transactionFee)); data.transactionFee = _transactionFee; } /// @dev Allows owner to decide where to receive the fee. /// @param _feeCollector Address of the fee receiver. function changeFeeCollector(address _feeCollector) external onlyOwner { DragoEventful events = DragoEventful(getDragoEventful()); events.changeFeeCollector(msg.sender, this, _feeCollector); admin.feeCollector = _feeCollector; } /// @dev Allows drago dao/factory to upgrade its address. /// @param _dragoDao Address of the new drago dao. function changeDragoDao(address _dragoDao) external onlyDragoDao { DragoEventful events = DragoEventful(getDragoEventful()); require(events.changeDragoDao(msg.sender, this, _dragoDao)); admin.dragoDao = _dragoDao; } /// @dev Allows drago dao/factory to change the minimum holding period. /// @param _minPeriod Time in seconds. function changeMinPeriod(uint32 _minPeriod) external onlyDragoDao { data.minPeriod = _minPeriod; } function enforceKyc( bool _enforced, address _kycProvider) external onlyOwner { admin.kycEnforced = _enforced; admin.kycProvider = _kycProvider; } /// @dev Allows owner to set an allowance to an approved token transfer proxy. /// @param _tokenTransferProxy Address of the proxy to be approved. /// @param _token Address of the token to receive allowance for. /// @param _amount Number of tokens approved for spending. function setAllowance( address _tokenTransferProxy, address _token, uint256 _amount) external onlyOwner whenApprovedProxy(_tokenTransferProxy) { require(setAllowancesInternal(_tokenTransferProxy, _token, _amount)); } /// @dev Allows owner to set allowances to multiple approved tokens with one call. /// @param _tokenTransferProxy Address of the proxy to be approved. /// @param _tokens Address of the token to receive allowance for. /// @param _amounts Array of number of tokens to be approved. function setMultipleAllowances( address _tokenTransferProxy, address[] _tokens, uint256[] _amounts) external { for (uint256 i = 0; i < _tokens.length; i++) { if (!setAllowancesInternal(_tokenTransferProxy, _tokens[i], _amounts[i])) continue; } } /// @dev Allows owner to operate on exchange through extension. /// @param _exchange Address of the target exchange. /// @param transaction ABIencoded transaction. function operateOnExchange( address _exchange, Transaction memory transaction) public onlyOwner nonReentrant whenApprovedExchangeOrWrapper(_exchange) returns (bool success) { address adapter = getExchangeAdapter(_exchange); bytes memory transactionData = transaction.assembledData; require( methodAllowedOnExchange( findMethod(transactionData), adapter ) ); bytes memory response; bool failed = true; assembly { let succeeded := delegatecall( sub(gas, 5000), adapter, add(transactionData, 0x20), mload(transactionData), 0, 32) // 0x0 // load delegatecall output response := mload(0) failed := iszero(succeeded) switch failed case 1 { // throw if delegatecall failed revert(0, 0) } } return (success = true); } /// @dev Allows owner or approved exchange to send a transaction to exchange /// @dev With data of signed/unsigned transaction /// @param _exchange Address of the exchange /// @param transactions Array of ABI encoded transactions function batchOperateOnExchange( address _exchange, Transaction[] memory transactions) public onlyOwner nonReentrant whenApprovedExchangeOrWrapper(_exchange) { for (uint256 i = 0; i < transactions.length; i++) { if (!operateOnExchange(_exchange, transactions[i])) continue; } } /* * CONSTANT PUBLIC FUNCTIONS */ /// @dev Calculates how many shares a user holds. /// @param _who Address of the target account. /// @return Number of shares. function balanceOf(address _who) external view returns (uint256) { return accounts[_who].balance; } /// @dev Gets the address of the logger contract. /// @return Address of the logger contrac. function getEventful() external view returns (address) { Authority auth = Authority(admin.authority); return auth.getDragoEventful(); } /// @dev Finds details of a drago pool. /// @return String name of a drago. /// @return String symbol of a drago. /// @return Value of the share price in wei. /// @return Value of the share price in wei. function getData() external view returns ( string name, string symbol, uint256 sellPrice, uint256 buyPrice ) { name = data.name; symbol = data.symbol; sellPrice = data.sellPrice; buyPrice = data.buyPrice; } /// @dev Returns the price of a pool. /// @return Value of the share price in wei. function calcSharePrice() external view returns (uint256) { return data.sellPrice; } /// @dev Finds the administrative data of the pool. /// @return Address of the account where a user collects fees. /// @return Address of the drago dao/factory. /// @return Number of the fee split ratio. /// @return Value of the transaction fee in basis points. /// @return Number of the minimum holding period for shares. function getAdminData() external view returns ( address, //owner address feeCollector, address dragoDao, uint256 ratio, uint256 transactionFee, uint32 minPeriod ) { return ( owner, admin.feeCollector, admin.dragoDao, admin.ratio, data.transactionFee, data.minPeriod ); } function getKycProvider() external view returns (address) { if(admin.kycEnforced) { return admin.kycProvider; } } /// @dev Verifies that a signature is valid. /// @param hash Message hash that is signed. /// @param signature Proof of signing. /// @return Validity of order signature. function isValidSignature( bytes32 hash, bytes signature ) external view returns (bool isValid) { isValid = SigVerifier(getSigVerifier()) .isValidSignature(hash, signature); return isValid; } /// @dev Finds the exchanges authority. /// @return Address of the exchanges authority. function getExchangesAuth() external view returns (address) { return getExchangesAuthority(); } /// @dev Returns the total amount of issued tokens for this drago. /// @return Number of shares. function totalSupply() external view returns (uint256) { return data.totalSupply; } /* * INTERNAL FUNCTIONS */ /// @dev Executes the pool purchase. /// @param _hodler Address of the target user. /// @return Bool the function executed correctly. function buyDragoInternal(address _hodler) internal returns (bool success) { if (admin.kycProvider != 0x0) { require(Kyc(admin.kycProvider).isWhitelistedUser(_hodler)); } uint256 grossAmount; uint256 feeDrago; uint256 feeDragoDao; uint256 amount; (grossAmount, feeDrago, feeDragoDao, amount) = getPurchaseAmounts(); addPurchaseLog(amount); allocatePurchaseTokens(_hodler, amount, feeDrago, feeDragoDao); data.totalSupply = safeAdd(data.totalSupply, grossAmount); return true; } /// @dev Allocates tokens to buyer, splits fee in tokens to wizard and dao. /// @param _hodler Address of the buyer. /// @param _amount Value of issued tokens. /// @param _feeDrago Number of shares as fee. /// @param _feeDragoDao Number of shares as fee to dao. function allocatePurchaseTokens( address _hodler, uint256 _amount, uint256 _feeDrago, uint256 _feeDragoDao) internal { accounts[_hodler].balance = safeAdd(accounts[_hodler].balance, _amount); accounts[admin.feeCollector].balance = safeAdd(accounts[admin.feeCollector].balance, _feeDrago); accounts[admin.dragoDao].balance = safeAdd(accounts[admin.dragoDao].balance, _feeDragoDao); accounts[_hodler].receipt.activation = uint32(now) + data.minPeriod; } /// @dev Destroys tokens of seller, splits fee in tokens to wizard and dao. /// @param _hodler Address of the seller. /// @param _amount Value of burnt tokens. /// @param _feeDrago Number of shares as fee. /// @param _feeDragoDao Number of shares as fee to dao. function allocateSaleTokens( address _hodler, uint256 _amount, uint256 _feeDrago, uint256 _feeDragoDao) internal { accounts[_hodler].balance = safeSub(accounts[_hodler].balance, _amount); accounts[admin.feeCollector].balance = safeAdd(accounts[admin.feeCollector].balance, _feeDrago); accounts[admin.dragoDao].balance = safeAdd(accounts[admin.dragoDao].balance, _feeDragoDao); } /// @dev Sends a buy log to the eventful contract. /// @param _amount Number of purchased shares. function addPurchaseLog(uint256 _amount) internal { bytes memory name = bytes(data.name); bytes memory symbol = bytes(data.symbol); Authority auth = Authority(admin.authority); DragoEventful events = DragoEventful(auth.getDragoEventful()); require(events.buyDrago(msg.sender, this, msg.value, _amount, name, symbol)); } /// @dev Sends a sell log to the eventful contract. /// @param _amount Number of sold shares. /// @param _netRevenue Value of sale for hodler. function addSaleLog(uint256 _amount, uint256 _netRevenue) internal { bytes memory name = bytes(data.name); bytes memory symbol = bytes(data.symbol); Authority auth = Authority(admin.authority); DragoEventful events = DragoEventful(auth.getDragoEventful()); require(events.sellDrago(msg.sender, this, _amount, _netRevenue, name, symbol)); } /// @dev Allows owner to set an infinite allowance to an approved exchange. /// @param _tokenTransferProxy Address of the proxy to be approved. /// @param _token Address of the token to receive allowance for. function setAllowancesInternal( address _tokenTransferProxy, address _token, uint256 _amount) internal returns (bool) { require(Token(_token) .approve(_tokenTransferProxy, _amount)); return true; } /// @dev Calculates the correct purchase amounts. /// @return Number of new shares. /// @return Value of fee in shares. /// @return Value of fee in shares to dao. /// @return Value of net purchased shares. function getPurchaseAmounts() internal view returns ( uint256 grossAmount, uint256 feeDrago, uint256 feeDragoDao, uint256 amount ) { grossAmount = safeDiv(msg.value * BASE, data.buyPrice); uint256 fee = safeMul(grossAmount, data.transactionFee) / 10000; //fee is in basis points return ( grossAmount, feeDrago = safeMul(fee , admin.ratio) / 100, feeDragoDao = safeSub(fee, feeDrago), amount = safeSub(grossAmount, fee) ); } /// @dev Calculates the correct sale amounts. /// @return Value of fee in shares. /// @return Value of fee in shares to dao. /// @return Value of net sold shares. /// @return Value of sale amount for hodler. function getSaleAmounts(uint256 _amount) internal view returns ( uint256 feeDrago, uint256 feeDragoDao, uint256 netAmount, uint256 netRevenue ) { uint256 fee = safeMul(_amount, data.transactionFee) / 10000; //fee is in basis points return ( feeDrago = safeMul(fee, admin.ratio) / 100, feeDragoDao = safeSub(fee, feeDragoDao), netAmount = safeSub(_amount, fee), netRevenue = (safeMul(netAmount, data.sellPrice) / BASE) ); } /// @dev Gets the address of the logger contract. /// @return Address of the logger contrac. function getDragoEventful() internal view returns (address) { Authority auth = Authority(admin.authority); return auth.getDragoEventful(); } /// @dev Returns the address of the signature verifier. /// @return Address of the verifier contract. function getSigVerifier() internal view returns (address) { return ExchangesAuthority( Authority(admin.authority) .getExchangesAuthority()) .getSigVerifier(); } /// @dev Returns the address of the price verifier. /// @return Address of the verifier contract. function getNavVerifier() internal view returns (address) { return Authority(admin.authority) .getNavVerifier(); } /// @dev Verifies that a signature is valid. /// @param sellPrice Price in wei. /// @param buyPrice Price in wei. /// @param signaturevaliduntilBlock Number of blocks till price expiry. /// @param hash Message hash that is signed. /// @param signedData Proof of nav validity. /// @return Bool validity of signed price update. function isValidNav( uint256 sellPrice, uint256 buyPrice, uint256 signaturevaliduntilBlock, bytes32 hash, bytes signedData) internal view returns (bool isValid) { isValid = NavVerifier(getNavVerifier()).isValidNav( sellPrice, buyPrice, signaturevaliduntilBlock, hash, signedData ); return isValid; } /// @dev Finds the exchanges authority. /// @return Address of the exchanges authority. function getExchangesAuthority() internal view returns (address) { return Authority(admin.authority).getExchangesAuthority(); } /// @dev Returns the address of the exchange adapter. /// @param _exchange Address of the target exchange. /// @return Address of the exchange adapter. function getExchangeAdapter(address _exchange) internal view returns (address) { return ExchangesAuthority( Authority(admin.authority) .getExchangesAuthority()) .getExchangeAdapter(_exchange); } /// @dev Returns the method of a call. /// @param assembledData Bytes of the encoded transaction. /// @return Bytes4 function signature. function findMethod(bytes assembledData) internal pure returns (bytes4 method) { return method = LibFindMethod.findMethod(assembledData); } /// @dev Finds if a method is allowed on an exchange. /// @param _adapter Address of the target exchange. /// @return Bool the method is allowed. function methodAllowedOnExchange( bytes4 _method, address _adapter) internal view returns (bool) { return ExchangesAuthority( Authority(admin.authority) .getExchangesAuthority()) .isMethodAllowed(_method, _adapter); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_exchange","type":"address"},{"components":[{"name":"assembledData","type":"bytes"}],"name":"transactions","type":"tuple[]"}],"name":"batchOperateOnExchange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_transactionFee","type":"uint256"}],"name":"setTransactionFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_exchange","type":"address"},{"components":[{"name":"assembledData","type":"bytes"}],"name":"transaction","type":"tuple"}],"name":"operateOnExchange","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_enforced","type":"bool"},{"name":"_kycProvider","type":"address"}],"name":"enforceKyc","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_new","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"name":"isValid","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buyDrago","outputs":[{"name":"success","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newSellPrice","type":"uint256"},{"name":"_newBuyPrice","type":"uint256"},{"name":"_signaturevaliduntilBlock","type":"uint256"},{"name":"_hash","type":"bytes32"},{"name":"_signedData","type":"bytes"}],"name":"setPrices","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getData","outputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"sellPrice","type":"uint256"},{"name":"buyPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minPeriod","type":"uint32"}],"name":"changeMinPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"sellDrago","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_hodler","type":"address"}],"name":"buyDragoOnBehalf","outputs":[{"name":"success","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getEventful","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAdminData","outputs":[{"name":"","type":"address"},{"name":"feeCollector","type":"address"},{"name":"dragoDao","type":"address"},{"name":"ratio","type":"uint256"},{"name":"transactionFee","type":"uint256"},{"name":"minPeriod","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_feeCollector","type":"address"}],"name":"changeFeeCollector","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"calcSharePrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getExchangesAuth","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenTransferProxy","type":"address"},{"name":"_tokens","type":"address[]"},{"name":"_amounts","type":"uint256[]"}],"name":"setMultipleAllowances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dragoDao","type":"address"}],"name":"changeDragoDao","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenTransferProxy","type":"address"},{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"setAllowance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getKycProvider","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ratio","type":"uint256"}],"name":"changeRatio","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_dragoName","type":"string"},{"name":"_dragoSymbol","type":"string"},{"name":"_dragoId","type":"uint256"},{"name":"_owner","type":"address"},{"name":"_authority","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"old","type":"address"},{"indexed":true,"name":"current","type":"address"}],"name":"NewOwner","type":"event"}]
Contract Creation Code
60806040526000805460a060020a60ff02191690553480156200002157600080fd5b5060405162002f8138038062002f8183398101806040526200004791908101906200020c565b84516200005c906002906020880190620000e8565b50835162000072906003906020870190620000e8565b50600492909255670de0b6b3a7640000600681905560075560008054600160a060020a03928316600160a060020a03199182168117909255600a80549490931693811693909317909155600b805483163317905566038d7ea4c68000600e55600c805490921617905550506050600f5562000349565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200012b57805160ff19168380011785556200015b565b828001600101855582156200015b579182015b828111156200015b5782518255916020019190600101906200013e565b50620001699291506200016d565b5090565b6200018a91905b8082111562000169576000815560010162000174565b90565b60006200019b82516200030a565b9392505050565b6000601f82018313620001b457600080fd5b8151620001cb620001c582620002e2565b620002bb565b91508082526020830160208301858383011115620001e857600080fd5b620001f583828462000316565b50505092915050565b60006200019b82516200018a565b600080600080600060a086880312156200022557600080fd5b85516001604060020a038111156200023c57600080fd5b6200024a88828901620001a2565b95505060208601516001604060020a038111156200026757600080fd5b6200027588828901620001a2565b94505060406200028888828901620001fe565b93505060606200029b888289016200018d565b9250506080620002ae888289016200018d565b9150509295509295909350565b6040518181016001604060020a0381118282101715620002da57600080fd5b604052919050565b60006001604060020a03821115620002f957600080fd5b506020601f91909101601f19160190565b600160a060020a031690565b60005b838110156200033357818101518382015260200162000319565b8381111562000343576000848401525b50505050565b612c2880620003596000396000f30060806040526004361061012f5763ffffffff60e060020a60003504166301e6e549811461013d578063096a8ab71461015d5780630e91206b1461017d5780631118069c146101b357806313af4035146101d35780631626ba7e146101f357806318160ddd146102135780632fbbde2d1461023557806330958a981461023d5780633bc5de301461025d57806354bdbd4d1461028257806354ea1538146102a25780636854f668146102c257806370a08231146102d5578063837929b6146102f55780638da5cb5b146103175780638f7a844b1461032c5780639245290d146103535780639489fa8414610373578063c112c71314610388578063c67f72e11461039d578063c8c3b926146103bd578063da46098c146103dd578063e4e985a8146103fd578063f6a3325314610412575b34151561013b57600080fd5b005b34801561014957600080fd5b5061013b6101583660046125c4565b610432565b34801561016957600080fd5b5061013b610178366004612702565b610614565b34801561018957600080fd5b5061019d610198366004612616565b6106f1565b6040516101aa9190612a07565b60405180910390f35b3480156101bf57600080fd5b5061013b6101ce36600461267c565b610900565b3480156101df57600080fd5b5061013b6101ee3660046124ac565b61095d565b3480156101ff57600080fd5b5061019d61020e3660046126ac565b6109e4565b34801561021f57600080fd5b50610228610a7c565b6040516101aa9190612a95565b61019d610a83565b34801561024957600080fd5b5061013b610258366004612720565b610ab3565b34801561026957600080fd5b50610272610cf8565b6040516101aa9493929190612a51565b34801561028e57600080fd5b5061013b61029d3660046127b0565b610e2f565b3480156102ae57600080fd5b5061019d6102bd366004612702565b610e62565b61019d6102d03660046124ac565b610f92565b3480156102e157600080fd5b506102286102f03660046124ac565b610fc3565b34801561030157600080fd5b5061030a610fde565b6040516101aa9190612898565b34801561032357600080fd5b5061030a61107e565b34801561033857600080fd5b5061034161108d565b6040516101aa969594939291906128a6565b34801561035f57600080fd5b5061013b61036e3660046124ac565b6110c2565b34801561037f57600080fd5b506102286111b1565b34801561039457600080fd5b5061030a6111b7565b3480156103a957600080fd5b5061013b6103b836600461253d565b6111c6565b3480156103c957600080fd5b5061013b6103d83660046124ac565b61121c565b3480156103e957600080fd5b5061013b6103f83660046124f0565b611317565b34801561040957600080fd5b5061030a6113e4565b34801561041e57600080fd5b5061013b61042d366004612702565b61140b565b60008054600160a060020a0316331461044a57600080fd5b60005460a060020a900460ff16156104805760405160e560020a62461bcd02815260040161047790612a85565b60405180910390fd5b6000805460a060020a60ff02191660a060020a1781558390806104a16114dc565b600160a060020a0316639aa4d0a0846040518263ffffffff1660e060020a0281526004016104cf9190612898565b602060405180830381600087803b1580156104e957600080fd5b505af11580156104fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610521919081019061265e565b915061052b6114dc565b600160a060020a031663f3229cda846040518263ffffffff1660e060020a0281526004016105599190612898565b602060405180830381600087803b15801561057357600080fd5b505af1158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105ab919081019061265e565b905080806105b65750815b15156105c157600080fd5b600093505b84518410156105fc576105f08686868151811015156105e157fe5b906020019060200201516106f1565b506001909301926105c6565b50506000805460a060020a60ff021916905550505050565b60008054600160a060020a0316331461062c57600080fd5b606482111561063a57600080fd5b610642610fde565b6040517fd5aaa73a000000000000000000000000000000000000000000000000000000008152909150600160a060020a0382169063d5aaa73a9061068e90339030908790600401612928565b602060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106e0919081019061265e565b15156106eb57600080fd5b50600855565b60008054819060609081908390600160a060020a0316331461071257600080fd5b60005460a060020a900460ff161561073f5760405160e560020a62461bcd02815260040161047790612a85565b6000805460a060020a60ff02191660a060020a1781558790806107606114dc565b600160a060020a0316639aa4d0a0846040518263ffffffff1660e060020a02815260040161078e9190612898565b602060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107e0919081019061265e565b91506107ea6114dc565b600160a060020a031663f3229cda846040518263ffffffff1660e060020a0281526004016108189190612898565b602060405180830381600087803b15801561083257600080fd5b505af1158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061086a919081019061265e565b905080806108755750815b151561088057600080fd5b6108898a61155d565b895190975095506108a261089c87611664565b8861166f565b15156108ad57600080fd5b60019350602060008751602089018a6113885a03f460005195508015945084600181146108d9576108de565b600080fd5b50506000805460a060020a60ff02191690555060019998505050505050505050565b600054600160a060020a0316331461091757600080fd5b600d805460a060020a60ff02191660a060020a931515939093029290921773ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116179055565b600054600160a060020a0316331461097457600080fd5b600160a060020a038116151561098957600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691821780845560405192939116917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b23649190a350565b60006109ee611772565b600160a060020a0316631626ba7e8585856040518463ffffffff1660e060020a028152600401610a2093929190612a15565b602060405180830381600087803b158015610a3a57600080fd5b505af1158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a72919081019061265e565b90505b9392505050565b6005545b90565b600e546000903490811015610a9757600080fd5b610aa033611830565b1515610aab57600080fd5b600191505090565b6000805460a060020a900460ff1615610ae15760405160e560020a62461bcd02815260040161047790612a85565b6000805460a060020a60ff02191660a060020a179055600a546040517f2330f247000000000000000000000000000000000000000000000000000000008152600160a060020a03909116908190632330f24790610b42903390600401612898565b602060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b94919081019061265e565b80610ba95750600054600160a060020a031633145b1515610bb457600080fd5b878780821115610bc357600080fd5b6006548a908a90600a900482111580610be15750600754600a028110155b15610beb57610cda565b610c288c8c8c8c8c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843750611935945050505050565b1515610c3357600080fd5b610c3b610fde565b955085600160a060020a031663554a781833308f8f6040518563ffffffff1660e060020a028152600401610c729493929190612950565b602060405180830381600087803b158015610c8c57600080fd5b505af1158015610ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cc4919081019061265e565b1515610ccf57600080fd5b60068c905560078b90555b50506000805460a060020a60ff021916905550505050505050505050565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152606093849360009384939291830182828015610d855780601f10610d5a57610100808354040283529160200191610d85565b820191906000526020600020905b815481529060010190602001808311610d6857829003601f168201915b505060038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152969a5091945092508401905082828015610e165780601f10610deb57610100808354040283529160200191610e16565b820191906000526020600020905b815481529060010190602001808311610df957829003601f168201915b5050600654600754989994989097509550929350505050565b600b54600160a060020a03163314610e4657600080fd5b6009805463ffffffff191663ffffffff92909216919091179055565b60008054819081908190819060a060020a900460ff1615610e985760405160e560020a62461bcd02815260040161047790612a85565b6000805460a060020a60ff02191660a060020a178155338152600160205260409020548690811115610ec957600080fd5b33600090815260016020526040902054879080820111610ee857600080fd5b3360009081526001602052604090206002015463ffffffff16421015610f0d57600080fd5b610f16886119d3565b92985090965094509250610f2a8884611a60565b610f3633898888611ccf565b600554610f439085611d7a565b600555604051339084156108fc029085906000818181858888f19350505050158015610f73573d6000803e3d6000fd5b50506000805460a060020a60ff02191690555060019695505050505050565b600e546000903490811015610fa657600080fd5b610faf83611830565b1515610fba57600080fd5b50600192915050565b600160a060020a031660009081526001602052604090205490565b600a54604080517f26c7a0de0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169182916326c7a0de9160048082019260209290919082900301818887803b15801561104057600080fd5b505af1158015611054573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061107891908101906124d2565b91505090565b600054600160a060020a031681565b600054600c54600b54600f54600854600954600160a060020a039586169594851694939093169263ffffffff16909192939495565b60008054600160a060020a031633146110da57600080fd5b6110e2610fde565b6040517ff39ba932000000000000000000000000000000000000000000000000000000008152909150600160a060020a0382169063f39ba9329061112e90339030908790600401612900565b602060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611180919081019061265e565b5050600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60065490565b60006111c16114dc565b905090565b60005b838110156112145761120b868686848181106111e157fe5b90506020020135600160a060020a031685858581811015156111ff57fe5b90506020020135611d8c565b506001016111c9565b505050505050565b600b54600090600160a060020a0316331461123657600080fd5b61123e610fde565b6040517f2a44fba5000000000000000000000000000000000000000000000000000000008152909150600160a060020a03821690632a44fba59061128a90339030908790600401612900565b602060405180830381600087803b1580156112a457600080fd5b505af11580156112b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112dc919081019061265e565b15156112e757600080fd5b50600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461132e57600080fd5b8260006113396114dc565b600160a060020a03166358c860f9836040518263ffffffff1660e060020a0281526004016113679190612898565b602060405180830381600087803b15801561138157600080fd5b505af1158015611395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113b9919081019061265e565b90508015156113c757600080fd5b6113d2858585611d8c565b15156113dd57600080fd5b5050505050565b600d5460009060a060020a900460ff1615610a805750600d54600160a060020a0316610a80565b600b54600090600160a060020a0316331461142557600080fd5b61142d610fde565b6040517f91f1df84000000000000000000000000000000000000000000000000000000008152909150600160a060020a038216906391f1df849061147990339030908790600401612928565b602060405180830381600087803b15801561149357600080fd5b505af11580156114a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114cb919081019061265e565b15156114d657600080fd5b50600f55565b600a546040805160e060020a6384987e830281529051600092600160a060020a0316916384987e8391600480830192602092919082900301818787803b15801561152557600080fd5b505af1158015611539573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111c191908101906124d2565b600a546040805160e060020a6384987e830281529051600092600160a060020a0316916384987e8391600480830192602092919082900301818787803b1580156115a657600080fd5b505af11580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115de91908101906124d2565b600160a060020a031663485ff697836040518263ffffffff1660e060020a02815260040161160c9190612898565b602060405180830381600087803b15801561162657600080fd5b505af115801561163a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061165e91908101906124d2565b92915050565b600061165e82611e3d565b600a546040805160e060020a6384987e830281529051600092600160a060020a0316916384987e8391600480830192602092919082900301818787803b1580156116b857600080fd5b505af11580156116cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116f091908101906124d2565b600160a060020a0316637ecf2c2f84846040518363ffffffff1660e060020a028152600401611720929190612a36565b602060405180830381600087803b15801561173a57600080fd5b505af115801561174e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a75919081019061265e565b600a546040805160e060020a6384987e830281529051600092600160a060020a0316916384987e8391600480830192602092919082900301818787803b1580156117bb57600080fd5b505af11580156117cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117f391908101906124d2565b600160a060020a0316635b28556d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561152557600080fd5b600d546000908190819081908190600160a060020a0316156118f257600d546040517fd88c271e000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063d88c271e90611895908990600401612898565b602060405180830381600087803b1580156118af57600080fd5b505af11580156118c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118e7919081019061265e565b15156118f257600080fd5b6118fa611e44565b9296509094509250905061190d81611ec5565b61191986828585612129565b6005546119269085612203565b60055550600195945050505050565b600061193f612220565b600160a060020a031663802af84087878787876040518663ffffffff1660e060020a028152600401611975959493929190612aa3565b602060405180830381600087803b15801561198f57600080fd5b505af11580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119c7919081019061265e565b90505b95945050505050565b60008060008060006127106119ed8760026006015461227f565b8115156119f657fe5b0490506064611a0a82600a6005015461227f565b811515611a1357fe5b04945084611a218286611d7a565b945084611a2e8884611d7a565b945084620f4240611a448760026004015461227f565b811515611a4d57fe5b939a929950909750909104945092505050565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152606093849360009384939291830182828015611aed5780601f10611ac257610100808354040283529160200191611aed565b820191906000526020600020905b815481529060010190602001808311611ad057829003601f168201915b505060038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152969a5091945092508401905082828015611b7e5780601f10611b5357610100808354040283529160200191611b7e565b820191906000526020600020905b815481529060010190602001808311611b6157829003601f168201915b5050600a54604080517f26c7a0de0000000000000000000000000000000000000000000000000000000081529051959850600160a060020a03909116965086946326c7a0de9450600480830194506020935090918290030181600087803b158015611be857600080fd5b505af1158015611bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c2091908101906124d2565b6040517f2ec57612000000000000000000000000000000000000000000000000000000008152909150600160a060020a03821690632ec5761290611c7290339030908b908b908b908b90600401612985565b602060405180830381600087803b158015611c8c57600080fd5b505af1158015611ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cc4919081019061265e565b151561121457600080fd5b600160a060020a038416600090815260016020526040902054611cf29084611d7a565b600160a060020a0380861660009081526001602052604080822093909355600c5490911681522054611d249083612203565b600c54600160a060020a0390811660009081526001602052604080822093909355600b5490911681522054611d599082612203565b600b54600160a060020a031660009081526001602052604090205550505050565b600082821115611d8657fe5b50900390565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000008152600090600160a060020a0384169063095ea7b390611dd690879086906004016129ec565b602060405180830381600087803b158015611df057600080fd5b505af1158015611e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e28919081019061265e565b1515611e3357600080fd5b5060019392505050565b6020015190565b6000806000806000611e60620f424034026002600501546122a0565b9450612710611e748660026006015461227f565b811515611e7d57fe5b049050846064611e9283600a6005015461227f565b811515611e9b57fe5b04945084611ea98387611d7a565b945084611eb68885611d7a565b92989197509550909350915050565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152606093849360009384939291830182828015611f525780601f10611f2757610100808354040283529160200191611f52565b820191906000526020600020905b815481529060010190602001808311611f3557829003601f168201915b505060038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152969a5091945092508401905082828015611fe35780601f10611fb857610100808354040283529160200191611fe3565b820191906000526020600020905b815481529060010190602001808311611fc657829003601f168201915b5050600a54604080517f26c7a0de0000000000000000000000000000000000000000000000000000000081529051959850600160a060020a03909116965086946326c7a0de9450600480830194506020935090918290030181600087803b15801561204d57600080fd5b505af1158015612061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061208591908101906124d2565b6040517f2cc4e4b6000000000000000000000000000000000000000000000000000000008152909150600160a060020a03821690632cc4e4b6906120d7903390309034908b908b908b90600401612985565b602060405180830381600087803b1580156120f157600080fd5b505af1158015612105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113d2919081019061265e565b600160a060020a03841660009081526001602052604090205461214c9084612203565b600160a060020a0380861660009081526001602052604080822093909355600c549091168152205461217e9083612203565b600c54600160a060020a0390811660009081526001602052604080822093909355600b54909116815220546121b39082612203565b600b54600160a060020a039081166000908152600160205260408082209390935560095496909116815220600201805463ffffffff191663ffffffff958616420190951694909417909355505050565b60008282018381108015906122185750828110155b1515610a7557fe5b600a54604080517fb74508d10000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163b74508d191600480830192602092919082900301818787803b15801561152557600080fd5b6000828202831580612218575082848281151561229857fe5b0414610a7557fe5b6000808083116122ac57fe5b82848115156122b757fe5b04905082848115156122c557fe5b068184020184141515610a7557fe5b6000610a758235612b5e565b6000610a758251612b5e565b600080601f830184136122fe57600080fd5b50813567ffffffffffffffff81111561231657600080fd5b60208301915083602082028301111561232e57600080fd5b9250929050565b6000601f8201831361234657600080fd5b813561235961235482612b11565b612aea565b81815260209384019390925082018360005b8381101561239757813586016123818882612456565b845250602092830192919091019060010161236b565b5050505092915050565b6000610a758235612b6a565b6000610a758251612b6a565b6000610a758235610a80565b600080601f830184136123d757600080fd5b50813567ffffffffffffffff8111156123ef57600080fd5b60208301915083600182028301111561232e57600080fd5b6000601f8201831361241857600080fd5b813561242661235482612b32565b9150808252602083016020830185838301111561244257600080fd5b61244d838284612ba8565b50505092915050565b60006020828403121561246857600080fd5b6124726020612aea565b9050813567ffffffffffffffff81111561248b57600080fd5b61249784828501612407565b82525092915050565b6000610a758235612b94565b6000602082840312156124be57600080fd5b60006124ca84846122d4565b949350505050565b6000602082840312156124e457600080fd5b60006124ca84846122e0565b60008060006060848603121561250557600080fd5b600061251186866122d4565b9350506020612522868287016122d4565b9250506040612533868287016123b9565b9150509250925092565b60008060008060006060868803121561255557600080fd5b600061256188886122d4565b955050602086013567ffffffffffffffff81111561257e57600080fd5b61258a888289016122ec565b9450945050604086013567ffffffffffffffff8111156125a957600080fd5b6125b5888289016122ec565b92509250509295509295909350565b600080604083850312156125d757600080fd5b60006125e385856122d4565b925050602083013567ffffffffffffffff81111561260057600080fd5b61260c85828601612335565b9150509250929050565b6000806040838503121561262957600080fd5b600061263585856122d4565b925050602083013567ffffffffffffffff81111561265257600080fd5b61260c85828601612456565b60006020828403121561267057600080fd5b60006124ca84846123ad565b6000806040838503121561268f57600080fd5b600061269b85856123a1565b925050602061260c858286016122d4565b6000806000604084860312156126c157600080fd5b60006126cd86866123b9565b935050602084013567ffffffffffffffff8111156126ea57600080fd5b6126f6868287016123c5565b92509250509250925092565b60006020828403121561271457600080fd5b60006124ca84846123b9565b60008060008060008060a0878903121561273957600080fd5b600061274589896123b9565b965050602061275689828a016123b9565b955050604061276789828a016123b9565b945050606061277889828a016123b9565b935050608087013567ffffffffffffffff81111561279557600080fd5b6127a189828a016123c5565b92509250509295509295509295565b6000602082840312156127c257600080fd5b60006124ca84846124a0565b6127d781612b5e565b82525050565b6127d781612b6a565b6127d781610a80565b6127d781612b6f565b600082845260208401935061280e838584612ba8565b61281783612be4565b9093019392505050565b600061282c82612b5a565b808452612840816020860160208601612bb4565b61284981612be4565b9093016020019392505050565b6127d781612b9d565b601281527f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000602082015260400190565b6127d781612b94565b6020810161165e82846127ce565b60c081016128b482896127ce565b6128c160208301886127ce565b6128ce60408301876127ce565b6128db60608301866127e6565b6128e860808301856127e6565b6128f560a083018461288f565b979650505050505050565b6060810161290e82866127ce565b61291b6020830185612856565b6124ca60408301846127ce565b6060810161293682866127ce565b6129436020830185612856565b6124ca60408301846127e6565b6080810161295e82876127ce565b61296b6020830186612856565b61297860408301856127e6565b6119ca60608301846127e6565b60c0810161299382896127ce565b6129a06020830188612856565b6129ad60408301876127e6565b6129ba60608301866127e6565b81810360808301526129cc8185612821565b905081810360a08301526129e08184612821565b98975050505050505050565b604081016129fa82856127ce565b610a7560208301846127e6565b6020810161165e82846127dd565b60408101612a2382866127e6565b81810360208301526119ca8184866127f8565b60408101612a4482856127ef565b610a7560208301846127ce565b60808082528101612a628187612821565b90508181036020830152612a768186612821565b905061297860408301856127e6565b6020808252810161165e8161285f565b6020810161165e82846127e6565b60a08101612ab182886127e6565b612abe60208301876127e6565b612acb60408301866127e6565b612ad860608301856127e6565b81810360808301526128f58184612821565b60405181810167ffffffffffffffff81118282101715612b0957600080fd5b604052919050565b600067ffffffffffffffff821115612b2857600080fd5b5060209081020190565b600067ffffffffffffffff821115612b4957600080fd5b506020601f91909101601f19160190565b5190565b600160a060020a031690565b151590565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b63ffffffff1690565b600061165e82612b5e565b82818337506000910152565b60005b83811015612bcf578181015183820152602001612bb7565b83811115612bde576000848401525b50505050565b601f01601f1916905600a265627a7a72305820109cfb4d5fe077a5cf268e1d5a03cb0c80b221976a8553b2f9a825cad1326bdd6c6578706572696d656e74616cf5003700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f05552f24850e75793d38c2bd0cbd249a9ff4000000000000000000000000307b265c6ab333b63e739936722cc8e62d78cc19000000000000000000000000000000000000000000000000000000000000000a4e756d626572204f6e650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034f4e450000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061012f5763ffffffff60e060020a60003504166301e6e549811461013d578063096a8ab71461015d5780630e91206b1461017d5780631118069c146101b357806313af4035146101d35780631626ba7e146101f357806318160ddd146102135780632fbbde2d1461023557806330958a981461023d5780633bc5de301461025d57806354bdbd4d1461028257806354ea1538146102a25780636854f668146102c257806370a08231146102d5578063837929b6146102f55780638da5cb5b146103175780638f7a844b1461032c5780639245290d146103535780639489fa8414610373578063c112c71314610388578063c67f72e11461039d578063c8c3b926146103bd578063da46098c146103dd578063e4e985a8146103fd578063f6a3325314610412575b34151561013b57600080fd5b005b34801561014957600080fd5b5061013b6101583660046125c4565b610432565b34801561016957600080fd5b5061013b610178366004612702565b610614565b34801561018957600080fd5b5061019d610198366004612616565b6106f1565b6040516101aa9190612a07565b60405180910390f35b3480156101bf57600080fd5b5061013b6101ce36600461267c565b610900565b3480156101df57600080fd5b5061013b6101ee3660046124ac565b61095d565b3480156101ff57600080fd5b5061019d61020e3660046126ac565b6109e4565b34801561021f57600080fd5b50610228610a7c565b6040516101aa9190612a95565b61019d610a83565b34801561024957600080fd5b5061013b610258366004612720565b610ab3565b34801561026957600080fd5b50610272610cf8565b6040516101aa9493929190612a51565b34801561028e57600080fd5b5061013b61029d3660046127b0565b610e2f565b3480156102ae57600080fd5b5061019d6102bd366004612702565b610e62565b61019d6102d03660046124ac565b610f92565b3480156102e157600080fd5b506102286102f03660046124ac565b610fc3565b34801561030157600080fd5b5061030a610fde565b6040516101aa9190612898565b34801561032357600080fd5b5061030a61107e565b34801561033857600080fd5b5061034161108d565b6040516101aa969594939291906128a6565b34801561035f57600080fd5b5061013b61036e3660046124ac565b6110c2565b34801561037f57600080fd5b506102286111b1565b34801561039457600080fd5b5061030a6111b7565b3480156103a957600080fd5b5061013b6103b836600461253d565b6111c6565b3480156103c957600080fd5b5061013b6103d83660046124ac565b61121c565b3480156103e957600080fd5b5061013b6103f83660046124f0565b611317565b34801561040957600080fd5b5061030a6113e4565b34801561041e57600080fd5b5061013b61042d366004612702565b61140b565b60008054600160a060020a0316331461044a57600080fd5b60005460a060020a900460ff16156104805760405160e560020a62461bcd02815260040161047790612a85565b60405180910390fd5b6000805460a060020a60ff02191660a060020a1781558390806104a16114dc565b600160a060020a0316639aa4d0a0846040518263ffffffff1660e060020a0281526004016104cf9190612898565b602060405180830381600087803b1580156104e957600080fd5b505af11580156104fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610521919081019061265e565b915061052b6114dc565b600160a060020a031663f3229cda846040518263ffffffff1660e060020a0281526004016105599190612898565b602060405180830381600087803b15801561057357600080fd5b505af1158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105ab919081019061265e565b905080806105b65750815b15156105c157600080fd5b600093505b84518410156105fc576105f08686868151811015156105e157fe5b906020019060200201516106f1565b506001909301926105c6565b50506000805460a060020a60ff021916905550505050565b60008054600160a060020a0316331461062c57600080fd5b606482111561063a57600080fd5b610642610fde565b6040517fd5aaa73a000000000000000000000000000000000000000000000000000000008152909150600160a060020a0382169063d5aaa73a9061068e90339030908790600401612928565b602060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106e0919081019061265e565b15156106eb57600080fd5b50600855565b60008054819060609081908390600160a060020a0316331461071257600080fd5b60005460a060020a900460ff161561073f5760405160e560020a62461bcd02815260040161047790612a85565b6000805460a060020a60ff02191660a060020a1781558790806107606114dc565b600160a060020a0316639aa4d0a0846040518263ffffffff1660e060020a02815260040161078e9190612898565b602060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107e0919081019061265e565b91506107ea6114dc565b600160a060020a031663f3229cda846040518263ffffffff1660e060020a0281526004016108189190612898565b602060405180830381600087803b15801561083257600080fd5b505af1158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061086a919081019061265e565b905080806108755750815b151561088057600080fd5b6108898a61155d565b895190975095506108a261089c87611664565b8861166f565b15156108ad57600080fd5b60019350602060008751602089018a6113885a03f460005195508015945084600181146108d9576108de565b600080fd5b50506000805460a060020a60ff02191690555060019998505050505050505050565b600054600160a060020a0316331461091757600080fd5b600d805460a060020a60ff02191660a060020a931515939093029290921773ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116179055565b600054600160a060020a0316331461097457600080fd5b600160a060020a038116151561098957600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691821780845560405192939116917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b23649190a350565b60006109ee611772565b600160a060020a0316631626ba7e8585856040518463ffffffff1660e060020a028152600401610a2093929190612a15565b602060405180830381600087803b158015610a3a57600080fd5b505af1158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a72919081019061265e565b90505b9392505050565b6005545b90565b600e546000903490811015610a9757600080fd5b610aa033611830565b1515610aab57600080fd5b600191505090565b6000805460a060020a900460ff1615610ae15760405160e560020a62461bcd02815260040161047790612a85565b6000805460a060020a60ff02191660a060020a179055600a546040517f2330f247000000000000000000000000000000000000000000000000000000008152600160a060020a03909116908190632330f24790610b42903390600401612898565b602060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b94919081019061265e565b80610ba95750600054600160a060020a031633145b1515610bb457600080fd5b878780821115610bc357600080fd5b6006548a908a90600a900482111580610be15750600754600a028110155b15610beb57610cda565b610c288c8c8c8c8c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843750611935945050505050565b1515610c3357600080fd5b610c3b610fde565b955085600160a060020a031663554a781833308f8f6040518563ffffffff1660e060020a028152600401610c729493929190612950565b602060405180830381600087803b158015610c8c57600080fd5b505af1158015610ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cc4919081019061265e565b1515610ccf57600080fd5b60068c905560078b90555b50506000805460a060020a60ff021916905550505050505050505050565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152606093849360009384939291830182828015610d855780601f10610d5a57610100808354040283529160200191610d85565b820191906000526020600020905b815481529060010190602001808311610d6857829003601f168201915b505060038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152969a5091945092508401905082828015610e165780601f10610deb57610100808354040283529160200191610e16565b820191906000526020600020905b815481529060010190602001808311610df957829003601f168201915b5050600654600754989994989097509550929350505050565b600b54600160a060020a03163314610e4657600080fd5b6009805463ffffffff191663ffffffff92909216919091179055565b60008054819081908190819060a060020a900460ff1615610e985760405160e560020a62461bcd02815260040161047790612a85565b6000805460a060020a60ff02191660a060020a178155338152600160205260409020548690811115610ec957600080fd5b33600090815260016020526040902054879080820111610ee857600080fd5b3360009081526001602052604090206002015463ffffffff16421015610f0d57600080fd5b610f16886119d3565b92985090965094509250610f2a8884611a60565b610f3633898888611ccf565b600554610f439085611d7a565b600555604051339084156108fc029085906000818181858888f19350505050158015610f73573d6000803e3d6000fd5b50506000805460a060020a60ff02191690555060019695505050505050565b600e546000903490811015610fa657600080fd5b610faf83611830565b1515610fba57600080fd5b50600192915050565b600160a060020a031660009081526001602052604090205490565b600a54604080517f26c7a0de0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169182916326c7a0de9160048082019260209290919082900301818887803b15801561104057600080fd5b505af1158015611054573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061107891908101906124d2565b91505090565b600054600160a060020a031681565b600054600c54600b54600f54600854600954600160a060020a039586169594851694939093169263ffffffff16909192939495565b60008054600160a060020a031633146110da57600080fd5b6110e2610fde565b6040517ff39ba932000000000000000000000000000000000000000000000000000000008152909150600160a060020a0382169063f39ba9329061112e90339030908790600401612900565b602060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611180919081019061265e565b5050600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60065490565b60006111c16114dc565b905090565b60005b838110156112145761120b868686848181106111e157fe5b90506020020135600160a060020a031685858581811015156111ff57fe5b90506020020135611d8c565b506001016111c9565b505050505050565b600b54600090600160a060020a0316331461123657600080fd5b61123e610fde565b6040517f2a44fba5000000000000000000000000000000000000000000000000000000008152909150600160a060020a03821690632a44fba59061128a90339030908790600401612900565b602060405180830381600087803b1580156112a457600080fd5b505af11580156112b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112dc919081019061265e565b15156112e757600080fd5b50600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461132e57600080fd5b8260006113396114dc565b600160a060020a03166358c860f9836040518263ffffffff1660e060020a0281526004016113679190612898565b602060405180830381600087803b15801561138157600080fd5b505af1158015611395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113b9919081019061265e565b90508015156113c757600080fd5b6113d2858585611d8c565b15156113dd57600080fd5b5050505050565b600d5460009060a060020a900460ff1615610a805750600d54600160a060020a0316610a80565b600b54600090600160a060020a0316331461142557600080fd5b61142d610fde565b6040517f91f1df84000000000000000000000000000000000000000000000000000000008152909150600160a060020a038216906391f1df849061147990339030908790600401612928565b602060405180830381600087803b15801561149357600080fd5b505af11580156114a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114cb919081019061265e565b15156114d657600080fd5b50600f55565b600a546040805160e060020a6384987e830281529051600092600160a060020a0316916384987e8391600480830192602092919082900301818787803b15801561152557600080fd5b505af1158015611539573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111c191908101906124d2565b600a546040805160e060020a6384987e830281529051600092600160a060020a0316916384987e8391600480830192602092919082900301818787803b1580156115a657600080fd5b505af11580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115de91908101906124d2565b600160a060020a031663485ff697836040518263ffffffff1660e060020a02815260040161160c9190612898565b602060405180830381600087803b15801561162657600080fd5b505af115801561163a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061165e91908101906124d2565b92915050565b600061165e82611e3d565b600a546040805160e060020a6384987e830281529051600092600160a060020a0316916384987e8391600480830192602092919082900301818787803b1580156116b857600080fd5b505af11580156116cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116f091908101906124d2565b600160a060020a0316637ecf2c2f84846040518363ffffffff1660e060020a028152600401611720929190612a36565b602060405180830381600087803b15801561173a57600080fd5b505af115801561174e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a75919081019061265e565b600a546040805160e060020a6384987e830281529051600092600160a060020a0316916384987e8391600480830192602092919082900301818787803b1580156117bb57600080fd5b505af11580156117cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117f391908101906124d2565b600160a060020a0316635b28556d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561152557600080fd5b600d546000908190819081908190600160a060020a0316156118f257600d546040517fd88c271e000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063d88c271e90611895908990600401612898565b602060405180830381600087803b1580156118af57600080fd5b505af11580156118c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118e7919081019061265e565b15156118f257600080fd5b6118fa611e44565b9296509094509250905061190d81611ec5565b61191986828585612129565b6005546119269085612203565b60055550600195945050505050565b600061193f612220565b600160a060020a031663802af84087878787876040518663ffffffff1660e060020a028152600401611975959493929190612aa3565b602060405180830381600087803b15801561198f57600080fd5b505af11580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119c7919081019061265e565b90505b95945050505050565b60008060008060006127106119ed8760026006015461227f565b8115156119f657fe5b0490506064611a0a82600a6005015461227f565b811515611a1357fe5b04945084611a218286611d7a565b945084611a2e8884611d7a565b945084620f4240611a448760026004015461227f565b811515611a4d57fe5b939a929950909750909104945092505050565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152606093849360009384939291830182828015611aed5780601f10611ac257610100808354040283529160200191611aed565b820191906000526020600020905b815481529060010190602001808311611ad057829003601f168201915b505060038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152969a5091945092508401905082828015611b7e5780601f10611b5357610100808354040283529160200191611b7e565b820191906000526020600020905b815481529060010190602001808311611b6157829003601f168201915b5050600a54604080517f26c7a0de0000000000000000000000000000000000000000000000000000000081529051959850600160a060020a03909116965086946326c7a0de9450600480830194506020935090918290030181600087803b158015611be857600080fd5b505af1158015611bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c2091908101906124d2565b6040517f2ec57612000000000000000000000000000000000000000000000000000000008152909150600160a060020a03821690632ec5761290611c7290339030908b908b908b908b90600401612985565b602060405180830381600087803b158015611c8c57600080fd5b505af1158015611ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cc4919081019061265e565b151561121457600080fd5b600160a060020a038416600090815260016020526040902054611cf29084611d7a565b600160a060020a0380861660009081526001602052604080822093909355600c5490911681522054611d249083612203565b600c54600160a060020a0390811660009081526001602052604080822093909355600b5490911681522054611d599082612203565b600b54600160a060020a031660009081526001602052604090205550505050565b600082821115611d8657fe5b50900390565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000008152600090600160a060020a0384169063095ea7b390611dd690879086906004016129ec565b602060405180830381600087803b158015611df057600080fd5b505af1158015611e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e28919081019061265e565b1515611e3357600080fd5b5060019392505050565b6020015190565b6000806000806000611e60620f424034026002600501546122a0565b9450612710611e748660026006015461227f565b811515611e7d57fe5b049050846064611e9283600a6005015461227f565b811515611e9b57fe5b04945084611ea98387611d7a565b945084611eb68885611d7a565b92989197509550909350915050565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152606093849360009384939291830182828015611f525780601f10611f2757610100808354040283529160200191611f52565b820191906000526020600020905b815481529060010190602001808311611f3557829003601f168201915b505060038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152969a5091945092508401905082828015611fe35780601f10611fb857610100808354040283529160200191611fe3565b820191906000526020600020905b815481529060010190602001808311611fc657829003601f168201915b5050600a54604080517f26c7a0de0000000000000000000000000000000000000000000000000000000081529051959850600160a060020a03909116965086946326c7a0de9450600480830194506020935090918290030181600087803b15801561204d57600080fd5b505af1158015612061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061208591908101906124d2565b6040517f2cc4e4b6000000000000000000000000000000000000000000000000000000008152909150600160a060020a03821690632cc4e4b6906120d7903390309034908b908b908b90600401612985565b602060405180830381600087803b1580156120f157600080fd5b505af1158015612105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113d2919081019061265e565b600160a060020a03841660009081526001602052604090205461214c9084612203565b600160a060020a0380861660009081526001602052604080822093909355600c549091168152205461217e9083612203565b600c54600160a060020a0390811660009081526001602052604080822093909355600b54909116815220546121b39082612203565b600b54600160a060020a039081166000908152600160205260408082209390935560095496909116815220600201805463ffffffff191663ffffffff958616420190951694909417909355505050565b60008282018381108015906122185750828110155b1515610a7557fe5b600a54604080517fb74508d10000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163b74508d191600480830192602092919082900301818787803b15801561152557600080fd5b6000828202831580612218575082848281151561229857fe5b0414610a7557fe5b6000808083116122ac57fe5b82848115156122b757fe5b04905082848115156122c557fe5b068184020184141515610a7557fe5b6000610a758235612b5e565b6000610a758251612b5e565b600080601f830184136122fe57600080fd5b50813567ffffffffffffffff81111561231657600080fd5b60208301915083602082028301111561232e57600080fd5b9250929050565b6000601f8201831361234657600080fd5b813561235961235482612b11565b612aea565b81815260209384019390925082018360005b8381101561239757813586016123818882612456565b845250602092830192919091019060010161236b565b5050505092915050565b6000610a758235612b6a565b6000610a758251612b6a565b6000610a758235610a80565b600080601f830184136123d757600080fd5b50813567ffffffffffffffff8111156123ef57600080fd5b60208301915083600182028301111561232e57600080fd5b6000601f8201831361241857600080fd5b813561242661235482612b32565b9150808252602083016020830185838301111561244257600080fd5b61244d838284612ba8565b50505092915050565b60006020828403121561246857600080fd5b6124726020612aea565b9050813567ffffffffffffffff81111561248b57600080fd5b61249784828501612407565b82525092915050565b6000610a758235612b94565b6000602082840312156124be57600080fd5b60006124ca84846122d4565b949350505050565b6000602082840312156124e457600080fd5b60006124ca84846122e0565b60008060006060848603121561250557600080fd5b600061251186866122d4565b9350506020612522868287016122d4565b9250506040612533868287016123b9565b9150509250925092565b60008060008060006060868803121561255557600080fd5b600061256188886122d4565b955050602086013567ffffffffffffffff81111561257e57600080fd5b61258a888289016122ec565b9450945050604086013567ffffffffffffffff8111156125a957600080fd5b6125b5888289016122ec565b92509250509295509295909350565b600080604083850312156125d757600080fd5b60006125e385856122d4565b925050602083013567ffffffffffffffff81111561260057600080fd5b61260c85828601612335565b9150509250929050565b6000806040838503121561262957600080fd5b600061263585856122d4565b925050602083013567ffffffffffffffff81111561265257600080fd5b61260c85828601612456565b60006020828403121561267057600080fd5b60006124ca84846123ad565b6000806040838503121561268f57600080fd5b600061269b85856123a1565b925050602061260c858286016122d4565b6000806000604084860312156126c157600080fd5b60006126cd86866123b9565b935050602084013567ffffffffffffffff8111156126ea57600080fd5b6126f6868287016123c5565b92509250509250925092565b60006020828403121561271457600080fd5b60006124ca84846123b9565b60008060008060008060a0878903121561273957600080fd5b600061274589896123b9565b965050602061275689828a016123b9565b955050604061276789828a016123b9565b945050606061277889828a016123b9565b935050608087013567ffffffffffffffff81111561279557600080fd5b6127a189828a016123c5565b92509250509295509295509295565b6000602082840312156127c257600080fd5b60006124ca84846124a0565b6127d781612b5e565b82525050565b6127d781612b6a565b6127d781610a80565b6127d781612b6f565b600082845260208401935061280e838584612ba8565b61281783612be4565b9093019392505050565b600061282c82612b5a565b808452612840816020860160208601612bb4565b61284981612be4565b9093016020019392505050565b6127d781612b9d565b601281527f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000602082015260400190565b6127d781612b94565b6020810161165e82846127ce565b60c081016128b482896127ce565b6128c160208301886127ce565b6128ce60408301876127ce565b6128db60608301866127e6565b6128e860808301856127e6565b6128f560a083018461288f565b979650505050505050565b6060810161290e82866127ce565b61291b6020830185612856565b6124ca60408301846127ce565b6060810161293682866127ce565b6129436020830185612856565b6124ca60408301846127e6565b6080810161295e82876127ce565b61296b6020830186612856565b61297860408301856127e6565b6119ca60608301846127e6565b60c0810161299382896127ce565b6129a06020830188612856565b6129ad60408301876127e6565b6129ba60608301866127e6565b81810360808301526129cc8185612821565b905081810360a08301526129e08184612821565b98975050505050505050565b604081016129fa82856127ce565b610a7560208301846127e6565b6020810161165e82846127dd565b60408101612a2382866127e6565b81810360208301526119ca8184866127f8565b60408101612a4482856127ef565b610a7560208301846127ce565b60808082528101612a628187612821565b90508181036020830152612a768186612821565b905061297860408301856127e6565b6020808252810161165e8161285f565b6020810161165e82846127e6565b60a08101612ab182886127e6565b612abe60208301876127e6565b612acb60408301866127e6565b612ad860608301856127e6565b81810360808301526128f58184612821565b60405181810167ffffffffffffffff81118282101715612b0957600080fd5b604052919050565b600067ffffffffffffffff821115612b2857600080fd5b5060209081020190565b600067ffffffffffffffff821115612b4957600080fd5b506020601f91909101601f19160190565b5190565b600160a060020a031690565b151590565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b63ffffffff1690565b600061165e82612b5e565b82818337506000910152565b60005b83811015612bcf578181015183820152602001612bb7565b83811115612bde576000848401525b50505050565b601f01601f1916905600a265627a7a72305820109cfb4d5fe077a5cf268e1d5a03cb0c80b221976a8553b2f9a825cad1326bdd6c6578706572696d656e74616cf50037
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f05552f24850e75793d38c2bd0cbd249a9ff4000000000000000000000000307b265c6ab333b63e739936722cc8e62d78cc19000000000000000000000000000000000000000000000000000000000000000a4e756d626572204f6e650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034f4e450000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _dragoName (string): Number One
Arg [1] : _dragoSymbol (string): ONE
Arg [2] : _dragoId (uint256): 0
Arg [3] : _owner (address): 0x000F05552f24850E75793d38C2bD0CBd249A9ff4
Arg [4] : _authority (address): 0x307B265c6Ab333b63e739936722cc8E62D78Cc19
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 000000000000000000000000000f05552f24850e75793d38c2bd0cbd249a9ff4
Arg [4] : 000000000000000000000000307b265c6ab333b63e739936722cc8e62d78cc19
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [6] : 4e756d626572204f6e6500000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4f4e450000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
18282:24336:0:-;;;;;;;;;-1:-1:-1;;;18282:24336:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21938:9;:14;;21930:23;;;;;;18282:24336;29734:372;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29734:372:0;;;;;;;;;25250:369;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25250:369:0;;;;;;;;;28314:1162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28314:1162:0;;;;;;;;;;;;;;;;;;;;;;;;;26700:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26700:210:0;;;;;;;;;16683:156;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16683:156:0;;;;;;;;;32799:282;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32799:282:0;;;;;;;;;33443:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33443:120:0;;;;;;;;;;;;22073:203;;;;23873:838;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23873:838:0;;;;;;;;;30990:340;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30990:340:0;;;;;;;;;;;;;;;26557:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26557:135:0;;;;;;;;;22850:651;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22850:651:0;;;;;;;;;22464:223;;;;;;;;;;30307:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30307:145:0;;;;;;;;;30563:190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30563:190:0;;;;;;;;;;;;16499:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16499:20:0;;;;31922:490;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31922:490:0;;;;;;;;;;;;;;;;;25749:282;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25749:282:0;;;;;;;;;31431:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31431:130:0;;;;33187:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33187:141:0;;;;27805:322;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27805:322:0;;;;;;;;;26158:270;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26158:270:0;;;;;;;;;27209:289;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27209:289:0;;;;;;;;;32420:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32420:181:0;;;;24851:252;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24851:252:0;;;;;;;;;29734:372;29967:9;16649:5;;-1:-1:-1;;;;;16649:5:0;16635:10;:19;16627:28;;;;;;16218:6;;-1:-1:-1;;;16218:6:0;;;;16217:7;16195:75;;;;-1:-1:-1;;;;;16195:75:0;;;;;;;;;;;;;;;;;16327:6;:13;;-1:-1:-1;;;;;;16327:13:0;-1:-1:-1;;;16327:13:0;;;29935:9;;16327:6;19833:23;:21;:23::i;:::-;-1:-1:-1;;;;;19814:79:0;;19894:7;19814:88;;;;;-1:-1:-1;;;19814:88:0;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19814:88:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19814:88:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19814:88:0;;;;;;;;;19790:112;;19955:23;:21;:23::i;:::-;-1:-1:-1;;;;;19936:78:0;;20015:7;19936:87;;;;;-1:-1:-1;;;19936:87:0;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19936:87:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19936:87:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19936:87:0;;;;;;;;;19913:110;;20042:15;:35;;;;20061:16;20042:35;20034:44;;;;;;;;29979:1;29967:13;;29962:137;29986:12;:19;29982:1;:23;29962:137;;;30032:45;30050:9;30061:12;30074:1;30061:15;;;;;;;;;;;;;;;;;;30032:17;:45::i;:::-;30031:46;30007:3;;;;;29962:137;;;-1:-1:-1;;16455:5:0;16446:14;;-1:-1:-1;;;;;;16446:14:0;;;-1:-1:-1;;;;29734:372:0:o;25250:369::-;25428:20;16649:5;;-1:-1:-1;;;;;16649:5:0;16635:10;:19;16627:28;;;;;;25382:3;25363:22;;;25355:31;;;;;;25465:18;:16;:18::i;:::-;25503:59;;;;;25428:56;;-1:-1:-1;;;;;;25503:24:0;;;;;:59;;25528:10;;25540:4;;25546:15;;25503:59;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25503:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25503:59:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25503:59:0;;;;;;;;;25495:68;;;;;;;;-1:-1:-1;25574:19:0;:37;25250:369::o;28314:1162::-;28536:12;16649:5;;28536:12;;28624:28;;;;28536:12;;-1:-1:-1;;;;;16649:5:0;16635:10;:19;16627:28;;;;;;16218:6;;-1:-1:-1;;;16218:6:0;;;;16217:7;16195:75;;;;-1:-1:-1;;;;;16195:75:0;;;;;;;;;16327:6;:13;;-1:-1:-1;;;;;;16327:13:0;-1:-1:-1;;;16327:13:0;;;28507:9;;16327:6;19833:23;:21;:23::i;:::-;-1:-1:-1;;;;;19814:79:0;;19894:7;19814:88;;;;;-1:-1:-1;;;19814:88:0;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19814:88:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19814:88:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19814:88:0;;;;;;;;;19790:112;;19955:23;:21;:23::i;:::-;-1:-1:-1;;;;;19936:78:0;;20015:7;19936:87;;;;;-1:-1:-1;;;19936:87:0;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19936:87:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19936:87:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19936:87:0;;;;;;;;;19913:110;;20042:15;:35;;;;20061:16;20042:35;20034:44;;;;;;;;28584:29;28603:9;28584:18;:29::i;:::-;28655:25;;28566:47;;-1:-1:-1;28655:25:0;-1:-1:-1;28713:110:0;28755:27;28655:25;28755:10;:27::i;:::-;28801:7;28713:23;:110::i;:::-;28691:143;;;;;;;;28893:4;28879:18;;29149:2;29129:1;29094:15;29088:22;29064:4;29047:15;29043:26;29017:7;28993:4;28988:3;28984:14;28953:199;29234:1;29228:8;29216:20;;29267:9;29260:17;29250:27;;29300:6;29325:1;29320:102;;;;29293:129;;29320:102;29405:1;29402;29395:12;29293:129;-1:-1:-1;;16455:5:0;16446:14;;-1:-1:-1;;;;;;16446:14:0;;;-1:-1:-1;29463:4:0;;28314:1162;-1:-1:-1;;;;;;;;;28314:1162:0:o;26700:210::-;16649:5;;-1:-1:-1;;;;;16649:5:0;16635:10;:19;16627:28;;;;;;26830:17;:29;;-1:-1:-1;;;;;;26830:29:0;-1:-1:-1;;;26830:29:0;;;;;;;;;;;-1:-1:-1;;26870:32:0;-1:-1:-1;;;;;26870:32:0;;;;;;;26700:210::o;16683:156::-;16649:5;;-1:-1:-1;;;;;16649:5:0;16635:10;:19;16627:28;;;;;;-1:-1:-1;;;;;16751:18:0;;;;16743:27;;;;;;16781:5;:12;;-1:-1:-1;;16781:12:0;-1:-1:-1;;;;;16781:12:0;;;;;;;;;16810:21;;16781:12;;16819:5;;;16810:21;;16781:5;16810:21;16683:156;:::o;32799:282::-;32931:12;32983:16;:14;:16::i;:::-;-1:-1:-1;;;;;32971:60:0;;33032:4;33038:9;;32971:77;;;;;-1:-1:-1;;;32971:77:0;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32971:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32971:77:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;32971:77:0;;;;;;;;;32961:87;-1:-1:-1;32799:282:0;;;;;;:::o;33443:120::-;33539:16;;33443:120;;:::o;22073:203::-;20384:14;;22179:12;;22150:9;;20374:24;;;20365:34;;;;;;22217:28;22234:10;22217:16;:28::i;:::-;22209:37;;;;;;;;22264:4;22257:11;;22073:203;;:::o;23873:838::-;24480:20;16218:6;;-1:-1:-1;;;16218:6:0;;;;16217:7;16195:75;;;;-1:-1:-1;;;;;16195:75:0;;;;;;;;;16327:6;:13;;-1:-1:-1;;;;;;16327:13:0;-1:-1:-1;;;16327:13:0;;;19608:5;:15;19643:28;;;;;-1:-1:-1;;;;;19608:15:0;;;;;;19643:16;;:28;;19660:10;;19643:28;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19643:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19643:28:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19643:28:0;;;;;;;;;:51;;;-1:-1:-1;19689:5:0;;-1:-1:-1;;;;;19689:5:0;19675:10;:19;19643:51;19635:60;;;;;;;;24153:13;24168:12;20932:23;;;;20924:32;;;;;;21075:14;;24205:13;;24220:12;;21092:2;;21075:19;21061:10;:33;;:68;;;-1:-1:-1;21111:13:0;;21127:2;21111:18;21098:31;;;21061:68;21057:81;;;21131:7;;21057:81;24272:186;24301:13;24333:12;24364:25;24408:5;24432:11;;24272:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24272:10:0;;-1:-1:-1;;;;;24272:186:0:i;:::-;24250:219;;;;;;;;24517:18;:16;:18::i;:::-;24480:56;;24555:6;-1:-1:-1;;;;;24555:20:0;;24576:10;24588:4;24594:13;24609:12;24555:67;;;;;-1:-1:-1;;;24555:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24555:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24555:67:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24555:67:0;;;;;;;;;24547:76;;;;;;;;24634:14;:30;;;24675:13;:28;;;20967:1;-1:-1:-1;;16455:5:0;16446:14;;-1:-1:-1;;;;;;16446:14:0;;;-1:-1:-1;;;;;;;;;;23873:838:0:o;30990:340::-;31210:4;31203:16;;;;;;;;;;;;-1:-1:-1;;31203:16:0;;;;;;;;;;;;;;;;;;;;;;;;;31073:11;;;;-1:-1:-1;;;;31203:16:0;31210:4;31203:16;;31210:4;31203:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31239:11:0;31230:20;;;;;;;31239:4;-1:-1:-1;;31230:20:0;31239:11;31230:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31203:16;;-1:-1:-1;31239:11:0;;-1:-1:-1;31230:20:0;-1:-1:-1;31230:20:0;;;-1:-1:-1;31239:11:0;31230:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31273:14:0;;31309:13;;30990:340;;31230:20;;31273:14;;-1:-1:-1;31309:13:0;-1:-1:-1;30990:340:0;;-1:-1:-1;;;;30990:340:0:o;26557:135::-;19495:14;;-1:-1:-1;;;;;19495:14:0;19481:10;:28;19473:37;;;;;;26657:14;:27;;-1:-1:-1;;26657:27:0;;;;;;;;;;;;26557:135::o;22850:651::-;23032:12;16218:6;;23032:12;;;;;;;;-1:-1:-1;;;16218:6:0;;;;16217:7;16195:75;;;;-1:-1:-1;;;;;16195:75:0;;;;;;;;;16327:6;:13;;-1:-1:-1;;;;;;16327:13:0;-1:-1:-1;;;16327:13:0;;;20491:10;20482:20;;16336:4;20482:20;;;;;:28;22945:7;;20482:39;-1:-1:-1;20482:39:0;20474:48;;;;;;20660:10;20651:20;;;;:8;:20;;;;;:28;22978:7;;20610:38;;;:69;20602:78;;;;;;20784:10;20775:20;;;;:8;:20;;;;;:39;;;;;20756:15;:58;;20748:67;;;;;;23225:23;23240:7;23225:14;:23::i;:::-;23176:72;;-1:-1:-1;23176:72:0;;-1:-1:-1;23176:72:0;-1:-1:-1;23176:72:0;-1:-1:-1;23259:31:0;23270:7;23176:72;23259:10;:31::i;:::-;23301:62;23320:10;23332:7;23341:8;23351:11;23301:18;:62::i;:::-;23401:16;;23393:36;;23419:9;23393:7;:36::i;:::-;23374:16;:55;23440:31;;:10;;:31;;;;;23460:10;;23440:31;;;;23460:10;23440;:31;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;16455:5:0;16446:14;;-1:-1:-1;;;;;;16446:14:0;;;-1:-1:-1;23489:4:0;;22850:651;-1:-1:-1;;;;;;22850:651:0:o;22464:223::-;20384:14;;22593:12;;22564:9;;20374:24;;;20365:34;;;;;;22631:25;22648:7;22631:16;:25::i;:::-;22623:34;;;;;;;;-1:-1:-1;22675:4:0;;22464:223;-1:-1:-1;;22464:223:0:o;30307:145::-;-1:-1:-1;;;;;30422:14:0;30390:7;30422:14;;;:8;:14;;;;;:22;;30307:145::o;30563:190::-;30688:5;:15;30722:23;;;;;;;;30636:7;;-1:-1:-1;;;;;30688:15:0;;;;30722:21;;:23;;;;;;;;;;;;;;;30636:7;30688:15;30722:23;;;5:2:-1;;;;30:1;27;20:12;5:2;30722:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30722:23:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30722:23:0;;;;;;;;;30715:30;;30563:190;;:::o;16499:20::-;;;-1:-1:-1;;;;;16499:20:0;;:::o;31922:490::-;32010:7;32237:5;32257:18;;32290:14;;32319:11;;32345:19;;32379:14;;-1:-1:-1;;;;;32237:5:0;;;;32257:18;;;;32290:14;;;;;32379;;31922:490;;;;;;:::o;25749:282::-;25853:20;16649:5;;-1:-1:-1;;;;;16649:5:0;16635:10;:19;16627:28;;;;;;25890:18;:16;:18::i;:::-;25920:58;;;;;25853:56;;-1:-1:-1;;;;;;25920:25:0;;;;;:58;;25946:10;;25958:4;;25964:13;;25920:58;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25920:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25920:58:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25920:58:0;;;;;;;;;-1:-1:-1;;25989:18:0;:34;;-1:-1:-1;;25989:34:0;-1:-1:-1;;;;;25989:34:0;;;;;;;;;;25749:282::o;31431:130::-;31539:14;;31431:130;:::o;33187:141::-;33265:7;33297:23;:21;:23::i;:::-;33290:30;;33187:141;:::o;27805:322::-;27971:9;27966:154;27986:18;;;27966:154;;;28031:67;28053:19;28074:7;;28082:1;28074:10;;;;;;;;;;;;;-1:-1:-1;;;;;28074:10:0;28086:8;;28095:1;28086:11;;;;;;;;;;;;;;;28031:21;:67::i;:::-;28030:68;28006:3;;27966:154;;;27805:322;;;;;;:::o;26158:270::-;19495:14;;26257:20;;-1:-1:-1;;;;;19495:14:0;19481:10;:28;19473:37;;;;;;26294:18;:16;:18::i;:::-;26332:50;;;;;26257:56;;-1:-1:-1;;;;;;26332:21:0;;;;;:50;;26354:10;;26366:4;;26372:9;;26332:50;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26332:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26332:50:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26332:50:0;;;;;;;;;26324:59;;;;;;;;-1:-1:-1;26394:14:0;:26;;-1:-1:-1;;26394:26:0;-1:-1:-1;;;;;26394:26:0;;;;;;;;;;26158:270::o;27209:289::-;16649:5;;-1:-1:-1;;;;;16649:5:0;16635:10;:19;16627:28;;;;;;27385:19;20160:13;20195:23;:21;:23::i;:::-;-1:-1:-1;;;;;20176:76:0;;20253:6;20176:84;;;;;-1:-1:-1;;;20176:84:0;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20176:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20176:84:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20176:84:0;;;;;;;;;20160:100;;20279:8;20271:17;;;;;;;;27430:59;27452:19;27473:6;27481:7;27430:21;:59::i;:::-;27422:68;;;;;;;;16666:1;;27209:289;;;:::o;32420:181::-;32524:17;;32496:7;;-1:-1:-1;;;32524:17:0;;;;32521:73;;;-1:-1:-1;32565:17:0;;-1:-1:-1;;;;;32565:17:0;32558:24;;24851:252;19495:14;;24944:20;;-1:-1:-1;;;;;19495:14:0;19481:10;:28;19473:37;;;;;;24981:18;:16;:18::i;:::-;25019:44;;;;;24944:56;;-1:-1:-1;;;;;;25019:18:0;;;;;:44;;25038:10;;25050:4;;25056:6;;25019:44;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25019:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25019:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25019:44:0;;;;;;;;;25011:53;;;;;;;;-1:-1:-1;25075:11:0;:20;24851:252::o;41154:173::-;41279:5;:15;41269:50;;;-1:-1:-1;;;;;41269:50:0;;;;41237:7;;-1:-1:-1;;;;;41279:15:0;;41269:48;;:50;;;;;;;;;;;;;;41237:7;41279:15;41269:50;;;5:2:-1;;;;30:1;27;20:12;5:2;41269:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41269:50:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;41269:50:0;;;;;;;;41502:279;41674:5;:15;41664:64;;;-1:-1:-1;;;;;41664:64:0;;;;41599:7;;-1:-1:-1;;;;;41674:15:0;;41664:62;;:64;;;;;;;;;;;;;;41599:7;41674:15;41664:64;;;5:2:-1;;;;30:1;27;20:12;5:2;41664:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41664:64:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;41664:64:0;;;;;;;;;-1:-1:-1;;;;;41631:131:0;;41763:9;41631:142;;;;;-1:-1:-1;;;41631:142:0;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41631:142:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41631:142:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;41631:142:0;;;;;;;;;41624:149;41502:279;-1:-1:-1;;41502:279:0:o;41941:185::-;42032:13;42079:39;42104:13;42079:24;:39::i;42295:320::-;42503:5;:15;42493:64;;;-1:-1:-1;;;;;42493:64:0;;;;42431:4;;-1:-1:-1;;;;;42503:15:0;;42493:62;;:64;;;;;;;;;;;;;;42431:4;42503:15;42493:64;;;5:2:-1;;;;30:1;27;20:12;5:2;42493:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42493:64:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;42493:64:0;;;;;;;;;-1:-1:-1;;;;;42460:128:0;;42589:7;42598:8;42460:147;;;;;-1:-1:-1;;;42460:147:0;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42460:147:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42460:147:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;42460:147:0;;;;;;;;39672:245;39823:5;:15;39813:64;;;-1:-1:-1;;;;;39813:64:0;;;;39748:7;;-1:-1:-1;;;;;39823:15:0;;39813:62;;:64;;;;;;;;;;;;;;39748:7;39823:15;39813:64;;;5:2:-1;;;;30:1;27;20:12;5:2;39813:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39813:64:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;39813:64:0;;;;;;;;;-1:-1:-1;;;;;39780:127:0;;:129;;;;;-1:-1:-1;;;39780:129:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;33766:617:0;33879:17;;33845:12;;;;;;;;;;-1:-1:-1;;;;;33879:17:0;:24;33875:115;;33932:17;;33928:49;;;;;-1:-1:-1;;;;;33932:17:0;;;;33928:40;;:49;;33969:7;;33928:49;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33928:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33928:49:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;33928:49:0;;;;;;;;;33920:58;;;;;;;;34159:20;:18;:20::i;:::-;34112:67;;-1:-1:-1;34112:67:0;;-1:-1:-1;34112:67:0;-1:-1:-1;34112:67:0;-1:-1:-1;34190:22:0;34112:67;34190:14;:22::i;:::-;34223:62;34246:7;34255:6;34263:8;34273:11;34223:22;:62::i;:::-;34323:16;;34315:38;;34341:11;34315:7;:38::i;:::-;34296:16;:57;-1:-1:-1;34371:4:0;;33766:617;-1:-1:-1;;;;;33766:617:0:o;40575:473::-;40794:12;40846:16;:14;:16::i;:::-;-1:-1:-1;;;;;40834:40:0;;40889:9;40913:8;40936:24;40975:4;40994:10;40834:181;;;;;-1:-1:-1;;;40834:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40834:181:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40834:181:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;40834:181:0;;;;;;;;;40824:191;-1:-1:-1;40575:473:0;;;;;;;;:::o;38647:599::-;38752:16;38783:19;38817:17;38849:18;38895:11;38949:5;38909:37;38917:7;38926:4;:19;;;38909:7;:37::i;:::-;:45;;;;;;;;38895:59;;39051:3;39023:25;39031:3;39036:5;:11;;;39023:7;:25::i;:::-;:31;;;;;;;;39012:42;;;39083:25;39091:3;39096:11;39083:7;:25::i;:::-;39069:39;;;39135:21;39143:7;39152:3;39135:7;:21::i;:::-;39123:33;;;18443:7;39185:34;39193:9;39204:4;:14;;;39185:7;:34::i;:::-;:41;;;;;;;38990:248;;;;-1:-1:-1;38990:248:0;;-1:-1:-1;39185:41:0;;;;-1:-1:-1;38647:599:0;-1:-1:-1;;;38647:599:0:o;36640:403::-;36758:4;36732:36;;;;;;;;;;;;-1:-1:-1;;36732:36:0;;;;;;;;;;;;;;;;;;;;;;;;;:17;;;;-1:-1:-1;;;;36732:36:0;36758:4;36732:36;;36758:4;36732:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36807:11:0;36779:40;;;;;;;36807:4;-1:-1:-1;;36779:40:0;36807:11;36779:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36732:36;;-1:-1:-1;36807:11:0;;-1:-1:-1;36779:40:0;-1:-1:-1;36779:40:0;;;-1:-1:-1;36807:11:0;36779:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36857:5:0;:15;36921:23;;;;;;;;36779:40;;-1:-1:-1;;;;;;36857:15:0;;;;-1:-1:-1;36857:15:0;;36921:21;;-1:-1:-1;36921:23:0;;;;;-1:-1:-1;36921:23:0;;-1:-1:-1;36921:23:0;;;;;;;36857:15;;36921:23;;;5:2:-1;;;;30:1;27;20:12;5:2;36921:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36921:23:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;36921:23:0;;;;;;;;;36964:70;;;;;36884:61;;-1:-1:-1;;;;;;36964:16:0;;;;;:70;;36981:10;;36993:4;;36999:7;;37008:11;;37021:4;;37027:6;;36964:70;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36964:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36964:70:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;36964:70:0;;;;;;;;;36956:79;;;;;;;35515:460;-1:-1:-1;;;;;35725:17:0;;;;;;:8;:17;;;;;:25;35717:43;;35752:7;35717;:43::i;:::-;-1:-1:-1;;;;;35689:17:0;;;;;;;:8;:17;;;;;;:71;;;;35827:18;;;;;35818:28;;;:36;35810:56;;35856:9;35810:7;:56::i;:::-;35780:18;;-1:-1:-1;;;;;35780:18:0;;;35771:28;;;;:8;:28;;;;;;:95;;;;35929:14;;;;;35920:24;;;:32;35912:55;;35954:12;35912:7;:55::i;:::-;35886:14;;-1:-1:-1;;;;;35886:14:0;35877:24;;;;:8;:24;;;;;:90;-1:-1:-1;;;;35515:460:0:o;17241:127::-;17303:7;17330:6;;;;17323:14;;;;-1:-1:-1;17355:5:0;;;17241:127::o;37275:283::-;37462:65;;;;;37432:4;;-1:-1:-1;;;;;37462:35:0;;;;;:65;;37498:19;;37519:7;;37462:65;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37462:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37462:65:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37462:65:0;;;;;;;;;37454:74;;;;;;;;-1:-1:-1;37546:4:0;37275:283;;;;;:::o;17729:419::-;18100:4;18083:22;18077:29;;17729:419::o;37797:609::-;37891:19;37925:16;37956:19;37990:14;38097:11;38046:40;18443:7;38054:9;:16;38072:4;:13;;;38046:7;:40::i;:::-;38032:54;;38155:5;38111:41;38119:11;38132:4;:19;;;38111:7;:41::i;:::-;:49;;;;;;;;38097:63;;38218:11;38284:3;38255:26;38263:3;38269:5;:11;;;38255:7;:26::i;:::-;:32;;;;;;;;38244:43;;;38316:22;38324:3;38329:8;38316:7;:22::i;:::-;38302:36;;;38362:25;38370:11;38383:3;38362:7;:25::i;:::-;38196:202;;;;-1:-1:-1;38196:202:0;-1:-1:-1;38196:202:0;;-1:-1:-1;37797:609:0;-1:-1:-1;;37797:609:0:o;36091:383::-;36192:4;36166:36;;;;;;;;;;;;-1:-1:-1;;36166:36:0;;;;;;;;;;;;;;;;;;;;;;;;;:17;;;;-1:-1:-1;;;;36166:36:0;36192:4;36166:36;;36192:4;36166:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36241:11:0;36213:40;;;;;;;36241:4;-1:-1:-1;;36213:40:0;36241:11;36213:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36166:36;;-1:-1:-1;36241:11:0;;-1:-1:-1;36213:40:0;-1:-1:-1;36213:40:0;;;-1:-1:-1;36241:11:0;36213:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36291:5:0;:15;36355:23;;;;;;;;36213:40;;-1:-1:-1;;;;;;36291:15:0;;;;-1:-1:-1;36291:15:0;;36355:21;;-1:-1:-1;36355:23:0;;;;;-1:-1:-1;36355:23:0;;-1:-1:-1;36355:23:0;;;;;;;36291:15;;36355:23;;;5:2:-1;;;;30:1;27;20:12;5:2;36355:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36355:23:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;36355:23:0;;;;;;;;;36398:67;;;;;36318:61;;-1:-1:-1;;;;;;36398:15:0;;;;;:67;;36414:10;;36426:4;;36432:9;;36443:7;;36452:4;;36458:6;;36398:67;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36398:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36398:67:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;36398:67:0;;;;;;;;34678:542;-1:-1:-1;;;;;34892:17:0;;;;;;:8;:17;;;;;:25;34884:43;;34919:7;34884;:43::i;:::-;-1:-1:-1;;;;;34856:17:0;;;;;;;:8;:17;;;;;;:71;;;;34994:18;;;;;34985:28;;;:36;34977:56;;35023:9;34977:7;:56::i;:::-;34947:18;;-1:-1:-1;;;;;34947:18:0;;;34938:28;;;;:8;:28;;;;;;:95;;;;35096:14;;;;;35087:24;;;:32;35079:55;;35121:12;35079:7;:55::i;:::-;35053:14;;-1:-1:-1;;;;;35053:14:0;;;35044:24;;;;:8;:24;;;;;;:90;;;;35198:14;;35145:17;;;;;;;35198:4;35145:36;:67;;-1:-1:-1;;35145:67:0;35198:14;;;;35191:3;35184:28;35145:67;;;;;;;;;;-1:-1:-1;;;34678:542:0:o;17376:157::-;17438:7;17470:5;;;17493:4;;;;;;:12;;;17504:1;17501;:4;;17493:12;17486:20;;;;;40033:173;40151:5;:15;40141:57;;;;;;;;40109:7;;-1:-1:-1;;;;;40151:15:0;;40141:55;;:57;;;;;;;;;;;;;;40109:7;40151:15;40141:57;;;5:2:-1;;;;30:1;27;20:12;16873:165:0;16935:7;16967:5;;;16990:6;;;:20;;;17009:1;17004;17000;:5;;;;;;;;:10;16983:28;;;17046:187;17108:7;;17135:5;;;17128:13;;;;17168:1;17164;:5;;;;;;;;17152:17;;17204:1;17200;:5;;;;;;;;17196:1;17192;:5;:13;17187:1;:18;17180:26;;;;;5:118:-1;;72:46;110:6;97:20;72:46;;130:122;;208:39;239:6;233:13;208:39;;277:352;;;400:4;388:17;;384:27;-1:-1;374:2;;425:1;422;415:12;374:2;-1:-1;445:20;;485:18;474:30;;471:2;;;517:1;514;507:12;471:2;551:4;543:6;539:17;527:29;;602:3;594:4;586:6;582:17;572:8;568:32;565:41;562:2;;;619:1;616;609:12;562:2;367:262;;;;;;672:753;;807:4;795:17;;791:27;-1:-1;781:2;;832:1;829;822:12;781:2;869:6;856:20;891:105;906:89;988:6;906:89;;;891:105;;;1024:21;;;1068:4;1056:17;;;;882:114;;-1:-1;1081:14;;1056:17;1176:1;1161:258;1186:6;1183:1;1180:13;1161:258;;;1269:3;1256:17;1248:6;1244:30;1293:62;1351:3;1339:10;1293:62;;;1281:75;;-1:-1;1379:4;1370:14;;;;1398;;;;;1208:1;1201:9;1161:258;;;1165:14;774:651;;;;;;;;1811:112;;1875:43;1910:6;1897:20;1875:43;;1930:116;;2005:36;2033:6;2027:13;2005:36;;2053:118;;2120:46;2158:6;2145:20;2120:46;;2192:335;;;2299:4;2287:17;;2283:27;-1:-1;2273:2;;2324:1;2321;2314:12;2273:2;-1:-1;2344:20;;2384:18;2373:30;;2370:2;;;2416:1;2413;2406:12;2370:2;2450:4;2442:6;2438:17;2426:29;;2500:3;2493;2485:6;2481:16;2471:8;2467:31;2464:40;2461:2;;;2517:1;2514;2507:12;2536:432;;2626:4;2614:17;;2610:27;-1:-1;2600:2;;2651:1;2648;2641:12;2600:2;2688:6;2675:20;2710:60;2725:44;2762:6;2725:44;;2710:60;2701:69;;2790:6;2783:5;2776:21;2826:4;2818:6;2814:17;2859:4;2852:5;2848:16;2894:3;2885:6;2880:3;2876:16;2873:25;2870:2;;;2911:1;2908;2901:12;2870:2;2921:41;2955:6;2950:3;2945;2921:41;;;2593:375;;;;;;;;3007:422;;3121:4;3109:9;3104:3;3100:19;3096:30;3093:2;;;3139:1;3136;3129:12;3093:2;3157:20;3172:4;3157:20;;;3148:29;-1:-1;3236:31;;3287:18;3276:30;;3273:2;;;3319:1;3316;3309:12;3273:2;3353:54;3403:3;3394:6;3383:9;3379:22;3353:54;;;3329:79;;-1:-1;3340:5;3087:342;-1:-1;;3087:342;4025:116;;4091:45;4128:6;4115:20;4091:45;;4148:241;;4252:2;4240:9;4231:7;4227:23;4223:32;4220:2;;;4268:1;4265;4258:12;4220:2;4303:1;4320:53;4365:7;4345:9;4320:53;;;4310:63;4214:175;-1:-1;;;;4214:175;4396:263;;4511:2;4499:9;4490:7;4486:23;4482:32;4479:2;;;4527:1;4524;4517:12;4479:2;4562:1;4579:64;4635:7;4615:9;4579:64;;4666:491;;;;4804:2;4792:9;4783:7;4779:23;4775:32;4772:2;;;4820:1;4817;4810:12;4772:2;4855:1;4872:53;4917:7;4897:9;4872:53;;;4862:63;;4834:97;4962:2;4980:53;5025:7;5016:6;5005:9;5001:22;4980:53;;;4970:63;;4941:98;5070:2;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;;;5078:63;;5049:98;4766:391;;;;;;5164:803;;;;;;5372:2;5360:9;5351:7;5347:23;5343:32;5340:2;;;5388:1;5385;5378:12;5340:2;5423:1;5440:53;5485:7;5465:9;5440:53;;;5430:63;;5402:97;5558:2;5547:9;5543:18;5530:32;5582:18;5574:6;5571:30;5568:2;;;5614:1;5611;5604:12;5568:2;5642:80;5714:7;5705:6;5694:9;5690:22;5642:80;;;5624:98;;;;5509:219;5787:2;5776:9;5772:18;5759:32;5811:18;5803:6;5800:30;5797:2;;;5843:1;5840;5833:12;5797:2;5871:80;5943:7;5934:6;5923:9;5919:22;5871:80;;;5853:98;;;;5738:219;5334:633;;;;;;;;;5974:552;;;6145:2;6133:9;6124:7;6120:23;6116:32;6113:2;;;6161:1;6158;6151:12;6113:2;6196:1;6213:53;6258:7;6238:9;6213:53;;;6203:63;;6175:97;6331:2;6320:9;6316:18;6303:32;6355:18;6347:6;6344:30;6341:2;;;6387:1;6384;6377:12;6341:2;6407:103;6502:7;6493:6;6482:9;6478:22;6407:103;;;6397:113;;6282:234;6107:419;;;;;;6533:510;;;6683:2;6671:9;6662:7;6658:23;6654:32;6651:2;;;6699:1;6696;6689:12;6651:2;6734:1;6751:53;6796:7;6776:9;6751:53;;;6741:63;;6713:97;6869:2;6858:9;6854:18;6841:32;6893:18;6885:6;6882:30;6879:2;;;6925:1;6922;6915:12;6879:2;6945:82;7019:7;7010:6;6999:9;6995:22;6945:82;;7050:257;;7162:2;7150:9;7141:7;7137:23;7133:32;7130:2;;;7178:1;7175;7168:12;7130:2;7213:1;7230:61;7283:7;7263:9;7230:61;;7314:360;;;7432:2;7420:9;7411:7;7407:23;7403:32;7400:2;;;7448:1;7445;7438:12;7400:2;7483:1;7500:50;7542:7;7522:9;7500:50;;;7490:60;;7462:94;7587:2;7605:53;7650:7;7641:6;7630:9;7626:22;7605:53;;7681:490;;;;7821:2;7809:9;7800:7;7796:23;7792:32;7789:2;;;7837:1;7834;7827:12;7789:2;7872:1;7889:53;7934:7;7914:9;7889:53;;;7879:63;;7851:97;8007:2;7996:9;7992:18;7979:32;8031:18;8023:6;8020:30;8017:2;;;8063:1;8060;8053:12;8017:2;8091:64;8147:7;8138:6;8127:9;8123:22;8091:64;;;8073:82;;;;7958:203;7783:388;;;;;;8178:241;;8282:2;8270:9;8261:7;8257:23;8253:32;8250:2;;;8298:1;8295;8288:12;8250:2;8333:1;8350:53;8395:7;8375:9;8350:53;;8426:867;;;;;;;8617:3;8605:9;8596:7;8592:23;8588:33;8585:2;;;8634:1;8631;8624:12;8585:2;8669:1;8686:53;8731:7;8711:9;8686:53;;;8676:63;;8648:97;8776:2;8794:53;8839:7;8830:6;8819:9;8815:22;8794:53;;;8784:63;;8755:98;8884:2;8902:53;8947:7;8938:6;8927:9;8923:22;8902:53;;;8892:63;;8863:98;8992:2;9010:53;9055:7;9046:6;9035:9;9031:22;9010:53;;;9000:63;;8971:98;9128:3;9117:9;9113:19;9100:33;9153:18;9145:6;9142:30;9139:2;;;9185:1;9182;9175:12;9139:2;9213:64;9269:7;9260:6;9249:9;9245:22;9213:64;;;9195:82;;;;9079:204;8579:714;;;;;;;;;9300:239;;9403:2;9391:9;9382:7;9378:23;9374:32;9371:2;;;9419:1;9416;9409:12;9371:2;9454:1;9471:52;9515:7;9495:9;9471:52;;9546:110;9619:31;9644:5;9619:31;;;9614:3;9607:44;9601:55;;;9663:101;9730:28;9752:5;9730:28;;9771:110;9844:31;9869:5;9844:31;;9888:107;9959:30;9983:5;9959:30;;10023:261;;10131:6;10126:3;10119:19;10155:4;10150:3;10146:14;10139:21;;10185:43;10221:6;10216:3;10209:5;10185:43;;;10249:29;10271:6;10249:29;;;10240:39;;;;10113:171;-1:-1;;;10113:171;10291:297;;10391:38;10423:5;10391:38;;;10446:6;10441:3;10434:19;10458:63;10514:6;10507:4;10502:3;10498:14;10491:4;10484:5;10480:16;10458:63;;;10553:29;10575:6;10553:29;;;10533:50;;;10546:4;10533:50;;10371:217;-1:-1;;;10371:217;10595:144;10682:51;10727:5;10682:51;;11054:296;11209:2;11197:15;;11246:66;11241:2;11232:12;;11225:88;11341:2;11332:12;;11190:160;11475:107;11546:30;11570:5;11546:30;;11589:193;11697:2;11682:18;;11711:61;11686:9;11745:6;11711:61;;11789:697;12035:3;12020:19;;12050:61;12024:9;12084:6;12050:61;;;12122:62;12180:2;12169:9;12165:18;12156:6;12122:62;;;12195;12253:2;12242:9;12238:18;12229:6;12195:62;;;12268;12326:2;12315:9;12311:18;12302:6;12268:62;;;12341:63;12399:3;12388:9;12384:19;12375:6;12341:63;;;12415:61;12471:3;12460:9;12456:19;12447:6;12415:61;;;12006:480;;;;;;;;;;12493:423;12671:2;12656:18;;12685:61;12660:9;12719:6;12685:61;;;12757:76;12829:2;12818:9;12814:18;12805:6;12757:76;;;12844:62;12902:2;12891:9;12887:18;12878:6;12844:62;;12923:423;13101:2;13086:18;;13115:61;13090:9;13149:6;13115:61;;;13187:76;13259:2;13248:9;13244:18;13235:6;13187:76;;;13274:62;13332:2;13321:9;13317:18;13308:6;13274:62;;13353:525;13559:3;13544:19;;13574:61;13548:9;13608:6;13574:61;;;13646:76;13718:2;13707:9;13703:18;13694:6;13646:76;;;13733:62;13791:2;13780:9;13776:18;13767:6;13733:62;;;13806;13864:2;13853:9;13849:18;13840:6;13806:62;;13885:897;14183:3;14168:19;;14198:61;14172:9;14232:6;14198:61;;;14270:76;14342:2;14331:9;14327:18;14318:6;14270:76;;;14357:62;14415:2;14404:9;14400:18;14391:6;14357:62;;;14430;14488:2;14477:9;14473:18;14464:6;14430:62;;;14541:9;14535:4;14531:20;14525:3;14514:9;14510:19;14503:49;14566:66;14627:4;14618:6;14566:66;;;14558:74;;14681:9;14675:4;14671:20;14665:3;14654:9;14650:19;14643:49;14706:66;14767:4;14758:6;14706:66;;;14698:74;14154:628;-1:-1;;;;;;;;14154:628;14789:294;14925:2;14910:18;;14939:61;14914:9;14973:6;14939:61;;;15011:62;15069:2;15058:9;15054:18;15045:6;15011:62;;15090:181;15192:2;15177:18;;15206:55;15181:9;15234:6;15206:55;;15278:398;15442:2;15427:18;;15456:61;15431:9;15490:6;15456:61;;;15565:9;15559:4;15555:20;15550:2;15539:9;15535:18;15528:48;15590:76;15661:4;15652:6;15644;15590:76;;15683:290;15817:2;15802:18;;15831:59;15806:9;15863:6;15831:59;;;15901:62;15959:2;15948:9;15944:18;15935:6;15901:62;;15980:673;16212:3;16227:47;;;16197:19;;16288:68;16197:19;16342:6;16288:68;;;16280:76;;16404:9;16398:4;16394:20;16389:2;16378:9;16374:18;16367:48;16429:68;16492:4;16483:6;16429:68;;;16421:76;;16508:62;16566:2;16555:9;16551:18;16542:6;16508:62;;16660:387;16841:2;16855:47;;;16826:18;;16916:121;16826:18;16916:121;;17054:193;17162:2;17147:18;;17176:61;17151:9;17210:6;17176:61;;17254:683;17492:3;17477:19;;17507:61;17481:9;17541:6;17507:61;;;17579:62;17637:2;17626:9;17622:18;17613:6;17579:62;;;17652;17710:2;17699:9;17695:18;17686:6;17652:62;;;17725;17783:2;17772:9;17768:18;17759:6;17725:62;;;17836:9;17830:4;17826:20;17820:3;17809:9;17805:19;17798:49;17861:66;17922:4;17913:6;17861:66;;17944:256;18006:2;18000:9;18032:17;;;18107:18;18092:34;;18128:22;;;18089:62;18086:2;;;18164:1;18161;18154:12;18086:2;18180;18173:22;17984:216;;-1:-1;17984:216;18207:283;;18391:18;18383:6;18380:30;18377:2;;;18423:1;18420;18413:12;18377:2;-1:-1;18452:4;18440:17;;;18470:15;;18314:176;18497:254;;18636:18;18628:6;18625:30;18622:2;;;18668:1;18665;18658:12;18622:2;-1:-1;18741:4;18712;18689:17;;;;-1:-1;;18685:33;18731:15;;18559:192;18758:91;18832:12;;18816:33;18955:128;-1:-1;;;;;19024:54;;19007:76;19090:92;19163:13;19156:21;;19139:43;19275:151;19354:66;19343:78;;19326:100;19519:95;19598:10;19587:22;;19570:44;20129:129;;20222:31;20247:5;20222:31;;20266:145;20347:6;20342:3;20337;20324:30;-1:-1;20403:1;20385:16;;20378:27;20317:94;20420:268;20485:1;20492:101;20506:6;20503:1;20500:13;20492:101;;;20573:11;;;20567:18;20554:11;;;20547:39;20528:2;20521:10;20492:101;;;20608:6;20605:1;20602:13;20599:2;;;20673:1;20664:6;20659:3;20655:16;20648:27;20599:2;20469:219;;;;;20696:97;20784:2;20764:14;-1:-1;;20760:28;;20744:49
Swarm Source
bzzr://109cfb4d5fe077a5cf268e1d5a03cb0c80b221976a8553b2f9a825cad1326bdd
Loading...
Loading
Loading...
Loading
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.