Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 32 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Finish Deploymen... | 10544080 | 1525 days ago | IN | 0 ETH | 0.00162033 | ||||
Create Genesis U... | 10544033 | 1525 days ago | IN | 0 ETH | 0.25189373 | ||||
Register Contrac... | 10543970 | 1525 days ago | IN | 0 ETH | 0.00239282 | ||||
Register Contrac... | 10543968 | 1525 days ago | IN | 0 ETH | 0.00239221 | ||||
Register Contrac... | 10543962 | 1525 days ago | IN | 0 ETH | 0.00381407 | ||||
Register Contrac... | 10543960 | 1525 days ago | IN | 0 ETH | 0.0026556 | ||||
Register Contrac... | 10543957 | 1525 days ago | IN | 0 ETH | 0.00264752 | ||||
Register Contrac... | 10543954 | 1525 days ago | IN | 0 ETH | 0.00274236 | ||||
Register Contrac... | 10543950 | 1525 days ago | IN | 0 ETH | 0.00280326 | ||||
Register Contrac... | 10543944 | 1525 days ago | IN | 0 ETH | 0.00280255 | ||||
Register Contrac... | 10543940 | 1525 days ago | IN | 0 ETH | 0.00281253 | ||||
Register Contrac... | 10543936 | 1525 days ago | IN | 0 ETH | 0.00280397 | ||||
Register Contrac... | 10543898 | 1525 days ago | IN | 0 ETH | 0.00381642 | ||||
Register Contrac... | 10543895 | 1525 days ago | IN | 0 ETH | 0.00264752 | ||||
Register Contrac... | 10543890 | 1525 days ago | IN | 0 ETH | 0.00269738 | ||||
Register Contrac... | 10543885 | 1525 days ago | IN | 0 ETH | 0.00280112 | ||||
Register Contrac... | 10543879 | 1525 days ago | IN | 0 ETH | 0.00280754 | ||||
Register Contrac... | 10543875 | 1525 days ago | IN | 0 ETH | 0.00280611 | ||||
Register Contrac... | 10543871 | 1525 days ago | IN | 0 ETH | 0.00281039 | ||||
Register Contrac... | 10543867 | 1525 days ago | IN | 0 ETH | 0.00280397 | ||||
Register Contrac... | 10543863 | 1525 days ago | IN | 0 ETH | 0.00270561 | ||||
Register Contrac... | 10543859 | 1525 days ago | IN | 0 ETH | 0.00280754 | ||||
Register Contrac... | 10543856 | 1525 days ago | IN | 0 ETH | 0.00270836 | ||||
Register Contrac... | 10543850 | 1525 days ago | IN | 0 ETH | 0.00280611 | ||||
Register Contrac... | 10543847 | 1525 days ago | IN | 0 ETH | 0.00404407 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Augur
Compiler Version
v0.5.15+commit.6a57276f
Contract Source Code (Solidity Standard Json-Input format)
pragma experimental ABIEncoderV2; pragma solidity 0.5.15; contract IAugur { function createChildUniverse(bytes32 _parentPayoutDistributionHash, uint256[] memory _parentPayoutNumerators) public returns (IUniverse); function isKnownUniverse(IUniverse _universe) public view returns (bool); function trustedCashTransfer(address _from, address _to, uint256 _amount) public returns (bool); function isTrustedSender(address _address) public returns (bool); function onCategoricalMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash, bytes32[] memory _outcomes) public returns (bool); function onYesNoMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash) public returns (bool); function onScalarMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash, int256[] memory _prices, uint256 _numTicks) public returns (bool); function logInitialReportSubmitted(IUniverse _universe, address _reporter, address _market, address _initialReporter, uint256 _amountStaked, bool _isDesignatedReporter, uint256[] memory _payoutNumerators, string memory _description, uint256 _nextWindowStartTime, uint256 _nextWindowEndTime) public returns (bool); function disputeCrowdsourcerCreated(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] memory _payoutNumerators, uint256 _size, uint256 _disputeRound) public returns (bool); function logDisputeCrowdsourcerContribution(IUniverse _universe, address _reporter, address _market, address _disputeCrowdsourcer, uint256 _amountStaked, string memory description, uint256[] memory _payoutNumerators, uint256 _currentStake, uint256 _stakeRemaining, uint256 _disputeRound) public returns (bool); function logDisputeCrowdsourcerCompleted(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] memory _payoutNumerators, uint256 _nextWindowStartTime, uint256 _nextWindowEndTime, bool _pacingOn, uint256 _totalRepStakedInPayout, uint256 _totalRepStakedInMarket, uint256 _disputeRound) public returns (bool); function logInitialReporterRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256[] memory _payoutNumerators) public returns (bool); function logDisputeCrowdsourcerRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256[] memory _payoutNumerators) public returns (bool); function logMarketFinalized(IUniverse _universe, uint256[] memory _winningPayoutNumerators) public returns (bool); function logMarketMigrated(IMarket _market, IUniverse _originalUniverse) public returns (bool); function logReportingParticipantDisavowed(IUniverse _universe, IMarket _market) public returns (bool); function logMarketParticipantsDisavowed(IUniverse _universe) public returns (bool); function logCompleteSetsPurchased(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool); function logCompleteSetsSold(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets, uint256 _fees) public returns (bool); function logMarketOIChanged(IUniverse _universe, IMarket _market) public returns (bool); function logTradingProceedsClaimed(IUniverse _universe, address _sender, address _market, uint256 _outcome, uint256 _numShares, uint256 _numPayoutTokens, uint256 _fees) public returns (bool); function logUniverseForked(IMarket _forkingMarket) public returns (bool); function logReputationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool); function logReputationTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logReputationTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logShareTokensBalanceChanged(address _account, IMarket _market, uint256 _outcome, uint256 _balance) public returns (bool); function logDisputeCrowdsourcerTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool); function logDisputeCrowdsourcerTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logDisputeCrowdsourcerTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logDisputeWindowCreated(IDisputeWindow _disputeWindow, uint256 _id, bool _initial) public returns (bool); function logParticipationTokensRedeemed(IUniverse universe, address _sender, uint256 _attoParticipationTokens, uint256 _feePayoutShare) public returns (bool); function logTimestampSet(uint256 _newTimestamp) public returns (bool); function logInitialReporterTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool); function logMarketTransferred(IUniverse _universe, address _from, address _to) public returns (bool); function logParticipationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool); function logParticipationTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logParticipationTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logMarketRepBondTransferred(address _universe, address _from, address _to) public returns (bool); function logWarpSyncDataUpdated(address _universe, uint256 _warpSyncHash, uint256 _marketEndTime) public returns (bool); function isKnownFeeSender(address _feeSender) public view returns (bool); function lookup(bytes32 _key) public view returns (address); function getTimestamp() public view returns (uint256); function getMaximumMarketEndDate() public returns (uint256); function isKnownMarket(IMarket _market) public view returns (bool); function derivePayoutDistributionHash(uint256[] memory _payoutNumerators, uint256 _numTicks, uint256 numOutcomes) public view returns (bytes32); function logValidityBondChanged(uint256 _validityBond) public returns (bool); function logDesignatedReportStakeChanged(uint256 _designatedReportStake) public returns (bool); function logNoShowBondChanged(uint256 _noShowBond) public returns (bool); function logReportingFeeChanged(uint256 _reportingFee) public returns (bool); function getUniverseForkIndex(IUniverse _universe) public view returns (uint256); } contract IAugurCreationDataGetter { struct MarketCreationData { string extraInfo; address marketCreator; bytes32[] outcomes; int256[] displayPrices; IMarket.MarketType marketType; uint256 recommendedTradeInterval; } function getMarketCreationData(IMarket _market) public view returns (MarketCreationData memory); } contract IUniverseFactory { function createUniverse(IUniverse _parentUniverse, bytes32 _parentPayoutDistributionHash, uint256[] memory _payoutNumerators) public returns (IUniverse); } library ContractExists { function exists(address _address) internal view returns (bool) { uint256 size; assembly { size := extcodesize(_address) } return size > 0; } } contract IOwnable { function getOwner() public view returns (address); function transferOwnership(address _newOwner) public returns (bool); } contract ITyped { function getTypeName() public view returns (bytes32); } contract ITime is ITyped { function getTimestamp() external view returns (uint256); } library SafeMathUint256 { function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } function min(uint256 a, uint256 b) internal pure returns (uint256) { if (a <= b) { return a; } else { return b; } } function max(uint256 a, uint256 b) internal pure returns (uint256) { if (a >= b) { return a; } else { return b; } } function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { uint256 x = (y + 1) / 2; z = y; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } function getUint256Min() internal pure returns (uint256) { return 0; } function getUint256Max() internal pure returns (uint256) { // 2 ** 256 - 1 return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; } function isMultipleOf(uint256 a, uint256 b) internal pure returns (bool) { return a % b == 0; } // Float [fixed point] Operations function fxpMul(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) { return div(mul(a, b), base); } function fxpDiv(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) { return div(mul(a, base), b); } } interface IERC1155 { /// @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, /// including zero value transfers as well as minting or burning. /// Operator will always be msg.sender. /// Either event from address `0x0` signifies a minting operation. /// An event to address `0x0` signifies a burning or melting operation. /// The total value transferred from address 0x0 minus the total value transferred to 0x0 may /// be used by clients and exchanges to be added to the "circulating supply" for a given token ID. /// To define a token ID with no initial balance, the contract SHOULD emit the TransferSingle event /// from `0x0` to `0x0`, with the token creator as `_operator`. event TransferSingle( address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value ); /// @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, /// including zero value transfers as well as minting or burning. ///Operator will always be msg.sender. /// Either event from address `0x0` signifies a minting operation. /// An event to address `0x0` signifies a burning or melting operation. /// The total value transferred from address 0x0 minus the total value transferred to 0x0 may /// be used by clients and exchanges to be added to the "circulating supply" for a given token ID. /// To define multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event /// from `0x0` to `0x0`, with the token creator as `_operator`. event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /// @dev MUST emit when an approval is updated. event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /// @dev MUST emit when the URI is updated for a token ID. /// URIs are defined in RFC 3986. /// The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema". event URI( string value, uint256 indexed id ); /// @notice Transfers value amount of an _id from the _from address to the _to address specified. /// @dev MUST emit TransferSingle event on success. /// Caller must be approved to manage the _from account's tokens (see isApprovedForAll). /// MUST throw if `_to` is the zero address. /// MUST throw if balance of sender for token `_id` is lower than the `_value` sent. /// MUST throw on any other error. /// When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). /// If so, it MUST call `onERC1155Received` on `_to` and revert if the return value /// is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`. /// @param from Source address /// @param to Target address /// @param id ID of the token type /// @param value Transfer amount /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom( address from, address to, uint256 id, uint256 value, bytes calldata data ) external; /// @notice Send multiple types of Tokens from a 3rd party in one transfer (with safety call). /// @dev MUST emit TransferBatch event on success. /// Caller must be approved to manage the _from account's tokens (see isApprovedForAll). /// MUST throw if `_to` is the zero address. /// MUST throw if length of `_ids` is not the same as length of `_values`. /// MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_values` sent. /// MUST throw on any other error. /// When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). /// If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return value /// is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`. /// @param from Source addresses /// @param to Target addresses /// @param ids IDs of each token type /// @param values Transfer amounts per token type /// @param data Additional data with no specified format, sent in call to `_to` function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external; /// @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens. /// @dev MUST emit the ApprovalForAll event on success. /// @param operator Address to add to the set of authorized operators /// @param approved True if the operator is approved, false to revoke approval function setApprovalForAll(address operator, bool approved) external; /// @notice Queries the approval status of an operator for a given owner. /// @param owner The owner of the Tokens /// @param operator Address of authorized operator /// @return True if the operator is approved, false if not function isApprovedForAll(address owner, address operator) external view returns (bool); /// @notice Get the balance of an account's Tokens. /// @param owner The address of the token holder /// @param id ID of the Token /// @return The _owner's balance of the Token type requested function balanceOf(address owner, uint256 id) external view returns (uint256); /// @notice Get the total supply of a Token. /// @param id ID of the Token /// @return The total supply of the Token type requested function totalSupply(uint256 id) external view returns (uint256); /// @notice Get the balance of multiple account/token pairs /// @param owners The addresses of the token holders /// @param ids ID of the Tokens /// @return The _owner's balance of the Token types requested function balanceOfBatch( address[] calldata owners, uint256[] calldata ids ) external view returns (uint256[] memory balances_); } contract IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address owner) public view returns (uint256); function transfer(address to, uint256 amount) public returns (bool); function transferFrom(address from, address to, uint256 amount) public returns (bool); function approve(address spender, uint256 amount) public returns (bool); function allowance(address owner, address spender) public view returns (uint256); // solhint-disable-next-line no-simple-event-func-name event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract ICash is IERC20 { } contract IAffiliateValidator { function validateReference(address _account, address _referrer) external view returns (bool); } contract IAffiliates { function setFingerprint(bytes32 _fingerprint) external; function setReferrer(address _referrer) external; function getAccountFingerprint(address _account) external returns (bytes32); function getReferrer(address _account) external returns (address); function getAndValidateReferrer(address _account, IAffiliateValidator affiliateValidator) external returns (address); function affiliateValidators(address _affiliateValidator) external returns (bool); } contract IDisputeWindow is ITyped, IERC20 { function invalidMarketsTotal() external view returns (uint256); function validityBondTotal() external view returns (uint256); function incorrectDesignatedReportTotal() external view returns (uint256); function initialReportBondTotal() external view returns (uint256); function designatedReportNoShowsTotal() external view returns (uint256); function designatedReporterNoShowBondTotal() external view returns (uint256); function initialize(IAugur _augur, IUniverse _universe, uint256 _disputeWindowId, bool _participationTokensEnabled, uint256 _duration, uint256 _startTime) public; function trustedBuy(address _buyer, uint256 _attotokens) public returns (bool); function getUniverse() public view returns (IUniverse); function getReputationToken() public view returns (IReputationToken); function getStartTime() public view returns (uint256); function getEndTime() public view returns (uint256); function getWindowId() public view returns (uint256); function isActive() public view returns (bool); function isOver() public view returns (bool); function onMarketFinalized() public; function redeem(address _account) public returns (bool); } contract IMarket is IOwnable { enum MarketType { YES_NO, CATEGORICAL, SCALAR } function initialize(IAugur _augur, IUniverse _universe, uint256 _endTime, uint256 _feePerCashInAttoCash, IAffiliateValidator _affiliateValidator, uint256 _affiliateFeeDivisor, address _designatedReporterAddress, address _creator, uint256 _numOutcomes, uint256 _numTicks) public; function derivePayoutDistributionHash(uint256[] memory _payoutNumerators) public view returns (bytes32); function doInitialReport(uint256[] memory _payoutNumerators, string memory _description, uint256 _additionalStake) public returns (bool); function getUniverse() public view returns (IUniverse); function getDisputeWindow() public view returns (IDisputeWindow); function getNumberOfOutcomes() public view returns (uint256); function getNumTicks() public view returns (uint256); function getMarketCreatorSettlementFeeDivisor() public view returns (uint256); function getForkingMarket() public view returns (IMarket _market); function getEndTime() public view returns (uint256); function getWinningPayoutDistributionHash() public view returns (bytes32); function getWinningPayoutNumerator(uint256 _outcome) public view returns (uint256); function getWinningReportingParticipant() public view returns (IReportingParticipant); function getReputationToken() public view returns (IV2ReputationToken); function getFinalizationTime() public view returns (uint256); function getInitialReporter() public view returns (IInitialReporter); function getDesignatedReportingEndTime() public view returns (uint256); function getValidityBondAttoCash() public view returns (uint256); function affiliateFeeDivisor() external view returns (uint256); function getNumParticipants() public view returns (uint256); function getDisputePacingOn() public view returns (bool); function deriveMarketCreatorFeeAmount(uint256 _amount) public view returns (uint256); function recordMarketCreatorFees(uint256 _marketCreatorFees, address _sourceAccount, bytes32 _fingerprint) public returns (bool); function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool); function isFinalizedAsInvalid() public view returns (bool); function finalize() public returns (bool); function isFinalized() public view returns (bool); function getOpenInterest() public view returns (uint256); } contract IReportingParticipant { function getStake() public view returns (uint256); function getPayoutDistributionHash() public view returns (bytes32); function liquidateLosing() public; function redeem(address _redeemer) public returns (bool); function isDisavowed() public view returns (bool); function getPayoutNumerator(uint256 _outcome) public view returns (uint256); function getPayoutNumerators() public view returns (uint256[] memory); function getMarket() public view returns (IMarket); function getSize() public view returns (uint256); } contract IDisputeCrowdsourcer is IReportingParticipant, IERC20 { function initialize(IAugur _augur, IMarket market, uint256 _size, bytes32 _payoutDistributionHash, uint256[] memory _payoutNumerators, uint256 _crowdsourcerGeneration) public; function contribute(address _participant, uint256 _amount, bool _overload) public returns (uint256); function setSize(uint256 _size) public; function getRemainingToFill() public view returns (uint256); function correctSize() public returns (bool); function getCrowdsourcerGeneration() public view returns (uint256); } contract IInitialReporter is IReportingParticipant, IOwnable { function initialize(IAugur _augur, IMarket _market, address _designatedReporter) public; function report(address _reporter, bytes32 _payoutDistributionHash, uint256[] memory _payoutNumerators, uint256 _initialReportStake) public; function designatedReporterShowed() public view returns (bool); function initialReporterWasCorrect() public view returns (bool); function getDesignatedReporter() public view returns (address); function getReportTimestamp() public view returns (uint256); function migrateToNewUniverse(address _designatedReporter) public; function returnRepFromDisavow() public; } contract IReputationToken is IERC20 { function migrateOutByPayout(uint256[] memory _payoutNumerators, uint256 _attotokens) public returns (bool); function migrateIn(address _reporter, uint256 _attotokens) public returns (bool); function trustedReportingParticipantTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedMarketTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedUniverseTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedDisputeWindowTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function getUniverse() public view returns (IUniverse); function getTotalMigrated() public view returns (uint256); function getTotalTheoreticalSupply() public view returns (uint256); function mintForReportingParticipant(uint256 _amountMigrated) public returns (bool); } contract IShareToken is ITyped, IERC1155 { function initialize(IAugur _augur) external; function initializeMarket(IMarket _market, uint256 _numOutcomes, uint256 _numTicks) public; function unsafeTransferFrom(address _from, address _to, uint256 _id, uint256 _value) public; function unsafeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _values) public; function claimTradingProceeds(IMarket _market, address _shareHolder, bytes32 _fingerprint) external returns (uint256[] memory _outcomeFees); function getMarket(uint256 _tokenId) external view returns (IMarket); function getOutcome(uint256 _tokenId) external view returns (uint256); function getTokenId(IMarket _market, uint256 _outcome) public pure returns (uint256 _tokenId); function getTokenIds(IMarket _market, uint256[] memory _outcomes) public pure returns (uint256[] memory _tokenIds); function buyCompleteSets(IMarket _market, address _account, uint256 _amount) external returns (bool); function buyCompleteSetsForTrade(IMarket _market, uint256 _amount, uint256 _longOutcome, address _longRecipient, address _shortRecipient) external returns (bool); function sellCompleteSets(IMarket _market, address _holder, address _recipient, uint256 _amount, bytes32 _fingerprint) external returns (uint256 _creatorFee, uint256 _reportingFee); function sellCompleteSetsForTrade(IMarket _market, uint256 _outcome, uint256 _amount, address _shortParticipant, address _longParticipant, address _shortRecipient, address _longRecipient, uint256 _price, address _sourceAccount, bytes32 _fingerprint) external returns (uint256 _creatorFee, uint256 _reportingFee); function totalSupplyForMarketOutcome(IMarket _market, uint256 _outcome) public view returns (uint256); function balanceOfMarketOutcome(IMarket _market, uint256 _outcome, address _account) public view returns (uint256); function lowestBalanceOfMarketOutcomes(IMarket _market, uint256[] memory _outcomes, address _account) public view returns (uint256); } contract IUniverse { function creationTime() external view returns (uint256); function marketBalance(address) external view returns (uint256); function fork() public returns (bool); function updateForkValues() public returns (bool); function getParentUniverse() public view returns (IUniverse); function createChildUniverse(uint256[] memory _parentPayoutNumerators) public returns (IUniverse); function getChildUniverse(bytes32 _parentPayoutDistributionHash) public view returns (IUniverse); function getReputationToken() public view returns (IV2ReputationToken); function getForkingMarket() public view returns (IMarket); function getForkEndTime() public view returns (uint256); function getForkReputationGoal() public view returns (uint256); function getParentPayoutDistributionHash() public view returns (bytes32); function getDisputeRoundDurationInSeconds(bool _initial) public view returns (uint256); function getOrCreateDisputeWindowByTimestamp(uint256 _timestamp, bool _initial) public returns (IDisputeWindow); function getOrCreateCurrentDisputeWindow(bool _initial) public returns (IDisputeWindow); function getOrCreateNextDisputeWindow(bool _initial) public returns (IDisputeWindow); function getOrCreatePreviousDisputeWindow(bool _initial) public returns (IDisputeWindow); function getOpenInterestInAttoCash() public view returns (uint256); function getTargetRepMarketCapInAttoCash() public view returns (uint256); function getOrCacheValidityBond() public returns (uint256); function getOrCacheDesignatedReportStake() public returns (uint256); function getOrCacheDesignatedReportNoShowBond() public returns (uint256); function getOrCacheMarketRepBond() public returns (uint256); function getOrCacheReportingFeeDivisor() public returns (uint256); function getDisputeThresholdForFork() public view returns (uint256); function getDisputeThresholdForDisputePacing() public view returns (uint256); function getInitialReportMinValue() public view returns (uint256); function getPayoutNumerators() public view returns (uint256[] memory); function getReportingFeeDivisor() public view returns (uint256); function getPayoutNumerator(uint256 _outcome) public view returns (uint256); function getWinningChildPayoutNumerator(uint256 _outcome) public view returns (uint256); function isOpenInterestCash(address) public view returns (bool); function isForkingMarket() public view returns (bool); function getCurrentDisputeWindow(bool _initial) public view returns (IDisputeWindow); function getDisputeWindowStartTimeAndDuration(uint256 _timestamp, bool _initial) public view returns (uint256, uint256); function isParentOf(IUniverse _shadyChild) public view returns (bool); function updateTentativeWinningChildUniverse(bytes32 _parentPayoutDistributionHash) public returns (bool); function isContainerForDisputeWindow(IDisputeWindow _shadyTarget) public view returns (bool); function isContainerForMarket(IMarket _shadyTarget) public view returns (bool); function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool); function migrateMarketOut(IUniverse _destinationUniverse) public returns (bool); function migrateMarketIn(IMarket _market, uint256 _cashBalance, uint256 _marketOI) public returns (bool); function decrementOpenInterest(uint256 _amount) public returns (bool); function decrementOpenInterestFromMarket(IMarket _market) public returns (bool); function incrementOpenInterest(uint256 _amount) public returns (bool); function getWinningChildUniverse() public view returns (IUniverse); function isForking() public view returns (bool); function deposit(address _sender, uint256 _amount, address _market) public returns (bool); function withdraw(address _recipient, uint256 _amount, address _market) public returns (bool); function createScalarMarket(uint256 _endTime, uint256 _feePerCashInAttoCash, IAffiliateValidator _affiliateValidator, uint256 _affiliateFeeDivisor, address _designatedReporterAddress, int256[] memory _prices, uint256 _numTicks, string memory _extraInfo) public returns (IMarket _newMarket); } contract IV2ReputationToken is IReputationToken { function parentUniverse() external returns (IUniverse); function burnForMarket(uint256 _amountToBurn) public returns (bool); function mintForWarpSync(uint256 _amountToMint, address _target) public returns (bool); } library Reporting { uint256 private constant DESIGNATED_REPORTING_DURATION_SECONDS = 1 days; uint256 private constant DISPUTE_ROUND_DURATION_SECONDS = 7 days; uint256 private constant INITIAL_DISPUTE_ROUND_DURATION_SECONDS = 1 days; uint256 private constant DISPUTE_WINDOW_BUFFER_SECONDS = 1 hours; uint256 private constant FORK_DURATION_SECONDS = 60 days; uint256 private constant BASE_MARKET_DURATION_MAXIMUM = 30 days; // A market of 30 day length can always be created uint256 private constant UPGRADE_CADENCE = 365 days; uint256 private constant INITIAL_UPGRADE_TIMESTAMP = 1627776000; // Aug 1st 2021 uint256 private constant INITIAL_REP_SUPPLY = 11 * 10 ** 6 * 10 ** 18; // 11 Million REP uint256 private constant AFFILIATE_SOURCE_CUT_DIVISOR = 5; // The trader gets 20% of the affiliate fee when an affiliate fee is taken uint256 private constant DEFAULT_VALIDITY_BOND = 10 ether; // 10 Cash (Dai) uint256 private constant VALIDITY_BOND_FLOOR = 10 ether; // 10 Cash (Dai) uint256 private constant DEFAULT_REPORTING_FEE_DIVISOR = 10000; // .01% fees uint256 private constant MAXIMUM_REPORTING_FEE_DIVISOR = 10000; // Minimum .01% fees uint256 private constant MINIMUM_REPORTING_FEE_DIVISOR = 3; // Maximum 33.3~% fees. Note than anything less than a value of 2 here will likely result in bugs such as divide by 0 cases. uint256 private constant TARGET_INVALID_MARKETS_DIVISOR = 100; // 1% of markets are expected to be invalid uint256 private constant TARGET_INCORRECT_DESIGNATED_REPORT_MARKETS_DIVISOR = 100; // 1% of markets are expected to have an incorrect designate report uint256 private constant TARGET_DESIGNATED_REPORT_NO_SHOWS_DIVISOR = 20; // 5% of markets are expected to have a no show uint256 private constant TARGET_REP_MARKET_CAP_MULTIPLIER = 5; // We multiply and divide by constants since we may want to multiply by a fractional amount uint256 private constant FORK_THRESHOLD_DIVISOR = 40; // 2.5% of the total REP supply being filled in a single dispute bond will trigger a fork uint256 private constant MAXIMUM_DISPUTE_ROUNDS = 20; // We ensure that after 20 rounds of disputes a fork will occur uint256 private constant MINIMUM_SLOW_ROUNDS = 8; // We ensure that at least 8 dispute rounds take DISPUTE_ROUND_DURATION_SECONDS+ seconds to complete until the next round begins function getDesignatedReportingDurationSeconds() internal pure returns (uint256) { return DESIGNATED_REPORTING_DURATION_SECONDS; } function getInitialDisputeRoundDurationSeconds() internal pure returns (uint256) { return INITIAL_DISPUTE_ROUND_DURATION_SECONDS; } function getDisputeWindowBufferSeconds() internal pure returns (uint256) { return DISPUTE_WINDOW_BUFFER_SECONDS; } function getDisputeRoundDurationSeconds() internal pure returns (uint256) { return DISPUTE_ROUND_DURATION_SECONDS; } function getForkDurationSeconds() internal pure returns (uint256) { return FORK_DURATION_SECONDS; } function getBaseMarketDurationMaximum() internal pure returns (uint256) { return BASE_MARKET_DURATION_MAXIMUM; } function getUpgradeCadence() internal pure returns (uint256) { return UPGRADE_CADENCE; } function getInitialUpgradeTimestamp() internal pure returns (uint256) { return INITIAL_UPGRADE_TIMESTAMP; } function getDefaultValidityBond() internal pure returns (uint256) { return DEFAULT_VALIDITY_BOND; } function getValidityBondFloor() internal pure returns (uint256) { return VALIDITY_BOND_FLOOR; } function getTargetInvalidMarketsDivisor() internal pure returns (uint256) { return TARGET_INVALID_MARKETS_DIVISOR; } function getTargetIncorrectDesignatedReportMarketsDivisor() internal pure returns (uint256) { return TARGET_INCORRECT_DESIGNATED_REPORT_MARKETS_DIVISOR; } function getTargetDesignatedReportNoShowsDivisor() internal pure returns (uint256) { return TARGET_DESIGNATED_REPORT_NO_SHOWS_DIVISOR; } function getTargetRepMarketCapMultiplier() internal pure returns (uint256) { return TARGET_REP_MARKET_CAP_MULTIPLIER; } function getMaximumReportingFeeDivisor() internal pure returns (uint256) { return MAXIMUM_REPORTING_FEE_DIVISOR; } function getMinimumReportingFeeDivisor() internal pure returns (uint256) { return MINIMUM_REPORTING_FEE_DIVISOR; } function getDefaultReportingFeeDivisor() internal pure returns (uint256) { return DEFAULT_REPORTING_FEE_DIVISOR; } function getInitialREPSupply() internal pure returns (uint256) { return INITIAL_REP_SUPPLY; } function getAffiliateSourceCutDivisor() internal pure returns (uint256) { return AFFILIATE_SOURCE_CUT_DIVISOR; } function getForkThresholdDivisor() internal pure returns (uint256) { return FORK_THRESHOLD_DIVISOR; } function getMaximumDisputeRounds() internal pure returns (uint256) { return MAXIMUM_DISPUTE_ROUNDS; } function getMinimumSlowRounds() internal pure returns (uint256) { return MINIMUM_SLOW_ROUNDS; } } contract IAugurTrading { function lookup(bytes32 _key) public view returns (address); function logProfitLossChanged(IMarket _market, address _account, uint256 _outcome, int256 _netPosition, uint256 _avgPrice, int256 _realizedProfit, int256 _frozenFunds, int256 _realizedCost) public returns (bool); function logOrderCreated(IUniverse _universe, bytes32 _orderId, bytes32 _tradeGroupId) public returns (bool); function logOrderCanceled(IUniverse _universe, IMarket _market, address _creator, uint256 _tokenRefund, uint256 _sharesRefund, bytes32 _orderId) public returns (bool); function logOrderFilled(IUniverse _universe, address _creator, address _filler, uint256 _price, uint256 _fees, uint256 _amountFilled, bytes32 _orderId, bytes32 _tradeGroupId) public returns (bool); function logMarketVolumeChanged(IUniverse _universe, address _market, uint256 _volume, uint256[] memory _outcomeVolumes, uint256 _totalTrades) public returns (bool); function logZeroXOrderFilled(IUniverse _universe, IMarket _market, bytes32 _orderHash, bytes32 _tradeGroupId, uint8 _orderType, address[] memory _addressData, uint256[] memory _uint256Data) public returns (bool); function logZeroXOrderCanceled(address _universe, address _market, address _account, uint256 _outcome, uint256 _price, uint256 _amount, uint8 _type, bytes32 _orderHash) public; } contract IOrders { function saveOrder(uint256[] calldata _uints, bytes32[] calldata _bytes32s, Order.Types _type, IMarket _market, address _sender) external returns (bytes32 _orderId); function removeOrder(bytes32 _orderId) external returns (bool); function getMarket(bytes32 _orderId) public view returns (IMarket); function getOrderType(bytes32 _orderId) public view returns (Order.Types); function getOutcome(bytes32 _orderId) public view returns (uint256); function getAmount(bytes32 _orderId) public view returns (uint256); function getPrice(bytes32 _orderId) public view returns (uint256); function getOrderCreator(bytes32 _orderId) public view returns (address); function getOrderSharesEscrowed(bytes32 _orderId) public view returns (uint256); function getOrderMoneyEscrowed(bytes32 _orderId) public view returns (uint256); function getOrderDataForCancel(bytes32 _orderId) public view returns (uint256, uint256, Order.Types, IMarket, uint256, address); function getOrderDataForLogs(bytes32 _orderId) public view returns (Order.Types, address[] memory _addressData, uint256[] memory _uint256Data); function getBetterOrderId(bytes32 _orderId) public view returns (bytes32); function getWorseOrderId(bytes32 _orderId) public view returns (bytes32); function getBestOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32); function getWorstOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32); function getLastOutcomePrice(IMarket _market, uint256 _outcome) public view returns (uint256); function getOrderId(Order.Types _type, IMarket _market, uint256 _amount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) public pure returns (bytes32); function getTotalEscrowed(IMarket _market) public view returns (uint256); function isBetterPrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool); function isWorsePrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool); function assertIsNotBetterPrice(Order.Types _type, uint256 _price, bytes32 _betterOrderId) public view returns (bool); function assertIsNotWorsePrice(Order.Types _type, uint256 _price, bytes32 _worseOrderId) public returns (bool); function recordFillOrder(bytes32 _orderId, uint256 _sharesFilled, uint256 _tokensFilled, uint256 _fill) external returns (bool); function setPrice(IMarket _market, uint256 _outcome, uint256 _price) external returns (bool); } library Order { using SafeMathUint256 for uint256; enum Types { Bid, Ask } enum TradeDirections { Long, Short } struct Data { // Contracts IMarket market; IAugur augur; IAugurTrading augurTrading; IShareToken shareToken; ICash cash; // Order bytes32 id; address creator; uint256 outcome; Order.Types orderType; uint256 amount; uint256 price; uint256 sharesEscrowed; uint256 moneyEscrowed; bytes32 betterOrderId; bytes32 worseOrderId; } function create(IAugur _augur, IAugurTrading _augurTrading, address _creator, uint256 _outcome, Order.Types _type, uint256 _attoshares, uint256 _price, IMarket _market, bytes32 _betterOrderId, bytes32 _worseOrderId) internal view returns (Data memory) { require(_outcome < _market.getNumberOfOutcomes(), "Order.create: Outcome is not within market range"); require(_price != 0, "Order.create: Price may not be 0"); require(_price < _market.getNumTicks(), "Order.create: Price is outside of market range"); require(_attoshares > 0, "Order.create: Cannot use amount of 0"); require(_creator != address(0), "Order.create: Creator is 0x0"); IShareToken _shareToken = IShareToken(_augur.lookup("ShareToken")); return Data({ market: _market, augur: _augur, augurTrading: _augurTrading, shareToken: _shareToken, cash: ICash(_augur.lookup("Cash")), id: 0, creator: _creator, outcome: _outcome, orderType: _type, amount: _attoshares, price: _price, sharesEscrowed: 0, moneyEscrowed: 0, betterOrderId: _betterOrderId, worseOrderId: _worseOrderId }); } // // "public" functions // function getOrderId(Order.Data memory _orderData, IOrders _orders) internal view returns (bytes32) { if (_orderData.id == bytes32(0)) { bytes32 _orderId = calculateOrderId(_orderData.orderType, _orderData.market, _orderData.amount, _orderData.price, _orderData.creator, block.number, _orderData.outcome, _orderData.moneyEscrowed, _orderData.sharesEscrowed); require(_orders.getAmount(_orderId) == 0, "Order.getOrderId: New order had amount. This should not be possible"); _orderData.id = _orderId; } return _orderData.id; } function calculateOrderId(Order.Types _type, IMarket _market, uint256 _amount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) internal pure returns (bytes32) { return sha256(abi.encodePacked(_type, _market, _amount, _price, _sender, _blockNumber, _outcome, _moneyEscrowed, _sharesEscrowed)); } function getOrderTradingTypeFromMakerDirection(Order.TradeDirections _creatorDirection) internal pure returns (Order.Types) { return (_creatorDirection == Order.TradeDirections.Long) ? Order.Types.Bid : Order.Types.Ask; } function getOrderTradingTypeFromFillerDirection(Order.TradeDirections _fillerDirection) internal pure returns (Order.Types) { return (_fillerDirection == Order.TradeDirections.Long) ? Order.Types.Ask : Order.Types.Bid; } function saveOrder(Order.Data memory _orderData, bytes32 _tradeGroupId, IOrders _orders) internal returns (bytes32) { getOrderId(_orderData, _orders); uint256[] memory _uints = new uint256[](5); _uints[0] = _orderData.amount; _uints[1] = _orderData.price; _uints[2] = _orderData.outcome; _uints[3] = _orderData.moneyEscrowed; _uints[4] = _orderData.sharesEscrowed; bytes32[] memory _bytes32s = new bytes32[](4); _bytes32s[0] = _orderData.betterOrderId; _bytes32s[1] = _orderData.worseOrderId; _bytes32s[2] = _tradeGroupId; _bytes32s[3] = _orderData.id; return _orders.saveOrder(_uints, _bytes32s, _orderData.orderType, _orderData.market, _orderData.creator); } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } contract Augur is IAugur, IAugurCreationDataGetter { using SafeMathUint256 for uint256; using ContractExists for address; enum TokenType { ReputationToken, DisputeCrowdsourcer, ParticipationToken } event MarketCreated(IUniverse indexed universe, uint256 endTime, string extraInfo, IMarket market, address indexed marketCreator, address designatedReporter, uint256 feePerCashInAttoCash, int256[] prices, IMarket.MarketType marketType, uint256 numTicks, bytes32[] outcomes, uint256 noShowBond, uint256 timestamp); event InitialReportSubmitted(address indexed universe, address indexed reporter, address indexed market, address initialReporter, uint256 amountStaked, bool isDesignatedReporter, uint256[] payoutNumerators, string description, uint256 nextWindowStartTime, uint256 nextWindowEndTime, uint256 timestamp); event DisputeCrowdsourcerCreated(address indexed universe, address indexed market, address disputeCrowdsourcer, uint256[] payoutNumerators, uint256 size, uint256 disputeRound); event DisputeCrowdsourcerContribution(address indexed universe, address indexed reporter, address indexed market, address disputeCrowdsourcer, uint256 amountStaked, string description, uint256[] payoutNumerators, uint256 currentStake, uint256 stakeRemaining, uint256 disputeRound, uint256 timestamp); event DisputeCrowdsourcerCompleted(address indexed universe, address indexed market, address disputeCrowdsourcer, uint256[] payoutNumerators, uint256 nextWindowStartTime, uint256 nextWindowEndTime, bool pacingOn, uint256 totalRepStakedInPayout, uint256 totalRepStakedInMarket, uint256 disputeRound, uint256 timestamp); event InitialReporterRedeemed(address indexed universe, address indexed reporter, address indexed market, address initialReporter, uint256 amountRedeemed, uint256 repReceived, uint256[] payoutNumerators, uint256 timestamp); event DisputeCrowdsourcerRedeemed(address indexed universe, address indexed reporter, address indexed market, address disputeCrowdsourcer, uint256 amountRedeemed, uint256 repReceived, uint256[] payoutNumerators, uint256 timestamp); event ReportingParticipantDisavowed(address indexed universe, address indexed market, address reportingParticipant); event MarketParticipantsDisavowed(address indexed universe, address indexed market); event MarketFinalized(address indexed universe, address indexed market, uint256 timestamp, uint256[] winningPayoutNumerators); event MarketMigrated(address indexed market, address indexed originalUniverse, address indexed newUniverse); event UniverseForked(address indexed universe, IMarket forkingMarket); event UniverseCreated(address indexed parentUniverse, address indexed childUniverse, uint256[] payoutNumerators, uint256 creationTimestamp); event CompleteSetsPurchased(address indexed universe, address indexed market, address indexed account, uint256 numCompleteSets, uint256 timestamp); event CompleteSetsSold(address indexed universe, address indexed market, address indexed account, uint256 numCompleteSets, uint256 fees, uint256 timestamp); event TradingProceedsClaimed(address indexed universe, address indexed sender, address market, uint256 outcome, uint256 numShares, uint256 numPayoutTokens, uint256 fees, uint256 timestamp); event TokensTransferred(address indexed universe, address token, address indexed from, address indexed to, uint256 value, TokenType tokenType, address market); event TokensMinted(address indexed universe, address indexed token, address indexed target, uint256 amount, TokenType tokenType, address market, uint256 totalSupply); event TokensBurned(address indexed universe, address indexed token, address indexed target, uint256 amount, TokenType tokenType, address market, uint256 totalSupply); event TokenBalanceChanged(address indexed universe, address indexed owner, address token, TokenType tokenType, address market, uint256 balance, uint256 outcome); event DisputeWindowCreated(address indexed universe, address disputeWindow, uint256 startTime, uint256 endTime, uint256 id, bool initial); event InitialReporterTransferred(address indexed universe, address indexed market, address from, address to); event MarketTransferred(address indexed universe, address indexed market, address from, address to); event MarketOIChanged(address indexed universe, address indexed market, uint256 marketOI); event ParticipationTokensRedeemed(address indexed universe, address indexed disputeWindow, address indexed account, uint256 attoParticipationTokens, uint256 feePayoutShare, uint256 timestamp); event TimestampSet(uint256 newTimestamp); event ValidityBondChanged(address indexed universe, uint256 validityBond); event DesignatedReportStakeChanged(address indexed universe, uint256 designatedReportStake); event NoShowBondChanged(address indexed universe, uint256 noShowBond); event ReportingFeeChanged(address indexed universe, uint256 reportingFee); event ShareTokenBalanceChanged(address indexed universe, address indexed account, address indexed market, uint256 outcome, uint256 balance); event MarketRepBondTransferred(address indexed universe, address market, address from, address to); event WarpSyncDataUpdated(address indexed universe, uint256 warpSyncHash, uint256 marketEndTime); event RegisterContract(address contractAddress, bytes32 key); event FinishDeployment(); mapping(address => bool) private markets; mapping(address => bool) private universes; mapping(address => bool) private crowdsourcers; mapping(address => bool) private trustedSender; mapping(address => MarketCreationData) private marketCreationData; address public uploader; mapping(bytes32 => address) private registry; ITime public time; IUniverse public genesisUniverse; uint256 public forkCounter; mapping (address => uint256) universeForkIndex; uint256 public upgradeTimestamp = Reporting.getInitialUpgradeTimestamp(); int256 private constant DEFAULT_MIN_PRICE = 0; int256 private constant DEFAULT_MAX_PRICE = 1 ether; uint256 constant public TRADE_INTERVAL_VALUE = 10 ** 19; // Trade value of 10 DAI uint256 constant public MIN_TRADE_INTERVAL = 10**14; // We ignore "dust" portions of the min interval and for huge scalars have a larger min value uint256 constant public DEFAULT_RECOMMENDED_TRADE_INTERVAL = 10**16; uint256 private constant MAX_NUM_TICKS = 2 ** 256 - 2; ICash public cash; modifier onlyUploader() { require(msg.sender == uploader); _; } constructor() public { uploader = msg.sender; } // // Registry // function registerContract(bytes32 _key, address _address) public onlyUploader returns (bool) { require(registry[_key] == address(0), "Augur.registerContract: key has already been used in registry"); require(_address.exists()); registry[_key] = _address; if (_key == "ShareToken" || _key == "MarketFactory" || _key == "EthExchange") { trustedSender[_address] = true; } else if (_key == "Time") { time = ITime(_address); } else if (_key == "Cash") { cash = ICash(_address); } emit RegisterContract(_address, _key); return true; } /** * @notice Find the contract address for a particular key * @param _key The key to lookup * @return the address of the registered contract if one exists for the given key */ function lookup(bytes32 _key) public view returns (address) { return registry[_key]; } function finishDeployment() public onlyUploader returns (bool) { uploader = address(1); emit FinishDeployment(); return true; } // // Universe // function createGenesisUniverse() public onlyUploader returns (IUniverse) { require(genesisUniverse == IUniverse(0)); genesisUniverse = createUniverse(IUniverse(0), bytes32(0), new uint256[](0)); return genesisUniverse; } function createChildUniverse(bytes32 _parentPayoutDistributionHash, uint256[] memory _parentPayoutNumerators) public returns (IUniverse) { IUniverse _parentUniverse = getAndValidateUniverse(msg.sender); return createUniverse(_parentUniverse, _parentPayoutDistributionHash, _parentPayoutNumerators); } function createUniverse(IUniverse _parentUniverse, bytes32 _parentPayoutDistributionHash, uint256[] memory _parentPayoutNumerators) private returns (IUniverse) { IUniverseFactory _universeFactory = IUniverseFactory(registry["UniverseFactory"]); IUniverse _newUniverse = _universeFactory.createUniverse(_parentUniverse, _parentPayoutDistributionHash, _parentPayoutNumerators); universes[address(_newUniverse)] = true; trustedSender[address(_newUniverse)] = true; emit UniverseCreated(address(_parentUniverse), address(_newUniverse), _parentPayoutNumerators, getTimestamp()); return _newUniverse; } function isKnownUniverse(IUniverse _universe) public view returns (bool) { return universes[address(_universe)]; } function getUniverseForkIndex(IUniverse _universe) public view returns (uint256) { return universeForkIndex[address(_universe)]; } // // Crowdsourcers // function isKnownCrowdsourcer(IDisputeCrowdsourcer _crowdsourcer) public view returns (bool) { return crowdsourcers[address(_crowdsourcer)]; } function disputeCrowdsourcerCreated(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] memory _payoutNumerators, uint256 _size, uint256 _disputeRound) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForMarket(IMarket(msg.sender))); crowdsourcers[_disputeCrowdsourcer] = true; emit DisputeCrowdsourcerCreated(address(_universe), _market, _disputeCrowdsourcer, _payoutNumerators, _size, _disputeRound); return true; } function isKnownFeeSender(address _feeSender) public view returns (bool) { return _feeSender == registry["ShareToken"] || markets[_feeSender]; } // // Transfer // function trustedCashTransfer(address _from, address _to, uint256 _amount) public returns (bool) { require(trustedSender[msg.sender]); require(cash.transferFrom(_from, _to, _amount)); return true; } function isTrustedSender(address _address) public returns (bool) { return trustedSender[_address]; } // // Time // /// @notice Returns Augur’s internal Unix timestamp. /// @return (uint256) Augur’s internal Unix timestamp function getTimestamp() public view returns (uint256) { return time.getTimestamp(); } // // Markets // function isKnownMarket(IMarket _market) public view returns (bool) { return markets[address(_market)]; } function getMaximumMarketEndDate() public returns (uint256) { uint256 _now = getTimestamp(); while (_now > upgradeTimestamp) { upgradeTimestamp = upgradeTimestamp.add(Reporting.getUpgradeCadence()); } uint256 _upgradeCadenceDurationEndTime = upgradeTimestamp; uint256 _baseDurationEndTime = _now + Reporting.getBaseMarketDurationMaximum(); return _baseDurationEndTime.max(_upgradeCadenceDurationEndTime); } function derivePayoutDistributionHash(uint256[] memory _payoutNumerators, uint256 _numTicks, uint256 _numOutcomes) public view returns (bytes32) { uint256 _sum = 0; // This is to force an Invalid report to be entirely payed out to Invalid require(_payoutNumerators[0] == 0 || _payoutNumerators[0] == _numTicks); require(_payoutNumerators.length == _numOutcomes, "Augur.derivePayoutDistributionHash: Malformed payout length"); for (uint256 i = 0; i < _payoutNumerators.length; i++) { uint256 _value = _payoutNumerators[i]; _sum = _sum.add(_value); } require(_sum == _numTicks, "Augur.derivePayoutDistributionHash: Malformed payout sum"); return keccak256(abi.encodePacked(_payoutNumerators)); } function getMarketCreationData(IMarket _market) public view returns (MarketCreationData memory) { return marketCreationData[address(_market)]; } function getMarketType(IMarket _market) public view returns (IMarket.MarketType _marketType) { return marketCreationData[address(_market)].marketType; } function getMarketOutcomes(IMarket _market) public view returns (bytes32[] memory _outcomes) { return marketCreationData[address(_market)].outcomes; } function getMarketRecommendedTradeInterval(IMarket _market) public view returns (uint256) { return marketCreationData[address(_market)].recommendedTradeInterval; } // // Logging // function onCategoricalMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash, bytes32[] memory _outcomes) public returns (bool) { IUniverse _universe = getAndValidateUniverse(msg.sender); markets[address(_market)] = true; int256[] memory _prices = new int256[](2); _prices[0] = DEFAULT_MIN_PRICE; _prices[1] = DEFAULT_MAX_PRICE; marketCreationData[address(_market)].extraInfo = _extraInfo; marketCreationData[address(_market)].marketCreator = _marketCreator; marketCreationData[address(_market)].outcomes = _outcomes; marketCreationData[address(_market)].marketType = IMarket.MarketType.CATEGORICAL; marketCreationData[address(_market)].recommendedTradeInterval = DEFAULT_RECOMMENDED_TRADE_INTERVAL; emit MarketCreated(_universe, _endTime, _extraInfo, _market, _marketCreator, _designatedReporter, _feePerCashInAttoCash, _prices, IMarket.MarketType.CATEGORICAL, 1000, _outcomes, _universe.getOrCacheMarketRepBond(), getTimestamp()); return true; } function onYesNoMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash) public returns (bool) { IUniverse _universe = getAndValidateUniverse(msg.sender); markets[address(_market)] = true; int256[] memory _prices = new int256[](2); _prices[0] = DEFAULT_MIN_PRICE; _prices[1] = DEFAULT_MAX_PRICE; marketCreationData[address(_market)].extraInfo = _extraInfo; marketCreationData[address(_market)].marketCreator = _marketCreator; marketCreationData[address(_market)].marketType = IMarket.MarketType.YES_NO; marketCreationData[address(_market)].recommendedTradeInterval = DEFAULT_RECOMMENDED_TRADE_INTERVAL; emit MarketCreated(_universe, _endTime, _extraInfo, _market, _marketCreator, _designatedReporter, _feePerCashInAttoCash, _prices, IMarket.MarketType.YES_NO, 1000, new bytes32[](0), _universe.getOrCacheMarketRepBond(), getTimestamp()); return true; } function onScalarMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash, int256[] memory _prices, uint256 _numTicks) public returns (bool) { IUniverse _universe = getAndValidateUniverse(msg.sender); require(_prices.length == 2); require(_prices[0] < _prices[1]); uint256 _priceRange = uint256(_prices[1] - _prices[0]); require(_priceRange > _numTicks); markets[address(_market)] = true; marketCreationData[address(_market)].extraInfo = _extraInfo; marketCreationData[address(_market)].marketCreator = _marketCreator; marketCreationData[address(_market)].displayPrices = _prices; marketCreationData[address(_market)].marketType = IMarket.MarketType.SCALAR; marketCreationData[address(_market)].recommendedTradeInterval = getTradeInterval(_priceRange, _numTicks); emit MarketCreated(_universe, _endTime, _extraInfo, _market, _marketCreator, _designatedReporter, _feePerCashInAttoCash, _prices, IMarket.MarketType.SCALAR, _numTicks, new bytes32[](0), _universe.getOrCacheMarketRepBond(), getTimestamp()); return true; } function getTradeInterval(uint256 _displayRange, uint256 _numTicks) public pure returns (uint256) { // Handle Warp Sync Market if (_numTicks == MAX_NUM_TICKS) { return MIN_TRADE_INTERVAL; } uint256 _displayAmount = TRADE_INTERVAL_VALUE.mul(10**18).div(_displayRange); uint256 _displayInterval = MIN_TRADE_INTERVAL; while (_displayInterval < _displayAmount) { _displayInterval = _displayInterval.mul(10); } _displayAmount = _displayInterval; return _displayInterval.mul(_displayRange).div(_numTicks).div(10**18); } function logInitialReportSubmitted(IUniverse _universe, address _reporter, address _market, address _initialReporter, uint256 _amountStaked, bool _isDesignatedReporter, uint256[] memory _payoutNumerators, string memory _description, uint256 _nextWindowStartTime, uint256 _nextWindowEndTime) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForMarket(IMarket(msg.sender))); emit InitialReportSubmitted(address(_universe), _reporter, _market, _initialReporter, _amountStaked, _isDesignatedReporter, _payoutNumerators, _description, _nextWindowStartTime, _nextWindowEndTime, getTimestamp()); return true; } function logDisputeCrowdsourcerContribution(IUniverse _universe, address _reporter, address _market, address _disputeCrowdsourcer, uint256 _amountStaked, string memory _description, uint256[] memory _payoutNumerators, uint256 _currentStake, uint256 _stakeRemaining, uint256 _disputeRound) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForMarket(IMarket(msg.sender))); emit DisputeCrowdsourcerContribution(address(_universe), _reporter, _market, _disputeCrowdsourcer, _amountStaked, _description, _payoutNumerators, _currentStake, _stakeRemaining, _disputeRound, getTimestamp()); return true; } function logDisputeCrowdsourcerCompleted(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] memory _payoutNumerators, uint256 _nextWindowStartTime, uint256 _nextWindowEndTime, bool _pacingOn, uint256 _totalRepStakedInPayout, uint256 _totalRepStakedInMarket, uint256 _disputeRound) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForMarket(IMarket(msg.sender))); emit DisputeCrowdsourcerCompleted(address(_universe), _market, _disputeCrowdsourcer, _payoutNumerators, _nextWindowStartTime, _nextWindowEndTime, _pacingOn, _totalRepStakedInPayout, _totalRepStakedInMarket, _disputeRound, getTimestamp()); return true; } function logInitialReporterRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256[] memory _payoutNumerators) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForReportingParticipant(IReportingParticipant(msg.sender))); emit InitialReporterRedeemed(address(_universe), _reporter, _market, msg.sender, _amountRedeemed, _repReceived, _payoutNumerators, getTimestamp()); return true; } function logDisputeCrowdsourcerRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256[] memory _payoutNumerators) public returns (bool) { IDisputeCrowdsourcer _disputeCrowdsourcer = IDisputeCrowdsourcer(msg.sender); require(isKnownCrowdsourcer(_disputeCrowdsourcer)); emit DisputeCrowdsourcerRedeemed(address(_universe), _reporter, _market, address(_disputeCrowdsourcer), _amountRedeemed, _repReceived, _payoutNumerators, getTimestamp()); return true; } function logReportingParticipantDisavowed(IUniverse _universe, IMarket _market) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForReportingParticipant(IReportingParticipant(msg.sender))); emit ReportingParticipantDisavowed(address(_universe), address(_market), msg.sender); return true; } function logMarketParticipantsDisavowed(IUniverse _universe) public returns (bool) { require(isKnownUniverse(_universe)); IMarket _market = IMarket(msg.sender); require(_universe.isContainerForMarket(_market)); emit MarketParticipantsDisavowed(address(_universe), address(_market)); return true; } function logMarketFinalized(IUniverse _universe, uint256[] memory _winningPayoutNumerators) public returns (bool) { require(isKnownUniverse(_universe)); IMarket _market = IMarket(msg.sender); require(_universe.isContainerForMarket(_market)); emit MarketFinalized(address(_universe), address(_market), getTimestamp(), _winningPayoutNumerators); return true; } function logMarketMigrated(IMarket _market, IUniverse _originalUniverse) public returns (bool) { IUniverse _newUniverse = IUniverse(msg.sender); require(isKnownUniverse(_newUniverse)); emit MarketMigrated(address(_market), address(_originalUniverse), address(_newUniverse)); return true; } function logCompleteSetsPurchased(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool) { require(msg.sender == registry["ShareToken"] || (isKnownUniverse(_universe) && _universe.isOpenInterestCash(msg.sender))); emit CompleteSetsPurchased(address(_universe), address(_market), _account, _numCompleteSets, getTimestamp()); return true; } function logCompleteSetsSold(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets, uint256 _fees) public returns (bool) { require(msg.sender == registry["ShareToken"]); emit CompleteSetsSold(address(_universe), address(_market), _account, _numCompleteSets, _fees, getTimestamp()); return true; } function logMarketOIChanged(IUniverse _universe, IMarket _market) public returns (bool) { require(msg.sender == registry["ShareToken"]); emit MarketOIChanged(address(_universe), address(_market), _market.getOpenInterest()); return true; } function logTradingProceedsClaimed(IUniverse _universe, address _sender, address _market, uint256 _outcome, uint256 _numShares, uint256 _numPayoutTokens, uint256 _fees) public returns (bool) { require(msg.sender == registry["ShareToken"]); emit TradingProceedsClaimed(address(_universe), _sender, _market, _outcome, _numShares, _numPayoutTokens, _fees, getTimestamp()); return true; } function logUniverseForked(IMarket _forkingMarket) public returns (bool) { require(isKnownUniverse(IUniverse(msg.sender))); forkCounter += 1; universeForkIndex[msg.sender] = forkCounter; emit UniverseForked(msg.sender, _forkingMarket); return true; } function logReputationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.getReputationToken() == IReputationToken(msg.sender)); logTokensTransferred(address(_universe), msg.sender, _from, _to, _value, TokenType.ReputationToken, address(0), _fromBalance, _toBalance, 0); return true; } function logDisputeCrowdsourcerTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool) { IDisputeCrowdsourcer _disputeCrowdsourcer = IDisputeCrowdsourcer(msg.sender); require(isKnownCrowdsourcer(_disputeCrowdsourcer)); logTokensTransferred(address(_universe), msg.sender, _from, _to, _value, TokenType.DisputeCrowdsourcer, address(_disputeCrowdsourcer.getMarket()), _fromBalance, _toBalance, 0); return true; } function logReputationTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.getReputationToken() == IReputationToken(msg.sender)); logTokensBurned(address(_universe), msg.sender, _target, _amount, TokenType.ReputationToken, address(0), _totalSupply, _balance, 0); return true; } function logReputationTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.getReputationToken() == IReputationToken(msg.sender)); logTokensMinted(address(_universe), msg.sender, _target, _amount, TokenType.ReputationToken, address(0), _totalSupply, _balance, 0); return true; } function logShareTokensBalanceChanged(address _account, IMarket _market, uint256 _outcome, uint256 _balance) public returns (bool) { require(msg.sender == registry["ShareToken"]); emit ShareTokenBalanceChanged(address(_market.getUniverse()), _account, address(_market), _outcome, _balance); return true; } function logDisputeCrowdsourcerTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool) { IDisputeCrowdsourcer _disputeCrowdsourcer = IDisputeCrowdsourcer(msg.sender); require(isKnownCrowdsourcer(_disputeCrowdsourcer)); logTokensBurned(address(_universe), msg.sender, _target, _amount, TokenType.DisputeCrowdsourcer, address(_disputeCrowdsourcer.getMarket()), _totalSupply, _balance, 0); return true; } function logDisputeCrowdsourcerTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool) { IDisputeCrowdsourcer _disputeCrowdsourcer = IDisputeCrowdsourcer(msg.sender); require(isKnownCrowdsourcer(_disputeCrowdsourcer)); logTokensMinted(address(_universe), msg.sender, _target, _amount, TokenType.DisputeCrowdsourcer, address(_disputeCrowdsourcer.getMarket()), _totalSupply, _balance, 0); return true; } function logDisputeWindowCreated(IDisputeWindow _disputeWindow, uint256 _id, bool _initial) public returns (bool) { require(isKnownUniverse(IUniverse(msg.sender))); emit DisputeWindowCreated(msg.sender, address(_disputeWindow), _disputeWindow.getStartTime(), _disputeWindow.getEndTime(), _id, _initial); return true; } function logParticipationTokensRedeemed(IUniverse _universe, address _account, uint256 _attoParticipationTokens, uint256 _feePayoutShare) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForDisputeWindow(IDisputeWindow(msg.sender))); emit ParticipationTokensRedeemed(address(_universe), msg.sender, _account, _attoParticipationTokens, _feePayoutShare, getTimestamp()); return true; } function logTimestampSet(uint256 _newTimestamp) public returns (bool) { require(msg.sender == registry["Time"]); emit TimestampSet(_newTimestamp); return true; } function logInitialReporterTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForMarket(_market)); require(msg.sender == address(_market.getInitialReporter())); emit InitialReporterTransferred(address(_universe), address(_market), _from, _to); return true; } function logMarketTransferred(IUniverse _universe, address _from, address _to) public returns (bool) { require(isKnownUniverse(_universe)); IMarket _market = IMarket(msg.sender); require(_universe.isContainerForMarket(_market)); emit MarketTransferred(address(_universe), address(_market), _from, _to); return true; } function logParticipationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForDisputeWindow(IDisputeWindow(msg.sender))); logTokensTransferred(address(_universe), msg.sender, _from, _to, _value, TokenType.ParticipationToken, address(0), _fromBalance, _toBalance, 0); return true; } function logParticipationTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForDisputeWindow(IDisputeWindow(msg.sender))); logTokensBurned(address(_universe), msg.sender, _target, _amount, TokenType.ParticipationToken, address(0), _totalSupply, _balance, 0); return true; } function logParticipationTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool) { require(isKnownUniverse(_universe)); require(_universe.isContainerForDisputeWindow(IDisputeWindow(msg.sender))); logTokensMinted(address(_universe), msg.sender, _target, _amount, TokenType.ParticipationToken, address(0), _totalSupply, _balance, 0); return true; } function logTokensTransferred(address _universe, address _token, address _from, address _to, uint256 _amount, TokenType _tokenType, address _market, uint256 _fromBalance, uint256 _toBalance, uint256 _outcome) private returns (bool) { emit TokensTransferred(_universe, _token, _from, _to, _amount, _tokenType, _market); emit TokenBalanceChanged(_universe, _from, _token, _tokenType, _market, _fromBalance, _outcome); emit TokenBalanceChanged(_universe, _to, _token, _tokenType, _market, _toBalance, _outcome); return true; } function logTokensBurned(address _universe, address _token, address _target, uint256 _amount, TokenType _tokenType, address _market, uint256 _totalSupply, uint256 _balance, uint256 _outcome) private returns (bool) { emit TokensBurned(_universe, _token, _target, _amount, _tokenType, _market, _totalSupply); emit TokenBalanceChanged(_universe, _target, _token, _tokenType, _market, _balance, _outcome); return true; } function logTokensMinted(address _universe, address _token, address _target, uint256 _amount, TokenType _tokenType, address _market, uint256 _totalSupply, uint256 _balance, uint256 _outcome) private returns (bool) { emit TokensMinted(_universe, _token, _target, _amount, _tokenType, _market, _totalSupply); emit TokenBalanceChanged(_universe, _target, _token, _tokenType, _market, _balance, _outcome); return true; } function logValidityBondChanged(uint256 _validityBond) public returns (bool) { IUniverse _universe = getAndValidateUniverse(msg.sender); emit ValidityBondChanged(address(_universe), _validityBond); return true; } function logDesignatedReportStakeChanged(uint256 _designatedReportStake) public returns (bool) { IUniverse _universe = getAndValidateUniverse(msg.sender); emit DesignatedReportStakeChanged(address(_universe), _designatedReportStake); return true; } function logNoShowBondChanged(uint256 _noShowBond) public returns (bool) { IUniverse _universe = getAndValidateUniverse(msg.sender); emit NoShowBondChanged(address(_universe), _noShowBond); return true; } function logReportingFeeChanged(uint256 _reportingFee) public returns (bool) { IUniverse _universe = getAndValidateUniverse(msg.sender); emit ReportingFeeChanged(address(_universe), _reportingFee); return true; } function logMarketRepBondTransferred(address _universe, address _from, address _to) public returns (bool) { require(isKnownMarket(IMarket(msg.sender))); emit MarketRepBondTransferred(_universe, msg.sender, _from, _to); } function logWarpSyncDataUpdated(address _universe, uint256 _warpSyncHash, uint256 _marketEndTime) public returns (bool) { require(msg.sender == registry["WarpSync"]); emit WarpSyncDataUpdated(_universe, _warpSyncHash, _marketEndTime); } function getAndValidateUniverse(address _untrustedUniverse) internal view returns (IUniverse) { IUniverse _universe = IUniverse(_untrustedUniverse); require(isKnownUniverse(_universe)); return _universe; } }
{ "remappings": [ "ROOT=/home/achapman/augur/packages/augur-core/src/contracts//" ], "optimizer": { "enabled": true, "runs": 200, "details": { "yul": true, "deduplicate": true, "cse": true, "constantOptimizer": true } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"numCompleteSets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"CompleteSetsPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"numCompleteSets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"CompleteSetsSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":false,"internalType":"uint256","name":"designatedReportStake","type":"uint256"}],"name":"DesignatedReportStakeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"address","name":"disputeCrowdsourcer","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"payoutNumerators","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"nextWindowStartTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextWindowEndTime","type":"uint256"},{"indexed":false,"internalType":"bool","name":"pacingOn","type":"bool"},{"indexed":false,"internalType":"uint256","name":"totalRepStakedInPayout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalRepStakedInMarket","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"disputeRound","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisputeCrowdsourcerCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"reporter","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"address","name":"disputeCrowdsourcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountStaked","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"},{"indexed":false,"internalType":"uint256[]","name":"payoutNumerators","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"currentStake","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeRemaining","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"disputeRound","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisputeCrowdsourcerContribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"address","name":"disputeCrowdsourcer","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"payoutNumerators","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"disputeRound","type":"uint256"}],"name":"DisputeCrowdsourcerCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"reporter","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"address","name":"disputeCrowdsourcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountRedeemed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"repReceived","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"payoutNumerators","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisputeCrowdsourcerRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":false,"internalType":"address","name":"disputeWindow","type":"address"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bool","name":"initial","type":"bool"}],"name":"DisputeWindowCreated","type":"event"},{"anonymous":false,"inputs":[],"name":"FinishDeployment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"reporter","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"address","name":"initialReporter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountStaked","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isDesignatedReporter","type":"bool"},{"indexed":false,"internalType":"uint256[]","name":"payoutNumerators","type":"uint256[]"},{"indexed":false,"internalType":"string","name":"description","type":"string"},{"indexed":false,"internalType":"uint256","name":"nextWindowStartTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextWindowEndTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"InitialReportSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"reporter","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"address","name":"initialReporter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountRedeemed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"repReceived","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"payoutNumerators","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"InitialReporterRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"InitialReporterTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IUniverse","name":"universe","type":"address"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"string","name":"extraInfo","type":"string"},{"indexed":false,"internalType":"contract IMarket","name":"market","type":"address"},{"indexed":true,"internalType":"address","name":"marketCreator","type":"address"},{"indexed":false,"internalType":"address","name":"designatedReporter","type":"address"},{"indexed":false,"internalType":"uint256","name":"feePerCashInAttoCash","type":"uint256"},{"indexed":false,"internalType":"int256[]","name":"prices","type":"int256[]"},{"indexed":false,"internalType":"enum IMarket.MarketType","name":"marketType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"numTicks","type":"uint256"},{"indexed":false,"internalType":"bytes32[]","name":"outcomes","type":"bytes32[]"},{"indexed":false,"internalType":"uint256","name":"noShowBond","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"MarketCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"winningPayoutNumerators","type":"uint256[]"}],"name":"MarketFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":true,"internalType":"address","name":"originalUniverse","type":"address"},{"indexed":true,"internalType":"address","name":"newUniverse","type":"address"}],"name":"MarketMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"uint256","name":"marketOI","type":"uint256"}],"name":"MarketOIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"}],"name":"MarketParticipantsDisavowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":false,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"MarketRepBondTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"MarketTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":false,"internalType":"uint256","name":"noShowBond","type":"uint256"}],"name":"NoShowBondChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"disputeWindow","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"attoParticipationTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feePayoutShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ParticipationTokensRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"RegisterContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":false,"internalType":"uint256","name":"reportingFee","type":"uint256"}],"name":"ReportingFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"address","name":"reportingParticipant","type":"address"}],"name":"ReportingParticipantDisavowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"uint256","name":"outcome","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"ShareTokenBalanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTimestamp","type":"uint256"}],"name":"TimestampSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"enum Augur.TokenType","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outcome","type":"uint256"}],"name":"TokenBalanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum Augur.TokenType","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum Augur.TokenType","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"TokensMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"enum Augur.TokenType","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"address","name":"market","type":"address"}],"name":"TokensTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"uint256","name":"outcome","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numPayoutTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingProceedsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"parentUniverse","type":"address"},{"indexed":true,"internalType":"address","name":"childUniverse","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"payoutNumerators","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"creationTimestamp","type":"uint256"}],"name":"UniverseCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":false,"internalType":"contract IMarket","name":"forkingMarket","type":"address"}],"name":"UniverseForked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":false,"internalType":"uint256","name":"validityBond","type":"uint256"}],"name":"ValidityBondChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"universe","type":"address"},{"indexed":false,"internalType":"uint256","name":"warpSyncHash","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketEndTime","type":"uint256"}],"name":"WarpSyncDataUpdated","type":"event"},{"constant":true,"inputs":[],"name":"DEFAULT_RECOMMENDED_TRADE_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_TRADE_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TRADE_INTERVAL_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cash","outputs":[{"internalType":"contract ICash","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_parentPayoutDistributionHash","type":"bytes32"},{"internalType":"uint256[]","name":"_parentPayoutNumerators","type":"uint256[]"}],"name":"createChildUniverse","outputs":[{"internalType":"contract IUniverse","name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"createGenesisUniverse","outputs":[{"internalType":"contract IUniverse","name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256[]","name":"_payoutNumerators","type":"uint256[]"},{"internalType":"uint256","name":"_numTicks","type":"uint256"},{"internalType":"uint256","name":"_numOutcomes","type":"uint256"}],"name":"derivePayoutDistributionHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_market","type":"address"},{"internalType":"address","name":"_disputeCrowdsourcer","type":"address"},{"internalType":"uint256[]","name":"_payoutNumerators","type":"uint256[]"},{"internalType":"uint256","name":"_size","type":"uint256"},{"internalType":"uint256","name":"_disputeRound","type":"uint256"}],"name":"disputeCrowdsourcerCreated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finishDeployment","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"forkCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"genesisUniverse","outputs":[{"internalType":"contract IUniverse","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IMarket","name":"_market","type":"address"}],"name":"getMarketCreationData","outputs":[{"components":[{"internalType":"string","name":"extraInfo","type":"string"},{"internalType":"address","name":"marketCreator","type":"address"},{"internalType":"bytes32[]","name":"outcomes","type":"bytes32[]"},{"internalType":"int256[]","name":"displayPrices","type":"int256[]"},{"internalType":"enum IMarket.MarketType","name":"marketType","type":"uint8"},{"internalType":"uint256","name":"recommendedTradeInterval","type":"uint256"}],"internalType":"struct IAugurCreationDataGetter.MarketCreationData","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IMarket","name":"_market","type":"address"}],"name":"getMarketOutcomes","outputs":[{"internalType":"bytes32[]","name":"_outcomes","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IMarket","name":"_market","type":"address"}],"name":"getMarketRecommendedTradeInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IMarket","name":"_market","type":"address"}],"name":"getMarketType","outputs":[{"internalType":"enum IMarket.MarketType","name":"_marketType","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getMaximumMarketEndDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_displayRange","type":"uint256"},{"internalType":"uint256","name":"_numTicks","type":"uint256"}],"name":"getTradeInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"}],"name":"getUniverseForkIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IDisputeCrowdsourcer","name":"_crowdsourcer","type":"address"}],"name":"isKnownCrowdsourcer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_feeSender","type":"address"}],"name":"isKnownFeeSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IMarket","name":"_market","type":"address"}],"name":"isKnownMarket","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"}],"name":"isKnownUniverse","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isTrustedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"contract IMarket","name":"_market","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_numCompleteSets","type":"uint256"}],"name":"logCompleteSetsPurchased","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"contract IMarket","name":"_market","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_numCompleteSets","type":"uint256"},{"internalType":"uint256","name":"_fees","type":"uint256"}],"name":"logCompleteSetsSold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_designatedReportStake","type":"uint256"}],"name":"logDesignatedReportStakeChanged","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_market","type":"address"},{"internalType":"address","name":"_disputeCrowdsourcer","type":"address"},{"internalType":"uint256[]","name":"_payoutNumerators","type":"uint256[]"},{"internalType":"uint256","name":"_nextWindowStartTime","type":"uint256"},{"internalType":"uint256","name":"_nextWindowEndTime","type":"uint256"},{"internalType":"bool","name":"_pacingOn","type":"bool"},{"internalType":"uint256","name":"_totalRepStakedInPayout","type":"uint256"},{"internalType":"uint256","name":"_totalRepStakedInMarket","type":"uint256"},{"internalType":"uint256","name":"_disputeRound","type":"uint256"}],"name":"logDisputeCrowdsourcerCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_reporter","type":"address"},{"internalType":"address","name":"_market","type":"address"},{"internalType":"address","name":"_disputeCrowdsourcer","type":"address"},{"internalType":"uint256","name":"_amountStaked","type":"uint256"},{"internalType":"string","name":"_description","type":"string"},{"internalType":"uint256[]","name":"_payoutNumerators","type":"uint256[]"},{"internalType":"uint256","name":"_currentStake","type":"uint256"},{"internalType":"uint256","name":"_stakeRemaining","type":"uint256"},{"internalType":"uint256","name":"_disputeRound","type":"uint256"}],"name":"logDisputeCrowdsourcerContribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_reporter","type":"address"},{"internalType":"address","name":"_market","type":"address"},{"internalType":"uint256","name":"_amountRedeemed","type":"uint256"},{"internalType":"uint256","name":"_repReceived","type":"uint256"},{"internalType":"uint256[]","name":"_payoutNumerators","type":"uint256[]"}],"name":"logDisputeCrowdsourcerRedeemed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"logDisputeCrowdsourcerTokensBurned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"logDisputeCrowdsourcerTokensMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_fromBalance","type":"uint256"},{"internalType":"uint256","name":"_toBalance","type":"uint256"}],"name":"logDisputeCrowdsourcerTokensTransferred","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IDisputeWindow","name":"_disputeWindow","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_initial","type":"bool"}],"name":"logDisputeWindowCreated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_reporter","type":"address"},{"internalType":"address","name":"_market","type":"address"},{"internalType":"address","name":"_initialReporter","type":"address"},{"internalType":"uint256","name":"_amountStaked","type":"uint256"},{"internalType":"bool","name":"_isDesignatedReporter","type":"bool"},{"internalType":"uint256[]","name":"_payoutNumerators","type":"uint256[]"},{"internalType":"string","name":"_description","type":"string"},{"internalType":"uint256","name":"_nextWindowStartTime","type":"uint256"},{"internalType":"uint256","name":"_nextWindowEndTime","type":"uint256"}],"name":"logInitialReportSubmitted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_reporter","type":"address"},{"internalType":"address","name":"_market","type":"address"},{"internalType":"uint256","name":"_amountRedeemed","type":"uint256"},{"internalType":"uint256","name":"_repReceived","type":"uint256"},{"internalType":"uint256[]","name":"_payoutNumerators","type":"uint256[]"}],"name":"logInitialReporterRedeemed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"contract IMarket","name":"_market","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"logInitialReporterTransferred","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"uint256[]","name":"_winningPayoutNumerators","type":"uint256[]"}],"name":"logMarketFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IMarket","name":"_market","type":"address"},{"internalType":"contract IUniverse","name":"_originalUniverse","type":"address"}],"name":"logMarketMigrated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"contract IMarket","name":"_market","type":"address"}],"name":"logMarketOIChanged","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"}],"name":"logMarketParticipantsDisavowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_universe","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"logMarketRepBondTransferred","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"logMarketTransferred","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_noShowBond","type":"uint256"}],"name":"logNoShowBondChanged","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"logParticipationTokensBurned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"logParticipationTokensMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_attoParticipationTokens","type":"uint256"},{"internalType":"uint256","name":"_feePayoutShare","type":"uint256"}],"name":"logParticipationTokensRedeemed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_fromBalance","type":"uint256"},{"internalType":"uint256","name":"_toBalance","type":"uint256"}],"name":"logParticipationTokensTransferred","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_reportingFee","type":"uint256"}],"name":"logReportingFeeChanged","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"contract IMarket","name":"_market","type":"address"}],"name":"logReportingParticipantDisavowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"logReputationTokensBurned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"logReputationTokensMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_fromBalance","type":"uint256"},{"internalType":"uint256","name":"_toBalance","type":"uint256"}],"name":"logReputationTokensTransferred","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"contract IMarket","name":"_market","type":"address"},{"internalType":"uint256","name":"_outcome","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"logShareTokensBalanceChanged","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_newTimestamp","type":"uint256"}],"name":"logTimestampSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_market","type":"address"},{"internalType":"uint256","name":"_outcome","type":"uint256"},{"internalType":"uint256","name":"_numShares","type":"uint256"},{"internalType":"uint256","name":"_numPayoutTokens","type":"uint256"},{"internalType":"uint256","name":"_fees","type":"uint256"}],"name":"logTradingProceedsClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IMarket","name":"_forkingMarket","type":"address"}],"name":"logUniverseForked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_validityBond","type":"uint256"}],"name":"logValidityBondChanged","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_universe","type":"address"},{"internalType":"uint256","name":"_warpSyncHash","type":"uint256"},{"internalType":"uint256","name":"_marketEndTime","type":"uint256"}],"name":"logWarpSyncDataUpdated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"lookup","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"string","name":"_extraInfo","type":"string"},{"internalType":"contract IMarket","name":"_market","type":"address"},{"internalType":"address","name":"_marketCreator","type":"address"},{"internalType":"address","name":"_designatedReporter","type":"address"},{"internalType":"uint256","name":"_feePerCashInAttoCash","type":"uint256"},{"internalType":"bytes32[]","name":"_outcomes","type":"bytes32[]"}],"name":"onCategoricalMarketCreated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"string","name":"_extraInfo","type":"string"},{"internalType":"contract IMarket","name":"_market","type":"address"},{"internalType":"address","name":"_marketCreator","type":"address"},{"internalType":"address","name":"_designatedReporter","type":"address"},{"internalType":"uint256","name":"_feePerCashInAttoCash","type":"uint256"},{"internalType":"int256[]","name":"_prices","type":"int256[]"},{"internalType":"uint256","name":"_numTicks","type":"uint256"}],"name":"onScalarMarketCreated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"string","name":"_extraInfo","type":"string"},{"internalType":"contract IMarket","name":"_market","type":"address"},{"internalType":"address","name":"_marketCreator","type":"address"},{"internalType":"address","name":"_designatedReporter","type":"address"},{"internalType":"uint256","name":"_feePerCashInAttoCash","type":"uint256"}],"name":"onYesNoMarketCreated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"}],"name":"registerContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"time","outputs":[{"internalType":"contract ITime","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"trustedCashTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"uploader","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052620000196200004260201b62004cce1760201c565b600b553480156200002957600080fd5b50600580546001600160a01b031916331790556200004a565b636105e40090565b614d39806200005a6000396000f3fe608060405234801561001057600080fd5b50600436106103fb5760003560e01c80638cfb8f2111610215578063c67af5cc11610125578063e1c678fe116100b8578063ecdaa59511610087578063ecdaa59514610880578063ed4d524414610893578063f39ec1f7146108a6578063f9c45f71146108b9578063ff51f367146108cc576103fb565b8063e1c678fe1461083f578063e3142e9014610852578063e62b888914610865578063e997fffd14610878576103fb565b8063cf53f72f116100f4578063cf53f72f146107f3578063d015ddbd14610806578063d673ad9614610819578063da9d7a481461082c576103fb565b8063c67af5cc146107b2578063c8e6b2a8146107c5578063ce07324e146107d8578063cec4ede1146107e0576103fb565b80639eba4b7b116101a8578063b394ce2c11610177578063b394ce2c1461075e578063b5a28c4e14610771578063b70da7dc14610784578063bd33b94214610797578063c509d0b21461079f576103fb565b80639eba4b7b14610705578063a3aac84d14610725578063aaf6da2014610738578063b1c094fa1461074b576103fb565b8063921bd6f0116101e4578063921bd6f0146106da578063961be391146106e25780639684da1a146106ea578063973df5b9146106f2576103fb565b80638cfb8f21146106995780638ec6a771146106ac5780638f401bf3146106bf5780638f669d87146106c7576103fb565b80634f67af24116103105780636743dcaf116102a3578063752f57c011610272578063752f57c01461062d5780637920757e1461064057806379d60f041461065357806380675fdc14610666578063887cc5e414610679576103fb565b80636743dcaf146105e15780636a95e6a7146105f457806370b78eba14610607578063722e33201461061a576103fb565b80635fe4fccd116102df5780635fe4fccd146105a0578063606755be146105b3578063645c6fae146105c657806365fe2a0b146105d9576103fb565b80634f67af24146105545780635897e6631461056757806358c4092c1461057a57806359967d1f1461058d576103fb565b806322415f601161039357806327d8e8501161036257806327d8e850146104f35780633dfdce82146105065780633f6d798a14610519578063484f6e3e1461052c5780634891c9ab14610534576103fb565b806322415f60146104a75780632280068d146104ba57806323290737146104cd57806326990346146104e0576103fb565b806317570e80116103cf57806317570e801461045957806317674e4d1461046c578063188ec3561461047f5780631902540c14610494576103fb565b8062b946f01461040057806308bb73091461041e5780631142e31e1461043e57806316ada54714610451575b600080fd5b6104086108d4565b6040516104159190614617565b60405180910390f35b61043161042c366004613a19565b6108e3565b604051610415919061495a565b61043161044c3660046140ee565b610943565b6104086109e9565b610431610467366004613c60565b6109f8565b61043161047a366004613c60565b610ae6565b610487610b4f565b6040516104159190614965565b6104316104a2366004614008565b610bd2565b6104316104b53660046139fd565b610c7a565b6104316104c8366004614292565b610c98565b6104316104db366004613c8d565b610e85565b6104316104ee366004614008565b610f78565b61043161050136600461413e565b611026565b6104316105143660046140ee565b61111f565b610431610527366004614318565b6111e1565b610487611433565b6105476105423660046139fd565b611496565b6040516104159190614abf565b610408610562366004613bca565b611647565b6104316105753660046139fd565b611668565b610431610588366004613b83565b6116c3565b61043161059b3660046140ee565b61171b565b6104316105ae366004613e47565b6117c8565b6104316105c1366004613c0e565b6118d7565b6104316105d4366004613b9b565b611a1e565b610408611bc3565b6104316105ef366004613a63565b611bd2565b610431610602366004613ecb565b611c87565b610431610615366004613d78565b611d93565b610431610628366004613c60565b611ea7565b61048761063b366004613b1c565b611f96565b61043161064e366004614220565b61208f565b61048761066136600461453a565b612137565b610431610674366004613f84565b6121d6565b61068c6106873660046139fd565b61225d565b6040516104159190614925565b6104316106a73660046139fd565b6122cc565b6104316106ba3660046139fd565b6122ea565b61048761235d565b6104316106d53660046140ee565b612367565b6104876123ff565b610408612405565b610408612414565b610431610700366004613b83565b612484565b6107186107133660046139fd565b6124cb565b6040516104159190614995565b6104316107333660046140d9565b6124ed565b6104876107463660046139fd565b6125f1565b610431610759366004613f84565b61260c565b61043161076c366004613b83565b612716565b61043161077f366004613b83565b61275d565b6104316107923660046139fd565b6127a4565b6104876127c2565b6104316107ad3660046141d0565b6127cd565b6104316107c03660046139fd565b6128f1565b6104316107d3366004613b83565b6129d5565b610487612a5c565b6104316107ee36600461406c565b612a62565b610431610801366004613ae8565b612b08565b610431610814366004613aa3565b612b8f565b6104316108273660046140ee565b612c8a565b61043161083a366004613ca1565b612d3f565b61043161084d366004614008565b612e3a565b610431610860366004614175565b612ef0565b6104316108733660046139fd565b61305c565b61043161307a565b61043161088e3660046140ee565b6130d6565b6104316108a1366004614423565b613183565b6104086108b4366004613b83565b6133ea565b6104876108c73660046139fd565b613405565b610487613423565b6008546001600160a01b031681565b60006108ee3361305c565b6108f757600080fd5b836001600160a01b03167f0519ee50d0e6120223e58d0b52824ca4985c524f045a3d6a529936e511d2ba8d3385856040516109349392919061462b565b60405180910390a29392505050565b60003361094f816127a4565b61095857600080fd5b6109db873388886001866001600160a01b031663f1be16796040518163ffffffff1660e01b815260040160206040518083038186803b15801561099a57600080fd5b505afa1580156109ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109d29190810190613c44565b8a8a600061342f565b506001979650505050505050565b6007546001600160a01b031681565b6000610a03836122cc565b610a0c57600080fd5b60405163f76514c760e01b81526001600160a01b0384169063f76514c790610a38903390600401614617565b60206040518083038186803b158015610a5057600080fd5b505afa158015610a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a889190810190613b67565b610a9157600080fd5b816001600160a01b0316836001600160a01b03167fb20adf682c8f82b94a135452f54ac4483c9ee8c9b2324e946120696ab1d034b433604051610ad49190614617565b60405180910390a35060015b92915050565b600033610af2816122cc565b610afb57600080fd5b806001600160a01b0316836001600160a01b0316856001600160a01b03167fc3cf07f8fa0fafc25a9dd0bad2cd6b961c55dad41b42c8ef8f931bc40e41e08c60405160405180910390a45060019392505050565b60075460408051630c4761ab60e11b815290516000926001600160a01b03169163188ec356916004808301926020929190829003018186803b158015610b9457600080fd5b505afa158015610ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bcc919081019061427a565b90505b90565b600033610bde816127a4565b610be757600080fd5b610c6b88338989896001876001600160a01b031663f1be16796040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2a57600080fd5b505afa158015610c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c629190810190613c44565b8b8b60006134d7565b50600198975050505050505050565b6001600160a01b031660009081526003602052604090205460ff1690565b600080610ca4336135d2565b6001600160a01b03871660009081526020819052604090819020805460ff191660011790558051600280825260608281019093529293509091816020016020820280388339019050509050600081600081518110610cfe57fe5b602002602001018181525050670de0b6b3a764000081600181518110610d2057fe5b6020908102919091018101919091526001600160a01b038816600090815260048252604090208951610d54928b019061380a565b506001600160a01b0387811660009081526004602081815260408084206001810180546001600160a01b0319168d8816908117909155938101805460ff19169055662386f26fc1000060059091015580518481528083018083526353f46bb160e11b9052905192948716937fea17ae24b0d40ea7962a6d832db46d1f81eaec1562946d0830d1c21d4c000ec1938f938f938f938e938e938c936103e89290918c9163a7e8d762916024808601929081870301818987803b158015610e1757600080fd5b505af1158015610e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e4f919081019061427a565b610e57610b4f565b604051610e6e9b9a99989796959493929190614ba0565b60405180910390a350600198975050505050505050565b6000610e90846122cc565b610e9957600080fd5b604051634fbf0dfb60e11b815233906001600160a01b03861690639f7e1bf690610ec7908490600401614617565b60206040518083038186803b158015610edf57600080fd5b505afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f179190810190613b67565b610f2057600080fd5b806001600160a01b0316856001600160a01b03167f55f2a7bfa32e835c3f3c3cff653a3d11c077ce1b00c5a41c6aaf09eedc1ac3b28686604051610f6592919061468d565b60405180910390a3506001949350505050565b6000610f83876122cc565b610f8c57600080fd5b6040516301ba1fa360e01b81526001600160a01b038816906301ba1fa390610fb8903390600401614617565b60206040518083038186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110089190810190613b67565b61101157600080fd5b6109db8733888888600260008a8a60006134d7565b6000611031836122cc565b61103a57600080fd5b604051634fbf0dfb60e11b815233906001600160a01b03851690639f7e1bf690611068908490600401614617565b60206040518083038186803b15801561108057600080fd5b505afa158015611094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110b89190810190613b67565b6110c157600080fd5b806001600160a01b0316846001600160a01b03167f6d39632c2dc10305bf5771cfff4af1851f07c03ea27b821cad382466bdf7a21f6110fe610b4f565b8660405161110d929190614b53565b60405180910390a35060019392505050565b600061112a866122cc565b61113357600080fd5b336001600160a01b0316866001600160a01b031663b80907f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561117657600080fd5b505afa15801561118a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111ae9190810190613c44565b6001600160a01b0316146111c157600080fd5b6111d4863387876000808989600061342f565b5060019695505050505050565b6000806111ed336135d2565b6001600160a01b03881660009081526020819052604090819020805460ff19166001179055805160028082526060828101909352929350909181602001602082028038833901905050905060008160008151811061124757fe5b602002602001018181525050670de0b6b3a76400008160018151811061126957fe5b6020908102919091018101919091526001600160a01b038916600090815260048252604090208a5161129d928c019061380a565b506001600160a01b0388811660009081526004602090815260409091206001810180546001600160a01b031916938b169390931790925585516112e69260020191870190613888565b506001600160a01b03881660009081526004602081905260409091200180546001919060ff191682800217905550662386f26fc10000600460008a6001600160a01b03166001600160a01b0316815260200190815260200160002060050181905550866001600160a01b0316826001600160a01b03167fea17ae24b0d40ea7962a6d832db46d1f81eaec1562946d0830d1c21d4c000ec18c8c8c8b8b8860016103e88e8d6001600160a01b031663a7e8d7626040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156113c457600080fd5b505af11580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113fc919081019061427a565b611404610b4f565b60405161141b9b9a99989796959493929190614ba0565b60405180910390a35060019998505050505050505050565b60008061143e610b4f565b90505b600b5481111561146d576114656114566135e7565b600b549063ffffffff6135ef16565b600b55611441565b600b54600061147a613608565b8301905061148e818363ffffffff61360f16565b935050505090565b61149e6138c2565b6001600160a01b0382166000908152600460209081526040918290208251815460026001821615610100026000190190911604601f8101849004909302810160e090810190945260c081018381529093919284928491908401828280156115465780601f1061151b57610100808354040283529160200191611546565b820191906000526020600020905b81548152906001019060200180831161152957829003601f168201915b505050918352505060018201546001600160a01b031660208083019190915260028301805460408051828502810185018252828152940193928301828280156115ae57602002820191906000526020600020905b81548152602001906001019080831161159a575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561160657602002820191906000526020600020905b8154815260200190600101908083116115f2575b5050509183525050600482015460209091019060ff16600281111561162757fe5b600281111561163257fe5b81526020016005820154815250509050919050565b600080611653336135d2565b9050611660818585613626565b949350505050565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b0383811691161480610ae05750506001600160a01b031660009081526020819052604090205460ff1690565b6000806116cf336135d2565b9050806001600160a01b03167fd1fc3f2cb1387e602db0e6f8f22649df65df5246eeff281cf6d1ef62feda4ece8460405161170a9190614965565b60405180910390a250600192915050565b6000611726866122cc565b61172f57600080fd5b6040516301ba1fa360e01b81526001600160a01b038716906301ba1fa39061175b903390600401614617565b60206040518083038186803b15801561177357600080fd5b505afa158015611787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117ab9190810190613b67565b6117b457600080fd5b6111d486338787600260008989600061342f565b60006117d3876122cc565b6117dc57600080fd5b604051634fbf0dfb60e11b81526001600160a01b03881690639f7e1bf690611808903390600401614617565b60206040518083038186803b15801561182057600080fd5b505afa158015611834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118589190810190613b67565b61186157600080fd5b6001600160a01b0380861660009081526002602052604090819020805460ff1916600117905551878216918916907ff9a0b30bcf861874bf36630742f0d56b22648898d7cdd0cd785d74acd17e0d44906118c29089908990899089906146cb565b60405180910390a35060019695505050505050565b60006118e2336122cc565b6118eb57600080fd5b336001600160a01b03167f97f8b399e255f30d56b759b645c86652624ee258937579ff4a747abaeae857c485866001600160a01b031663c828371e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561195057600080fd5b505afa158015611964573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611988919081019061427a565b876001600160a01b031663439f5ac26040518163ffffffff1660e01b815260040160206040518083038186803b1580156119c157600080fd5b505afa1580156119d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119f9919081019061427a565b8787604051611a0c9594939291906148c2565b60405180910390a25060019392505050565b6005546000906001600160a01b03163314611a3857600080fd5b6000838152600660205260409020546001600160a01b031615611a765760405162461bcd60e51b8152600401611a6d906149a8565b60405180910390fd5b611a88826001600160a01b0316613773565b611a9157600080fd5b600083815260066020526040902080546001600160a01b0319166001600160a01b0384161790556929b430b932aa37b5b2b760b11b831480611ae25750826c4d61726b6574466163746f727960981b145b80611afa5750826a45746845786368616e676560a81b145b15611b27576001600160a01b0382166000908152600360205260409020805460ff19166001179055611b81565b826354696d6560e01b1415611b5657600780546001600160a01b0319166001600160a01b038416179055611b81565b8263086c2e6d60e31b1415611b8157600c80546001600160a01b0319166001600160a01b0384161790555b7fa037dd0e01f0488a530cb17065a6d2f284fae016004fc744ee2a41d5cacf85d58284604051611bb2929190614760565b60405180910390a150600192915050565b6005546001600160a01b031681565b3360009081526003602052604081205460ff16611bee57600080fd5b600c546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611c22908790879087906004016146a7565b602060405180830381600087803b158015611c3c57600080fd5b505af1158015611c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c749190810190613b67565b611c7d57600080fd5b5060019392505050565b6000611c928b6122cc565b611c9b57600080fd5b604051634fbf0dfb60e11b81526001600160a01b038c1690639f7e1bf690611cc7903390600401614617565b60206040518083038186803b158015611cdf57600080fd5b505afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d179190810190613b67565b611d2057600080fd5b896001600160a01b03168b6001600160a01b03167f81afc41f9f2f0d22a52a2ddb3a0b6db83baf39c05544fd25f2751b72b1943bb58b8b8b8b8b8b8b8b611d65610b4f565b604051611d7a99989796959493929190614702565b60405180910390a35060019a9950505050505050505050565b6000611d9e8b6122cc565b611da757600080fd5b604051634fbf0dfb60e11b81526001600160a01b038c1690639f7e1bf690611dd3903390600401614617565b60206040518083038186803b158015611deb57600080fd5b505afa158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e239190810190613b67565b611e2c57600080fd5b886001600160a01b03168a6001600160a01b03168c6001600160a01b03167fe7f47639cdf56ec6c5451df334b73c9ca5cccd20da2c0f4e390e9bb71a6f672a8b8b8b8b8b8b8b611e7a610b4f565b604051611e8e98979695949392919061485b565b60405180910390a45060019a9950505050505050505050565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b03163314611ee357600080fd5b816001600160a01b0316836001600160a01b03167f213a05b9ad8567c2f8fa868e7375e5bf30e69add0dbb5913ca8a3e58c815c268846001600160a01b031663bb24882e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f5157600080fd5b505afa158015611f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f89919081019061427a565b604051610ad49190614965565b6000806000905084600081518110611faa57fe5b602002602001015160001480611fd357508385600081518110611fc957fe5b6020026020010151145b611fdc57600080fd5b82855114611ffc5760405162461bcd60e51b8152600401611a6d90614a05565b60005b855181101561203e57600086828151811061201657fe5b6020026020010151905061203381846135ef90919063ffffffff16565b925050600101611fff565b5083811461205e5760405162461bcd60e51b8152600401611a6d90614a62565b8460405160200161206f91906145e1565b604051602081830303815290604052805190602001209150509392505050565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b031633146120cb57600080fd5b836001600160a01b0316856001600160a01b0316876001600160a01b03167fdd7dcfa6708112395eb94e9b1889295fb19af21ef290e918256838c979b2dfbd8686612114610b4f565b60405161212393929190614c43565b60405180910390a450600195945050505050565b60006001198214156121505750655af3107a4000610ae0565b600061218284612176678ac7230489e80000670de0b6b3a764000063ffffffff61377916565b9063ffffffff6137a016565b9050655af3107a40005b818110156121ac576121a581600a63ffffffff61377916565b905061218c565b9050806121cd670de0b6b3a76400006121768681858a63ffffffff61377916565b95945050505050565b6000336121e2816127a4565b6121eb57600080fd5b856001600160a01b0316876001600160a01b0316896001600160a01b03167f6afb0328cf957750be87a6f34b1cd21457ddf1382af65f9592ff2d333945633f84898989612236610b4f565b60405161224795949392919061464e565b60405180910390a4506001979650505050505050565b6001600160a01b0381166000908152600460209081526040918290206002018054835181840281018401909452808452606093928301828280156122c057602002820191906000526020600020905b8154815260200190600101908083116122ac575b50505050509050919050565b6001600160a01b031660009081526001602052604090205460ff1690565b60006122f5336122cc565b6122fe57600080fd5b6009805460010190819055336000818152600a6020526040908190209290925590517fce5b6de2a0053ebc6c04e68bcbb9f0a1f2deeb7049c72881e198f95b5752db829061234d908590614617565b60405180910390a2506001919050565b655af3107a400081565b600033612373816127a4565b61237c57600080fd5b6109db873388886001866001600160a01b031663f1be16796040518163ffffffff1660e01b815260040160206040518083038186803b1580156123be57600080fd5b505afa1580156123d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123f69190810190613c44565b8a8a60006137b5565b600b5481565b600c546001600160a01b031681565b6005546000906001600160a01b0316331461242e57600080fd5b6008546001600160a01b03161561244457600080fd5b6040805160008082526020820190925261246091908190613626565b600880546001600160a01b0319166001600160a01b03928316179081905516919050565b600080612490336135d2565b9050806001600160a01b03167f9c75a088fcb0527d67a80a7d0a5006bbabe02f4b23984234ae68b2b146f001bc8460405161170a9190614965565b6001600160a01b03166000908152600460208190526040909120015460ff1690565b60006124f8856122cc565b61250157600080fd5b6040516301ba1fa360e01b81526001600160a01b038616906301ba1fa39061252d903390600401614617565b60206040518083038186803b15801561254557600080fd5b505afa158015612559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061257d9190810190613b67565b61258657600080fd5b836001600160a01b0316336001600160a01b0316866001600160a01b03167f18052b5e29020458e154999fa71891a5db3404a5b0b9c5ec60c90adca7d38d6386866125cf610b4f565b6040516125de93929190614c43565b60405180910390a4506001949350505050565b6001600160a01b03166000908152600a602052604090205490565b6000612617876122cc565b61262057600080fd5b60405163f76514c760e01b81526001600160a01b0388169063f76514c79061264c903390600401614617565b60206040518083038186803b15801561266457600080fd5b505afa158015612678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061269c9190810190613b67565b6126a557600080fd5b846001600160a01b0316866001600160a01b0316886001600160a01b03167f3ffffb51f92f91faf4ba8c906f5a0180d1033be93b1e227cd92c872dc234fdf0338888886126f0610b4f565b60405161270195949392919061464e565b60405180910390a45060019695505050505050565b600080612722336135d2565b9050806001600160a01b03167fadddfaec4505d90a6a211907536944e6e1af7ff5cf6d1873de43e36020f360098460405161170a9190614965565b600080612769336135d2565b9050806001600160a01b03167f69af68e366a0570364e3a086f3b5ac79f08ecc3f93eaccbfcf3864809b12b5d88460405161170a9190614965565b6001600160a01b031660009081526002602052604090205460ff1690565b662386f26fc1000081565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b0316331480612892575061280f856122cc565b801561289257506040516347d20e3b60e01b81526001600160a01b038616906347d20e3b90612842903390600401614617565b60206040518083038186803b15801561285a57600080fd5b505afa15801561286e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128929190810190613b67565b61289b57600080fd5b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffe06587917de7df83a446bcbb889cee699d7fc35b7b53e263282c2acb5a16499856128e3610b4f565b6040516125de929190614c35565b60006128fc826122cc565b61290557600080fd5b604051634fbf0dfb60e11b815233906001600160a01b03841690639f7e1bf690612933908490600401614617565b60206040518083038186803b15801561294b57600080fd5b505afa15801561295f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129839190810190613b67565b61298c57600080fd5b806001600160a01b0316836001600160a01b03167f3b4f3db017516414df2695e5b0052661779d7163a6cd4368fd74313be73fa0b860405160405180910390a350600192915050565b6354696d6560e01b600090815260066020527f4143d616c96d2b1f51d9d6f19a8a5a7e7b5e4585aaf1cb11403e9050a04d847f546001600160a01b03163314612a1d57600080fd5b7f11dda748f0bd3af85a073da0088a0acb827d9584a4fdb825c81f1232a530953882604051612a4c9190614965565b60405180910390a1506001919050565b60095481565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b03163314612a9e57600080fd5b866001600160a01b0316886001600160a01b03167f95366b7f64c6bb45149f9f7c522403fceebe5170ff76b8ffde2b0ab943ac11ce8888888888612ae0610b4f565b604051612af2969594939291906148f2565b60405180910390a3506001979650505050505050565b675761727053796e6360c01b600090815260066020527f4156b4e39cdfa850a86fd78358d7f438ebb618c0872d6f5f139369aa1ef74335546001600160a01b03163314612b5457600080fd5b836001600160a01b03167f7589653fe5a2ab3ccc12538316852339868efdd9d3bd0b84d055cf224cf968738484604051610934929190614c35565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b03163314612bcb57600080fd5b836001600160a01b0316856001600160a01b0316856001600160a01b031663870c426d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c1857600080fd5b505afa158015612c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c509190810190613c44565b6001600160a01b03167f350ea32dc29530b9557420816d743c436f8397086f98c96292138edd69e01cb386866040516125de929190614c35565b6000612c95866122cc565b612c9e57600080fd5b336001600160a01b0316866001600160a01b031663b80907f26040518163ffffffff1660e01b815260040160206040518083038186803b158015612ce157600080fd5b505afa158015612cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d199190810190613c44565b6001600160a01b031614612d2c57600080fd5b6111d486338787600080898960006137b5565b6000612d4a8b6122cc565b612d5357600080fd5b604051634fbf0dfb60e11b81526001600160a01b038c1690639f7e1bf690612d7f903390600401614617565b60206040518083038186803b158015612d9757600080fd5b505afa158015612dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dcf9190810190613b67565b612dd857600080fd5b886001600160a01b03168a6001600160a01b03168c6001600160a01b03167fc3ebb227c22e7644e9bef8822009f746a72c86f239760124d67fdc2c302b31158b8b8b8b8b8b8b612e26610b4f565b604051611e8e9897969594939291906147b9565b6000612e45876122cc565b612e4e57600080fd5b336001600160a01b0316876001600160a01b031663b80907f26040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9157600080fd5b505afa158015612ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ec99190810190613c44565b6001600160a01b031614612edc57600080fd5b6109db87338888886000808a8a60006134d7565b6000612efb856122cc565b612f0457600080fd5b604051634fbf0dfb60e11b81526001600160a01b03861690639f7e1bf690612f30908790600401614617565b60206040518083038186803b158015612f4857600080fd5b505afa158015612f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f809190810190613b67565b612f8957600080fd5b836001600160a01b0316631a3739ec6040518163ffffffff1660e01b815260040160206040518083038186803b158015612fc257600080fd5b505afa158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ffa9190810190613c44565b6001600160a01b0316336001600160a01b03161461301757600080fd5b836001600160a01b0316856001600160a01b03167fee62c58e2603b92f96a002e012f4f3bd5748102cfa3b711f6d778c6237fcaa968585604051610f6592919061468d565b6001600160a01b031660009081526020819052604090205460ff1690565b6005546000906001600160a01b0316331461309457600080fd5b600580546001600160a01b03191660011790556040517ff06c142f93fdd00fbcd1e8f3d82e6f22667d52df764b39570061a7dbeea09be090600090a150600190565b60006130e1866122cc565b6130ea57600080fd5b6040516301ba1fa360e01b81526001600160a01b038716906301ba1fa390613116903390600401614617565b60206040518083038186803b15801561312e57600080fd5b505afa158015613142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131669190810190613b67565b61316f57600080fd5b6111d48633878760026000898960006137b5565b60008061318f336135d2565b9050835160021461319f57600080fd5b836001815181106131ac57fe5b6020026020010151846000815181106131c157fe5b6020026020010151126131d357600080fd5b6000846000815181106131e257fe5b6020026020010151856001815181106131f757fe5b602002602001015103905083811161320e57600080fd5b6001600160a01b038916600090815260208181526040808320805460ff19166001179055600482529091208b51613247928d019061380a565b506001600160a01b0389811660009081526004602090815260409091206001810180546001600160a01b031916938c169390931790925586516132909260030191880190613888565b506001600160a01b038916600090815260046020819052604090912001805460ff191660021790556132c28185612137565b600460008b6001600160a01b03166001600160a01b0316815260200190815260200160002060050181905550876001600160a01b0316826001600160a01b03167fea17ae24b0d40ea7962a6d832db46d1f81eaec1562946d0830d1c21d4c000ec18d8d8d8c8c8c60028d6000604051908082528060200260200182016040528015613357578160200160208202803883390190505b508d6001600160a01b031663a7e8d7626040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561339357600080fd5b505af11580156133a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133cb919081019061427a565b6133d3610b4f565b604051611d7a9b9a99989796959493929190614ba0565b6000908152600660205260409020546001600160a01b031690565b6001600160a01b031660009081526004602052604090206005015490565b678ac7230489e8000081565b6000876001600160a01b0316896001600160a01b03168b6001600160a01b03167f145a4839b3d82d1e28f6ed93f52622b351892e835530386bb1fe4effba99aeea8a8a8a8a6040516134849493929190614b6c565b60405180910390a4876001600160a01b03168a6001600160a01b03167f63fd58f559b73fc4da5511c341ec8a7b31c5c48538ef83c6077712b6edf5f7cb8b8989888860405161141b959493929190614779565b6000876001600160a01b0316896001600160a01b03168c6001600160a01b03167f3c67396e9c55d2fc8ad68875fc5beca1d96ad2a2f23b210ccc1d986551ab6fdf8d8b8b8b60405161352c9493929190614821565b60405180910390a4886001600160a01b03168b6001600160a01b03167f63fd58f559b73fc4da5511c341ec8a7b31c5c48538ef83c6077712b6edf5f7cb8c8989898860405161357f959493929190614779565b60405180910390a3876001600160a01b03168b6001600160a01b03167f63fd58f559b73fc4da5511c341ec8a7b31c5c48538ef83c6077712b6edf5f7cb8c89898888604051611d7a959493929190614779565b6000816135de816122cc565b610ae057600080fd5b6301e1338090565b60008282018381101561360157600080fd5b9392505050565b62278d0090565b600081831061361f575081610ae0565b5080610ae0565b6e556e697665727365466163746f727960881b600090815260066020527fe871b5eb9e1a06d6bd1006f333179ec3b44446b2a467a964e8c078690ec21a225460405163a7ac913760e01b81526001600160a01b03909116908290829063a7ac91379061369a9089908990899060040161496e565b602060405180830381600087803b1580156136b457600080fd5b505af11580156136c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136ec9190810190613c44565b6001600160a01b038082166000818152600160208181526040808420805460ff1990811685179091556003909252909220805490921617905591925087167fe36b09d83f9cfa88c37f071fc2cfb5ff30b764cbd98088e70d965573c9ce5bbd86613754610b4f565b604051613762929190614938565b60405180910390a395945050505050565b3b151590565b60008261378857506000610ae0565b8282028284828161379557fe5b041461360157600080fd5b6000808284816137ac57fe5b04949350505050565b6000876001600160a01b0316896001600160a01b03168b6001600160a01b03167f07f766729171db8cc73d96b25cc56784077e26c7ff48b0187877ace391c181a68a8a8a8a6040516134849493929190614b6c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061384b57805160ff1916838001178555613878565b82800160010185558215613878579182015b8281111561387857825182559160200191906001019061385d565b506138849291506138f7565b5090565b828054828255906000526020600020908101928215613878579160200282018281111561387857825182559160200191906001019061385d565b6040805160c0810182526060808252600060208301819052928201819052808201529060808201908152602001600081525090565b610bcf91905b8082111561388457600081556001016138fd565b8035610ae081614cab565b600082601f83011261392c578081fd5b813561393f61393a82614c7f565b614c59565b81815291506020808301908481018184028601820187101561396057600080fd5b60005b8481101561397f57813584529282019290820190600101613963565b505050505092915050565b8035610ae081614cc0565b600082601f8301126139a5578081fd5b81356001600160401b038111156139ba578182fd5b6139cd601f8201601f1916602001614c59565b91508082528360208285010111156139e457600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215613a0e578081fd5b813561360181614cab565b600080600060608486031215613a2d578182fd5b8335613a3881614cab565b92506020840135613a4881614cab565b91506040840135613a5881614cab565b809150509250925092565b600080600060608486031215613a77578283fd5b8335613a8281614cab565b92506020840135613a9281614cab565b929592945050506040919091013590565b60008060008060808587031215613ab8578081fd5b8435613ac381614cab565b93506020850135613ad381614cab565b93969395505050506040820135916060013590565b600080600060608486031215613afc578283fd5b8335613b0781614cab565b95602085013595506040909401359392505050565b600080600060608486031215613b30578081fd5b83356001600160401b03811115613b45578182fd5b613b518682870161391c565b9660208601359650604090950135949350505050565b600060208284031215613b78578081fd5b815161360181614cc0565b600060208284031215613b94578081fd5b5035919050565b60008060408385031215613bad578182fd5b823591506020830135613bbf81614cab565b809150509250929050565b60008060408385031215613bdc578182fd5b8235915060208301356001600160401b03811115613bf8578182fd5b613c048582860161391c565b9150509250929050565b600080600060608486031215613c22578081fd5b8335613c2d81614cab565b9250602084013591506040840135613a5881614cc0565b600060208284031215613c55578081fd5b815161360181614cab565b60008060408385031215613c72578182fd5b8235613c7d81614cab565b91506020830135613bbf81614cab565b600080600060608486031215613a2d578081fd5b6000806000806000806000806000806101408b8d031215613cc0578788fd5b613cca8c8c613911565b9950613cd98c60208d01613911565b9850613ce88c60408d01613911565b9750613cf78c60608d01613911565b965060808b01359550613d0d8c60a08d0161398a565b945060c08b01356001600160401b0380821115613d28578586fd5b613d348e838f0161391c565b955060e08d0135915080821115613d49578485fd5b50613d568d828e01613995565b9350506101008b013591506101208b013590509295989b9194979a5092959850565b6000806000806000806000806000806101408b8d031215613d97578384fd5b613da18c8c613911565b9950613db08c60208d01613911565b9850613dbf8c60408d01613911565b9750613dce8c60608d01613911565b965060808b0135955060a08b01356001600160401b0380821115613df0578586fd5b613dfc8e838f01613995565b965060c08d0135915080821115613e11578586fd5b50613e1e8d828e0161391c565b94505060e08b013592506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060008060c08789031215613e5f578384fd5b8635613e6a81614cab565b95506020870135613e7a81614cab565b94506040870135613e8a81614cab565b935060608701356001600160401b03811115613ea4578283fd5b613eb089828a0161391c565b9350506080870135915060a087013590509295509295509295565b6000806000806000806000806000806101408b8d031215613eea578384fd5b8a35613ef581614cab565b995060208b0135613f0581614cab565b985060408b0135613f1581614cab565b975060608b01356001600160401b03811115613f2f578485fd5b613f3b8d828e0161391c565b97505060808b0135955060a08b0135945060c08b0135613f5a81614cc0565b8094505060e08b013592506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060008060c08789031215613f9c578384fd5b8635613fa781614cab565b95506020870135613fb781614cab565b94506040870135613fc781614cab565b9350606087013592506080870135915060a08701356001600160401b03811115613fef578182fd5b613ffb89828a0161391c565b9150509295509295509295565b60008060008060008060c08789031215614020578384fd5b863561402b81614cab565b9550602087013561403b81614cab565b9450604087013561404b81614cab565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600060e0888a031215614086578081fd5b873561409181614cab565b965060208801356140a181614cab565b955060408801356140b181614cab565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b60008060008060808587031215613ab8578182fd5b600080600080600060a08688031215614105578283fd5b853561411081614cab565b9450602086013561412081614cab565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215614150578182fd5b823561415b81614cab565b915060208301356001600160401b03811115613bf8578182fd5b6000806000806080858703121561418a578182fd5b843561419581614cab565b935060208501356141a581614cab565b925060408501356141b581614cab565b915060608501356141c581614cab565b939692955090935050565b600080600080608085870312156141e5578182fd5b84356141f081614cab565b9350602085013561420081614cab565b9250604085013561421081614cab565b9396929550929360600135925050565b600080600080600060a08688031215614237578283fd5b853561424281614cab565b9450602086013561425281614cab565b9350604086013561426281614cab565b94979396509394606081013594506080013592915050565b60006020828403121561428b578081fd5b5051919050565b60008060008060008060c087890312156142aa578384fd5b8635955060208701356001600160401b038111156142c6578485fd5b6142d289828a01613995565b95505060408701356142e381614cab565b935060608701356142f381614cab565b9250608087013561430381614cab565b8092505060a087013590509295509295509295565b600080600080600080600060e0888a031215614332578081fd5b873596506020808901356001600160401b0380821115614350578384fd5b61435c8c838d01613995565b985060408b0135915061436e82614cab565b90965060608a01359061438082614cab565b90955060808a01359061439282614cab565b90945060a08a0135935060c08a013590808211156143ae578384fd5b50808a018b601f8201126143c0578384fd5b803591506143d061393a83614c7f565b82815283810190828501858502840186018f10156143ec578687fd5b8693505b8484101561440e5780358352600193909301929185019185016143f0565b50809550505050505092959891949750929550565b600080600080600080600080610100898b03121561443f578182fd5b883597506020808a01356001600160401b038082111561445d578485fd5b6144698d838e01613995565b995060408c0135915061447b82614cab565b90975060608b01359061448d82614cab565b90965060808b01359061449f82614cab565b90955060a08b0135945060c08b013590808211156144bb578485fd5b50808b018c601f8201126144cd578485fd5b803591506144dd61393a83614c7f565b8083825284820191508483018f8687870286010111156144fb578788fd5b8793505b8484101561451d5780358352600193909301929185019185016144ff565b50809650505050505060e089013590509295985092959890939650565b6000806040838503121561454c578182fd5b50508035926020909101359150565b6000815180845260208401935060208301825b8281101561458c57815186526020958601959091019060010161456e565b5093949350505050565b60008151808452815b818110156145bb5760208185018101518683018201520161459f565b818111156145cc5782602083870101525b50601f01601f19169290920160200192915050565b8151600090829060208501835b8281101561460c5781518452602093840193909101906001016145ee565b509195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b600060018060a01b038716825285602083015284604083015260a0606083015261467b60a083018561455b565b90508260808301529695505050505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03851681526080602082018190526000906146ef9083018661455b565b6040830194909452506060015292915050565b6001600160a01b038a168152610120602082018190526000906147278382018c61455b565b604084019a909a5250506060810196909652931515608086015260a085019290925260c084015260e08301526101009091015292915050565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03868116825260a082019061479487614c9e565b8660208401528086166040840152508360608301528260808301529695505050505050565b6001600160a01b0389168152602081018890528615156040820152610100606082018190526000906147ed8382018961455b565b83810360808501526147ff8189614596565b60a085019790975250505060c081019290925260e09091015295945050505050565b6001600160a01b03858116825260208201859052608082019061484385614c9e565b84604084015280841660608401525095945050505050565b6001600160a01b038916815260208101889052610100604082018190526000906148878382018a614596565b8381036060850152614899818a61455b565b925050508560808301528460a08301528360c08301528260e08301529998505050505050505050565b6001600160a01b039590951685526020850193909352604084019190915260608301521515608082015260a00190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b600060208252613601602083018461455b565b60006040825261494b604083018561455b565b90508260208301529392505050565b901515815260200190565b90815260200190565b600060018060a01b0385168252836020830152606060408301526121cd606083018461455b565b602081016149a283614c9e565b91905290565b6020808252603d908201527f41756775722e7265676973746572436f6e74726163743a206b6579206861732060408201527f616c7265616479206265656e207573656420696e207265676973747279000000606082015260800190565b6020808252603b908201527f41756775722e6465726976655061796f7574446973747269627574696f6e486160408201527f73683a204d616c666f726d6564207061796f7574206c656e6774680000000000606082015260800190565b60208082526038908201527f41756775722e6465726976655061796f7574446973747269627574696f6e486160408201527f73683a204d616c666f726d6564207061796f75742073756d0000000000000000606082015260800190565b600060208252825160c06020840152614adb60e0840182614596565b60018060a01b03602086015116604085015260408501519150601f1980858303016060860152614b0b828461455b565b6060870151935081868203016080870152614b26818561455b565b9250505060808501519150614b3a82614c9e565b60a08481019290925293015160c0909201919091525090565b600083825260406020830152611660604083018461455b565b84815260808101614b7c85614c9e565b60208201949094526001600160a01b03929092166040830152606090910152919050565b60006101608d8352806020840152614bba8184018e614596565b6001600160a01b038d811660408601528c81166060860152608085018c905284820360a08601529150614bed818b61455b565b915050614bf988614c9e565b8760c08401528660e0840152828103610100840152614c18818761455b565b610120840195909552505061014001529998505050505050505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b6040518181016001600160401b0381118282101715614c7757600080fd5b604052919050565b60006001600160401b03821115614c94578081fd5b5060209081020190565b60038110614ca857fe5b50565b6001600160a01b0381168114614ca857600080fd5b8015158114614ca857600080fd5b636105e4009056fe5ef7677458e0f7b79c5d16119f1dd47672514c31e3d52a2d93950ee5524d9e4da365627a7a7231582047e52d2ad02d97b64c612d6adf7d80fdd5c4f6d3bae700f726a27095f26f51746c6578706572696d656e74616cf564736f6c634300050f0040
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103fb5760003560e01c80638cfb8f2111610215578063c67af5cc11610125578063e1c678fe116100b8578063ecdaa59511610087578063ecdaa59514610880578063ed4d524414610893578063f39ec1f7146108a6578063f9c45f71146108b9578063ff51f367146108cc576103fb565b8063e1c678fe1461083f578063e3142e9014610852578063e62b888914610865578063e997fffd14610878576103fb565b8063cf53f72f116100f4578063cf53f72f146107f3578063d015ddbd14610806578063d673ad9614610819578063da9d7a481461082c576103fb565b8063c67af5cc146107b2578063c8e6b2a8146107c5578063ce07324e146107d8578063cec4ede1146107e0576103fb565b80639eba4b7b116101a8578063b394ce2c11610177578063b394ce2c1461075e578063b5a28c4e14610771578063b70da7dc14610784578063bd33b94214610797578063c509d0b21461079f576103fb565b80639eba4b7b14610705578063a3aac84d14610725578063aaf6da2014610738578063b1c094fa1461074b576103fb565b8063921bd6f0116101e4578063921bd6f0146106da578063961be391146106e25780639684da1a146106ea578063973df5b9146106f2576103fb565b80638cfb8f21146106995780638ec6a771146106ac5780638f401bf3146106bf5780638f669d87146106c7576103fb565b80634f67af24116103105780636743dcaf116102a3578063752f57c011610272578063752f57c01461062d5780637920757e1461064057806379d60f041461065357806380675fdc14610666578063887cc5e414610679576103fb565b80636743dcaf146105e15780636a95e6a7146105f457806370b78eba14610607578063722e33201461061a576103fb565b80635fe4fccd116102df5780635fe4fccd146105a0578063606755be146105b3578063645c6fae146105c657806365fe2a0b146105d9576103fb565b80634f67af24146105545780635897e6631461056757806358c4092c1461057a57806359967d1f1461058d576103fb565b806322415f601161039357806327d8e8501161036257806327d8e850146104f35780633dfdce82146105065780633f6d798a14610519578063484f6e3e1461052c5780634891c9ab14610534576103fb565b806322415f60146104a75780632280068d146104ba57806323290737146104cd57806326990346146104e0576103fb565b806317570e80116103cf57806317570e801461045957806317674e4d1461046c578063188ec3561461047f5780631902540c14610494576103fb565b8062b946f01461040057806308bb73091461041e5780631142e31e1461043e57806316ada54714610451575b600080fd5b6104086108d4565b6040516104159190614617565b60405180910390f35b61043161042c366004613a19565b6108e3565b604051610415919061495a565b61043161044c3660046140ee565b610943565b6104086109e9565b610431610467366004613c60565b6109f8565b61043161047a366004613c60565b610ae6565b610487610b4f565b6040516104159190614965565b6104316104a2366004614008565b610bd2565b6104316104b53660046139fd565b610c7a565b6104316104c8366004614292565b610c98565b6104316104db366004613c8d565b610e85565b6104316104ee366004614008565b610f78565b61043161050136600461413e565b611026565b6104316105143660046140ee565b61111f565b610431610527366004614318565b6111e1565b610487611433565b6105476105423660046139fd565b611496565b6040516104159190614abf565b610408610562366004613bca565b611647565b6104316105753660046139fd565b611668565b610431610588366004613b83565b6116c3565b61043161059b3660046140ee565b61171b565b6104316105ae366004613e47565b6117c8565b6104316105c1366004613c0e565b6118d7565b6104316105d4366004613b9b565b611a1e565b610408611bc3565b6104316105ef366004613a63565b611bd2565b610431610602366004613ecb565b611c87565b610431610615366004613d78565b611d93565b610431610628366004613c60565b611ea7565b61048761063b366004613b1c565b611f96565b61043161064e366004614220565b61208f565b61048761066136600461453a565b612137565b610431610674366004613f84565b6121d6565b61068c6106873660046139fd565b61225d565b6040516104159190614925565b6104316106a73660046139fd565b6122cc565b6104316106ba3660046139fd565b6122ea565b61048761235d565b6104316106d53660046140ee565b612367565b6104876123ff565b610408612405565b610408612414565b610431610700366004613b83565b612484565b6107186107133660046139fd565b6124cb565b6040516104159190614995565b6104316107333660046140d9565b6124ed565b6104876107463660046139fd565b6125f1565b610431610759366004613f84565b61260c565b61043161076c366004613b83565b612716565b61043161077f366004613b83565b61275d565b6104316107923660046139fd565b6127a4565b6104876127c2565b6104316107ad3660046141d0565b6127cd565b6104316107c03660046139fd565b6128f1565b6104316107d3366004613b83565b6129d5565b610487612a5c565b6104316107ee36600461406c565b612a62565b610431610801366004613ae8565b612b08565b610431610814366004613aa3565b612b8f565b6104316108273660046140ee565b612c8a565b61043161083a366004613ca1565b612d3f565b61043161084d366004614008565b612e3a565b610431610860366004614175565b612ef0565b6104316108733660046139fd565b61305c565b61043161307a565b61043161088e3660046140ee565b6130d6565b6104316108a1366004614423565b613183565b6104086108b4366004613b83565b6133ea565b6104876108c73660046139fd565b613405565b610487613423565b6008546001600160a01b031681565b60006108ee3361305c565b6108f757600080fd5b836001600160a01b03167f0519ee50d0e6120223e58d0b52824ca4985c524f045a3d6a529936e511d2ba8d3385856040516109349392919061462b565b60405180910390a29392505050565b60003361094f816127a4565b61095857600080fd5b6109db873388886001866001600160a01b031663f1be16796040518163ffffffff1660e01b815260040160206040518083038186803b15801561099a57600080fd5b505afa1580156109ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109d29190810190613c44565b8a8a600061342f565b506001979650505050505050565b6007546001600160a01b031681565b6000610a03836122cc565b610a0c57600080fd5b60405163f76514c760e01b81526001600160a01b0384169063f76514c790610a38903390600401614617565b60206040518083038186803b158015610a5057600080fd5b505afa158015610a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a889190810190613b67565b610a9157600080fd5b816001600160a01b0316836001600160a01b03167fb20adf682c8f82b94a135452f54ac4483c9ee8c9b2324e946120696ab1d034b433604051610ad49190614617565b60405180910390a35060015b92915050565b600033610af2816122cc565b610afb57600080fd5b806001600160a01b0316836001600160a01b0316856001600160a01b03167fc3cf07f8fa0fafc25a9dd0bad2cd6b961c55dad41b42c8ef8f931bc40e41e08c60405160405180910390a45060019392505050565b60075460408051630c4761ab60e11b815290516000926001600160a01b03169163188ec356916004808301926020929190829003018186803b158015610b9457600080fd5b505afa158015610ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bcc919081019061427a565b90505b90565b600033610bde816127a4565b610be757600080fd5b610c6b88338989896001876001600160a01b031663f1be16796040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2a57600080fd5b505afa158015610c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c629190810190613c44565b8b8b60006134d7565b50600198975050505050505050565b6001600160a01b031660009081526003602052604090205460ff1690565b600080610ca4336135d2565b6001600160a01b03871660009081526020819052604090819020805460ff191660011790558051600280825260608281019093529293509091816020016020820280388339019050509050600081600081518110610cfe57fe5b602002602001018181525050670de0b6b3a764000081600181518110610d2057fe5b6020908102919091018101919091526001600160a01b038816600090815260048252604090208951610d54928b019061380a565b506001600160a01b0387811660009081526004602081815260408084206001810180546001600160a01b0319168d8816908117909155938101805460ff19169055662386f26fc1000060059091015580518481528083018083526353f46bb160e11b9052905192948716937fea17ae24b0d40ea7962a6d832db46d1f81eaec1562946d0830d1c21d4c000ec1938f938f938f938e938e938c936103e89290918c9163a7e8d762916024808601929081870301818987803b158015610e1757600080fd5b505af1158015610e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e4f919081019061427a565b610e57610b4f565b604051610e6e9b9a99989796959493929190614ba0565b60405180910390a350600198975050505050505050565b6000610e90846122cc565b610e9957600080fd5b604051634fbf0dfb60e11b815233906001600160a01b03861690639f7e1bf690610ec7908490600401614617565b60206040518083038186803b158015610edf57600080fd5b505afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f179190810190613b67565b610f2057600080fd5b806001600160a01b0316856001600160a01b03167f55f2a7bfa32e835c3f3c3cff653a3d11c077ce1b00c5a41c6aaf09eedc1ac3b28686604051610f6592919061468d565b60405180910390a3506001949350505050565b6000610f83876122cc565b610f8c57600080fd5b6040516301ba1fa360e01b81526001600160a01b038816906301ba1fa390610fb8903390600401614617565b60206040518083038186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110089190810190613b67565b61101157600080fd5b6109db8733888888600260008a8a60006134d7565b6000611031836122cc565b61103a57600080fd5b604051634fbf0dfb60e11b815233906001600160a01b03851690639f7e1bf690611068908490600401614617565b60206040518083038186803b15801561108057600080fd5b505afa158015611094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110b89190810190613b67565b6110c157600080fd5b806001600160a01b0316846001600160a01b03167f6d39632c2dc10305bf5771cfff4af1851f07c03ea27b821cad382466bdf7a21f6110fe610b4f565b8660405161110d929190614b53565b60405180910390a35060019392505050565b600061112a866122cc565b61113357600080fd5b336001600160a01b0316866001600160a01b031663b80907f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561117657600080fd5b505afa15801561118a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111ae9190810190613c44565b6001600160a01b0316146111c157600080fd5b6111d4863387876000808989600061342f565b5060019695505050505050565b6000806111ed336135d2565b6001600160a01b03881660009081526020819052604090819020805460ff19166001179055805160028082526060828101909352929350909181602001602082028038833901905050905060008160008151811061124757fe5b602002602001018181525050670de0b6b3a76400008160018151811061126957fe5b6020908102919091018101919091526001600160a01b038916600090815260048252604090208a5161129d928c019061380a565b506001600160a01b0388811660009081526004602090815260409091206001810180546001600160a01b031916938b169390931790925585516112e69260020191870190613888565b506001600160a01b03881660009081526004602081905260409091200180546001919060ff191682800217905550662386f26fc10000600460008a6001600160a01b03166001600160a01b0316815260200190815260200160002060050181905550866001600160a01b0316826001600160a01b03167fea17ae24b0d40ea7962a6d832db46d1f81eaec1562946d0830d1c21d4c000ec18c8c8c8b8b8860016103e88e8d6001600160a01b031663a7e8d7626040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156113c457600080fd5b505af11580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113fc919081019061427a565b611404610b4f565b60405161141b9b9a99989796959493929190614ba0565b60405180910390a35060019998505050505050505050565b60008061143e610b4f565b90505b600b5481111561146d576114656114566135e7565b600b549063ffffffff6135ef16565b600b55611441565b600b54600061147a613608565b8301905061148e818363ffffffff61360f16565b935050505090565b61149e6138c2565b6001600160a01b0382166000908152600460209081526040918290208251815460026001821615610100026000190190911604601f8101849004909302810160e090810190945260c081018381529093919284928491908401828280156115465780601f1061151b57610100808354040283529160200191611546565b820191906000526020600020905b81548152906001019060200180831161152957829003601f168201915b505050918352505060018201546001600160a01b031660208083019190915260028301805460408051828502810185018252828152940193928301828280156115ae57602002820191906000526020600020905b81548152602001906001019080831161159a575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561160657602002820191906000526020600020905b8154815260200190600101908083116115f2575b5050509183525050600482015460209091019060ff16600281111561162757fe5b600281111561163257fe5b81526020016005820154815250509050919050565b600080611653336135d2565b9050611660818585613626565b949350505050565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b0383811691161480610ae05750506001600160a01b031660009081526020819052604090205460ff1690565b6000806116cf336135d2565b9050806001600160a01b03167fd1fc3f2cb1387e602db0e6f8f22649df65df5246eeff281cf6d1ef62feda4ece8460405161170a9190614965565b60405180910390a250600192915050565b6000611726866122cc565b61172f57600080fd5b6040516301ba1fa360e01b81526001600160a01b038716906301ba1fa39061175b903390600401614617565b60206040518083038186803b15801561177357600080fd5b505afa158015611787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117ab9190810190613b67565b6117b457600080fd5b6111d486338787600260008989600061342f565b60006117d3876122cc565b6117dc57600080fd5b604051634fbf0dfb60e11b81526001600160a01b03881690639f7e1bf690611808903390600401614617565b60206040518083038186803b15801561182057600080fd5b505afa158015611834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118589190810190613b67565b61186157600080fd5b6001600160a01b0380861660009081526002602052604090819020805460ff1916600117905551878216918916907ff9a0b30bcf861874bf36630742f0d56b22648898d7cdd0cd785d74acd17e0d44906118c29089908990899089906146cb565b60405180910390a35060019695505050505050565b60006118e2336122cc565b6118eb57600080fd5b336001600160a01b03167f97f8b399e255f30d56b759b645c86652624ee258937579ff4a747abaeae857c485866001600160a01b031663c828371e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561195057600080fd5b505afa158015611964573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611988919081019061427a565b876001600160a01b031663439f5ac26040518163ffffffff1660e01b815260040160206040518083038186803b1580156119c157600080fd5b505afa1580156119d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119f9919081019061427a565b8787604051611a0c9594939291906148c2565b60405180910390a25060019392505050565b6005546000906001600160a01b03163314611a3857600080fd5b6000838152600660205260409020546001600160a01b031615611a765760405162461bcd60e51b8152600401611a6d906149a8565b60405180910390fd5b611a88826001600160a01b0316613773565b611a9157600080fd5b600083815260066020526040902080546001600160a01b0319166001600160a01b0384161790556929b430b932aa37b5b2b760b11b831480611ae25750826c4d61726b6574466163746f727960981b145b80611afa5750826a45746845786368616e676560a81b145b15611b27576001600160a01b0382166000908152600360205260409020805460ff19166001179055611b81565b826354696d6560e01b1415611b5657600780546001600160a01b0319166001600160a01b038416179055611b81565b8263086c2e6d60e31b1415611b8157600c80546001600160a01b0319166001600160a01b0384161790555b7fa037dd0e01f0488a530cb17065a6d2f284fae016004fc744ee2a41d5cacf85d58284604051611bb2929190614760565b60405180910390a150600192915050565b6005546001600160a01b031681565b3360009081526003602052604081205460ff16611bee57600080fd5b600c546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611c22908790879087906004016146a7565b602060405180830381600087803b158015611c3c57600080fd5b505af1158015611c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c749190810190613b67565b611c7d57600080fd5b5060019392505050565b6000611c928b6122cc565b611c9b57600080fd5b604051634fbf0dfb60e11b81526001600160a01b038c1690639f7e1bf690611cc7903390600401614617565b60206040518083038186803b158015611cdf57600080fd5b505afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d179190810190613b67565b611d2057600080fd5b896001600160a01b03168b6001600160a01b03167f81afc41f9f2f0d22a52a2ddb3a0b6db83baf39c05544fd25f2751b72b1943bb58b8b8b8b8b8b8b8b611d65610b4f565b604051611d7a99989796959493929190614702565b60405180910390a35060019a9950505050505050505050565b6000611d9e8b6122cc565b611da757600080fd5b604051634fbf0dfb60e11b81526001600160a01b038c1690639f7e1bf690611dd3903390600401614617565b60206040518083038186803b158015611deb57600080fd5b505afa158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e239190810190613b67565b611e2c57600080fd5b886001600160a01b03168a6001600160a01b03168c6001600160a01b03167fe7f47639cdf56ec6c5451df334b73c9ca5cccd20da2c0f4e390e9bb71a6f672a8b8b8b8b8b8b8b611e7a610b4f565b604051611e8e98979695949392919061485b565b60405180910390a45060019a9950505050505050505050565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b03163314611ee357600080fd5b816001600160a01b0316836001600160a01b03167f213a05b9ad8567c2f8fa868e7375e5bf30e69add0dbb5913ca8a3e58c815c268846001600160a01b031663bb24882e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f5157600080fd5b505afa158015611f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f89919081019061427a565b604051610ad49190614965565b6000806000905084600081518110611faa57fe5b602002602001015160001480611fd357508385600081518110611fc957fe5b6020026020010151145b611fdc57600080fd5b82855114611ffc5760405162461bcd60e51b8152600401611a6d90614a05565b60005b855181101561203e57600086828151811061201657fe5b6020026020010151905061203381846135ef90919063ffffffff16565b925050600101611fff565b5083811461205e5760405162461bcd60e51b8152600401611a6d90614a62565b8460405160200161206f91906145e1565b604051602081830303815290604052805190602001209150509392505050565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b031633146120cb57600080fd5b836001600160a01b0316856001600160a01b0316876001600160a01b03167fdd7dcfa6708112395eb94e9b1889295fb19af21ef290e918256838c979b2dfbd8686612114610b4f565b60405161212393929190614c43565b60405180910390a450600195945050505050565b60006001198214156121505750655af3107a4000610ae0565b600061218284612176678ac7230489e80000670de0b6b3a764000063ffffffff61377916565b9063ffffffff6137a016565b9050655af3107a40005b818110156121ac576121a581600a63ffffffff61377916565b905061218c565b9050806121cd670de0b6b3a76400006121768681858a63ffffffff61377916565b95945050505050565b6000336121e2816127a4565b6121eb57600080fd5b856001600160a01b0316876001600160a01b0316896001600160a01b03167f6afb0328cf957750be87a6f34b1cd21457ddf1382af65f9592ff2d333945633f84898989612236610b4f565b60405161224795949392919061464e565b60405180910390a4506001979650505050505050565b6001600160a01b0381166000908152600460209081526040918290206002018054835181840281018401909452808452606093928301828280156122c057602002820191906000526020600020905b8154815260200190600101908083116122ac575b50505050509050919050565b6001600160a01b031660009081526001602052604090205460ff1690565b60006122f5336122cc565b6122fe57600080fd5b6009805460010190819055336000818152600a6020526040908190209290925590517fce5b6de2a0053ebc6c04e68bcbb9f0a1f2deeb7049c72881e198f95b5752db829061234d908590614617565b60405180910390a2506001919050565b655af3107a400081565b600033612373816127a4565b61237c57600080fd5b6109db873388886001866001600160a01b031663f1be16796040518163ffffffff1660e01b815260040160206040518083038186803b1580156123be57600080fd5b505afa1580156123d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123f69190810190613c44565b8a8a60006137b5565b600b5481565b600c546001600160a01b031681565b6005546000906001600160a01b0316331461242e57600080fd5b6008546001600160a01b03161561244457600080fd5b6040805160008082526020820190925261246091908190613626565b600880546001600160a01b0319166001600160a01b03928316179081905516919050565b600080612490336135d2565b9050806001600160a01b03167f9c75a088fcb0527d67a80a7d0a5006bbabe02f4b23984234ae68b2b146f001bc8460405161170a9190614965565b6001600160a01b03166000908152600460208190526040909120015460ff1690565b60006124f8856122cc565b61250157600080fd5b6040516301ba1fa360e01b81526001600160a01b038616906301ba1fa39061252d903390600401614617565b60206040518083038186803b15801561254557600080fd5b505afa158015612559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061257d9190810190613b67565b61258657600080fd5b836001600160a01b0316336001600160a01b0316866001600160a01b03167f18052b5e29020458e154999fa71891a5db3404a5b0b9c5ec60c90adca7d38d6386866125cf610b4f565b6040516125de93929190614c43565b60405180910390a4506001949350505050565b6001600160a01b03166000908152600a602052604090205490565b6000612617876122cc565b61262057600080fd5b60405163f76514c760e01b81526001600160a01b0388169063f76514c79061264c903390600401614617565b60206040518083038186803b15801561266457600080fd5b505afa158015612678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061269c9190810190613b67565b6126a557600080fd5b846001600160a01b0316866001600160a01b0316886001600160a01b03167f3ffffb51f92f91faf4ba8c906f5a0180d1033be93b1e227cd92c872dc234fdf0338888886126f0610b4f565b60405161270195949392919061464e565b60405180910390a45060019695505050505050565b600080612722336135d2565b9050806001600160a01b03167fadddfaec4505d90a6a211907536944e6e1af7ff5cf6d1873de43e36020f360098460405161170a9190614965565b600080612769336135d2565b9050806001600160a01b03167f69af68e366a0570364e3a086f3b5ac79f08ecc3f93eaccbfcf3864809b12b5d88460405161170a9190614965565b6001600160a01b031660009081526002602052604090205460ff1690565b662386f26fc1000081565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b0316331480612892575061280f856122cc565b801561289257506040516347d20e3b60e01b81526001600160a01b038616906347d20e3b90612842903390600401614617565b60206040518083038186803b15801561285a57600080fd5b505afa15801561286e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128929190810190613b67565b61289b57600080fd5b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffe06587917de7df83a446bcbb889cee699d7fc35b7b53e263282c2acb5a16499856128e3610b4f565b6040516125de929190614c35565b60006128fc826122cc565b61290557600080fd5b604051634fbf0dfb60e11b815233906001600160a01b03841690639f7e1bf690612933908490600401614617565b60206040518083038186803b15801561294b57600080fd5b505afa15801561295f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129839190810190613b67565b61298c57600080fd5b806001600160a01b0316836001600160a01b03167f3b4f3db017516414df2695e5b0052661779d7163a6cd4368fd74313be73fa0b860405160405180910390a350600192915050565b6354696d6560e01b600090815260066020527f4143d616c96d2b1f51d9d6f19a8a5a7e7b5e4585aaf1cb11403e9050a04d847f546001600160a01b03163314612a1d57600080fd5b7f11dda748f0bd3af85a073da0088a0acb827d9584a4fdb825c81f1232a530953882604051612a4c9190614965565b60405180910390a1506001919050565b60095481565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b03163314612a9e57600080fd5b866001600160a01b0316886001600160a01b03167f95366b7f64c6bb45149f9f7c522403fceebe5170ff76b8ffde2b0ab943ac11ce8888888888612ae0610b4f565b604051612af2969594939291906148f2565b60405180910390a3506001979650505050505050565b675761727053796e6360c01b600090815260066020527f4156b4e39cdfa850a86fd78358d7f438ebb618c0872d6f5f139369aa1ef74335546001600160a01b03163314612b5457600080fd5b836001600160a01b03167f7589653fe5a2ab3ccc12538316852339868efdd9d3bd0b84d055cf224cf968738484604051610934929190614c35565b6929b430b932aa37b5b2b760b11b60009081526006602052600080516020614cd7833981519152546001600160a01b03163314612bcb57600080fd5b836001600160a01b0316856001600160a01b0316856001600160a01b031663870c426d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c1857600080fd5b505afa158015612c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c509190810190613c44565b6001600160a01b03167f350ea32dc29530b9557420816d743c436f8397086f98c96292138edd69e01cb386866040516125de929190614c35565b6000612c95866122cc565b612c9e57600080fd5b336001600160a01b0316866001600160a01b031663b80907f26040518163ffffffff1660e01b815260040160206040518083038186803b158015612ce157600080fd5b505afa158015612cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d199190810190613c44565b6001600160a01b031614612d2c57600080fd5b6111d486338787600080898960006137b5565b6000612d4a8b6122cc565b612d5357600080fd5b604051634fbf0dfb60e11b81526001600160a01b038c1690639f7e1bf690612d7f903390600401614617565b60206040518083038186803b158015612d9757600080fd5b505afa158015612dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dcf9190810190613b67565b612dd857600080fd5b886001600160a01b03168a6001600160a01b03168c6001600160a01b03167fc3ebb227c22e7644e9bef8822009f746a72c86f239760124d67fdc2c302b31158b8b8b8b8b8b8b612e26610b4f565b604051611e8e9897969594939291906147b9565b6000612e45876122cc565b612e4e57600080fd5b336001600160a01b0316876001600160a01b031663b80907f26040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9157600080fd5b505afa158015612ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ec99190810190613c44565b6001600160a01b031614612edc57600080fd5b6109db87338888886000808a8a60006134d7565b6000612efb856122cc565b612f0457600080fd5b604051634fbf0dfb60e11b81526001600160a01b03861690639f7e1bf690612f30908790600401614617565b60206040518083038186803b158015612f4857600080fd5b505afa158015612f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f809190810190613b67565b612f8957600080fd5b836001600160a01b0316631a3739ec6040518163ffffffff1660e01b815260040160206040518083038186803b158015612fc257600080fd5b505afa158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ffa9190810190613c44565b6001600160a01b0316336001600160a01b03161461301757600080fd5b836001600160a01b0316856001600160a01b03167fee62c58e2603b92f96a002e012f4f3bd5748102cfa3b711f6d778c6237fcaa968585604051610f6592919061468d565b6001600160a01b031660009081526020819052604090205460ff1690565b6005546000906001600160a01b0316331461309457600080fd5b600580546001600160a01b03191660011790556040517ff06c142f93fdd00fbcd1e8f3d82e6f22667d52df764b39570061a7dbeea09be090600090a150600190565b60006130e1866122cc565b6130ea57600080fd5b6040516301ba1fa360e01b81526001600160a01b038716906301ba1fa390613116903390600401614617565b60206040518083038186803b15801561312e57600080fd5b505afa158015613142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131669190810190613b67565b61316f57600080fd5b6111d48633878760026000898960006137b5565b60008061318f336135d2565b9050835160021461319f57600080fd5b836001815181106131ac57fe5b6020026020010151846000815181106131c157fe5b6020026020010151126131d357600080fd5b6000846000815181106131e257fe5b6020026020010151856001815181106131f757fe5b602002602001015103905083811161320e57600080fd5b6001600160a01b038916600090815260208181526040808320805460ff19166001179055600482529091208b51613247928d019061380a565b506001600160a01b0389811660009081526004602090815260409091206001810180546001600160a01b031916938c169390931790925586516132909260030191880190613888565b506001600160a01b038916600090815260046020819052604090912001805460ff191660021790556132c28185612137565b600460008b6001600160a01b03166001600160a01b0316815260200190815260200160002060050181905550876001600160a01b0316826001600160a01b03167fea17ae24b0d40ea7962a6d832db46d1f81eaec1562946d0830d1c21d4c000ec18d8d8d8c8c8c60028d6000604051908082528060200260200182016040528015613357578160200160208202803883390190505b508d6001600160a01b031663a7e8d7626040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561339357600080fd5b505af11580156133a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133cb919081019061427a565b6133d3610b4f565b604051611d7a9b9a99989796959493929190614ba0565b6000908152600660205260409020546001600160a01b031690565b6001600160a01b031660009081526004602052604090206005015490565b678ac7230489e8000081565b6000876001600160a01b0316896001600160a01b03168b6001600160a01b03167f145a4839b3d82d1e28f6ed93f52622b351892e835530386bb1fe4effba99aeea8a8a8a8a6040516134849493929190614b6c565b60405180910390a4876001600160a01b03168a6001600160a01b03167f63fd58f559b73fc4da5511c341ec8a7b31c5c48538ef83c6077712b6edf5f7cb8b8989888860405161141b959493929190614779565b6000876001600160a01b0316896001600160a01b03168c6001600160a01b03167f3c67396e9c55d2fc8ad68875fc5beca1d96ad2a2f23b210ccc1d986551ab6fdf8d8b8b8b60405161352c9493929190614821565b60405180910390a4886001600160a01b03168b6001600160a01b03167f63fd58f559b73fc4da5511c341ec8a7b31c5c48538ef83c6077712b6edf5f7cb8c8989898860405161357f959493929190614779565b60405180910390a3876001600160a01b03168b6001600160a01b03167f63fd58f559b73fc4da5511c341ec8a7b31c5c48538ef83c6077712b6edf5f7cb8c89898888604051611d7a959493929190614779565b6000816135de816122cc565b610ae057600080fd5b6301e1338090565b60008282018381101561360157600080fd5b9392505050565b62278d0090565b600081831061361f575081610ae0565b5080610ae0565b6e556e697665727365466163746f727960881b600090815260066020527fe871b5eb9e1a06d6bd1006f333179ec3b44446b2a467a964e8c078690ec21a225460405163a7ac913760e01b81526001600160a01b03909116908290829063a7ac91379061369a9089908990899060040161496e565b602060405180830381600087803b1580156136b457600080fd5b505af11580156136c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136ec9190810190613c44565b6001600160a01b038082166000818152600160208181526040808420805460ff1990811685179091556003909252909220805490921617905591925087167fe36b09d83f9cfa88c37f071fc2cfb5ff30b764cbd98088e70d965573c9ce5bbd86613754610b4f565b604051613762929190614938565b60405180910390a395945050505050565b3b151590565b60008261378857506000610ae0565b8282028284828161379557fe5b041461360157600080fd5b6000808284816137ac57fe5b04949350505050565b6000876001600160a01b0316896001600160a01b03168b6001600160a01b03167f07f766729171db8cc73d96b25cc56784077e26c7ff48b0187877ace391c181a68a8a8a8a6040516134849493929190614b6c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061384b57805160ff1916838001178555613878565b82800160010185558215613878579182015b8281111561387857825182559160200191906001019061385d565b506138849291506138f7565b5090565b828054828255906000526020600020908101928215613878579160200282018281111561387857825182559160200191906001019061385d565b6040805160c0810182526060808252600060208301819052928201819052808201529060808201908152602001600081525090565b610bcf91905b8082111561388457600081556001016138fd565b8035610ae081614cab565b600082601f83011261392c578081fd5b813561393f61393a82614c7f565b614c59565b81815291506020808301908481018184028601820187101561396057600080fd5b60005b8481101561397f57813584529282019290820190600101613963565b505050505092915050565b8035610ae081614cc0565b600082601f8301126139a5578081fd5b81356001600160401b038111156139ba578182fd5b6139cd601f8201601f1916602001614c59565b91508082528360208285010111156139e457600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215613a0e578081fd5b813561360181614cab565b600080600060608486031215613a2d578182fd5b8335613a3881614cab565b92506020840135613a4881614cab565b91506040840135613a5881614cab565b809150509250925092565b600080600060608486031215613a77578283fd5b8335613a8281614cab565b92506020840135613a9281614cab565b929592945050506040919091013590565b60008060008060808587031215613ab8578081fd5b8435613ac381614cab565b93506020850135613ad381614cab565b93969395505050506040820135916060013590565b600080600060608486031215613afc578283fd5b8335613b0781614cab565b95602085013595506040909401359392505050565b600080600060608486031215613b30578081fd5b83356001600160401b03811115613b45578182fd5b613b518682870161391c565b9660208601359650604090950135949350505050565b600060208284031215613b78578081fd5b815161360181614cc0565b600060208284031215613b94578081fd5b5035919050565b60008060408385031215613bad578182fd5b823591506020830135613bbf81614cab565b809150509250929050565b60008060408385031215613bdc578182fd5b8235915060208301356001600160401b03811115613bf8578182fd5b613c048582860161391c565b9150509250929050565b600080600060608486031215613c22578081fd5b8335613c2d81614cab565b9250602084013591506040840135613a5881614cc0565b600060208284031215613c55578081fd5b815161360181614cab565b60008060408385031215613c72578182fd5b8235613c7d81614cab565b91506020830135613bbf81614cab565b600080600060608486031215613a2d578081fd5b6000806000806000806000806000806101408b8d031215613cc0578788fd5b613cca8c8c613911565b9950613cd98c60208d01613911565b9850613ce88c60408d01613911565b9750613cf78c60608d01613911565b965060808b01359550613d0d8c60a08d0161398a565b945060c08b01356001600160401b0380821115613d28578586fd5b613d348e838f0161391c565b955060e08d0135915080821115613d49578485fd5b50613d568d828e01613995565b9350506101008b013591506101208b013590509295989b9194979a5092959850565b6000806000806000806000806000806101408b8d031215613d97578384fd5b613da18c8c613911565b9950613db08c60208d01613911565b9850613dbf8c60408d01613911565b9750613dce8c60608d01613911565b965060808b0135955060a08b01356001600160401b0380821115613df0578586fd5b613dfc8e838f01613995565b965060c08d0135915080821115613e11578586fd5b50613e1e8d828e0161391c565b94505060e08b013592506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060008060c08789031215613e5f578384fd5b8635613e6a81614cab565b95506020870135613e7a81614cab565b94506040870135613e8a81614cab565b935060608701356001600160401b03811115613ea4578283fd5b613eb089828a0161391c565b9350506080870135915060a087013590509295509295509295565b6000806000806000806000806000806101408b8d031215613eea578384fd5b8a35613ef581614cab565b995060208b0135613f0581614cab565b985060408b0135613f1581614cab565b975060608b01356001600160401b03811115613f2f578485fd5b613f3b8d828e0161391c565b97505060808b0135955060a08b0135945060c08b0135613f5a81614cc0565b8094505060e08b013592506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060008060c08789031215613f9c578384fd5b8635613fa781614cab565b95506020870135613fb781614cab565b94506040870135613fc781614cab565b9350606087013592506080870135915060a08701356001600160401b03811115613fef578182fd5b613ffb89828a0161391c565b9150509295509295509295565b60008060008060008060c08789031215614020578384fd5b863561402b81614cab565b9550602087013561403b81614cab565b9450604087013561404b81614cab565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600060e0888a031215614086578081fd5b873561409181614cab565b965060208801356140a181614cab565b955060408801356140b181614cab565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b60008060008060808587031215613ab8578182fd5b600080600080600060a08688031215614105578283fd5b853561411081614cab565b9450602086013561412081614cab565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215614150578182fd5b823561415b81614cab565b915060208301356001600160401b03811115613bf8578182fd5b6000806000806080858703121561418a578182fd5b843561419581614cab565b935060208501356141a581614cab565b925060408501356141b581614cab565b915060608501356141c581614cab565b939692955090935050565b600080600080608085870312156141e5578182fd5b84356141f081614cab565b9350602085013561420081614cab565b9250604085013561421081614cab565b9396929550929360600135925050565b600080600080600060a08688031215614237578283fd5b853561424281614cab565b9450602086013561425281614cab565b9350604086013561426281614cab565b94979396509394606081013594506080013592915050565b60006020828403121561428b578081fd5b5051919050565b60008060008060008060c087890312156142aa578384fd5b8635955060208701356001600160401b038111156142c6578485fd5b6142d289828a01613995565b95505060408701356142e381614cab565b935060608701356142f381614cab565b9250608087013561430381614cab565b8092505060a087013590509295509295509295565b600080600080600080600060e0888a031215614332578081fd5b873596506020808901356001600160401b0380821115614350578384fd5b61435c8c838d01613995565b985060408b0135915061436e82614cab565b90965060608a01359061438082614cab565b90955060808a01359061439282614cab565b90945060a08a0135935060c08a013590808211156143ae578384fd5b50808a018b601f8201126143c0578384fd5b803591506143d061393a83614c7f565b82815283810190828501858502840186018f10156143ec578687fd5b8693505b8484101561440e5780358352600193909301929185019185016143f0565b50809550505050505092959891949750929550565b600080600080600080600080610100898b03121561443f578182fd5b883597506020808a01356001600160401b038082111561445d578485fd5b6144698d838e01613995565b995060408c0135915061447b82614cab565b90975060608b01359061448d82614cab565b90965060808b01359061449f82614cab565b90955060a08b0135945060c08b013590808211156144bb578485fd5b50808b018c601f8201126144cd578485fd5b803591506144dd61393a83614c7f565b8083825284820191508483018f8687870286010111156144fb578788fd5b8793505b8484101561451d5780358352600193909301929185019185016144ff565b50809650505050505060e089013590509295985092959890939650565b6000806040838503121561454c578182fd5b50508035926020909101359150565b6000815180845260208401935060208301825b8281101561458c57815186526020958601959091019060010161456e565b5093949350505050565b60008151808452815b818110156145bb5760208185018101518683018201520161459f565b818111156145cc5782602083870101525b50601f01601f19169290920160200192915050565b8151600090829060208501835b8281101561460c5781518452602093840193909101906001016145ee565b509195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b600060018060a01b038716825285602083015284604083015260a0606083015261467b60a083018561455b565b90508260808301529695505050505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03851681526080602082018190526000906146ef9083018661455b565b6040830194909452506060015292915050565b6001600160a01b038a168152610120602082018190526000906147278382018c61455b565b604084019a909a5250506060810196909652931515608086015260a085019290925260c084015260e08301526101009091015292915050565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03868116825260a082019061479487614c9e565b8660208401528086166040840152508360608301528260808301529695505050505050565b6001600160a01b0389168152602081018890528615156040820152610100606082018190526000906147ed8382018961455b565b83810360808501526147ff8189614596565b60a085019790975250505060c081019290925260e09091015295945050505050565b6001600160a01b03858116825260208201859052608082019061484385614c9e565b84604084015280841660608401525095945050505050565b6001600160a01b038916815260208101889052610100604082018190526000906148878382018a614596565b8381036060850152614899818a61455b565b925050508560808301528460a08301528360c08301528260e08301529998505050505050505050565b6001600160a01b039590951685526020850193909352604084019190915260608301521515608082015260a00190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b600060208252613601602083018461455b565b60006040825261494b604083018561455b565b90508260208301529392505050565b901515815260200190565b90815260200190565b600060018060a01b0385168252836020830152606060408301526121cd606083018461455b565b602081016149a283614c9e565b91905290565b6020808252603d908201527f41756775722e7265676973746572436f6e74726163743a206b6579206861732060408201527f616c7265616479206265656e207573656420696e207265676973747279000000606082015260800190565b6020808252603b908201527f41756775722e6465726976655061796f7574446973747269627574696f6e486160408201527f73683a204d616c666f726d6564207061796f7574206c656e6774680000000000606082015260800190565b60208082526038908201527f41756775722e6465726976655061796f7574446973747269627574696f6e486160408201527f73683a204d616c666f726d6564207061796f75742073756d0000000000000000606082015260800190565b600060208252825160c06020840152614adb60e0840182614596565b60018060a01b03602086015116604085015260408501519150601f1980858303016060860152614b0b828461455b565b6060870151935081868203016080870152614b26818561455b565b9250505060808501519150614b3a82614c9e565b60a08481019290925293015160c0909201919091525090565b600083825260406020830152611660604083018461455b565b84815260808101614b7c85614c9e565b60208201949094526001600160a01b03929092166040830152606090910152919050565b60006101608d8352806020840152614bba8184018e614596565b6001600160a01b038d811660408601528c81166060860152608085018c905284820360a08601529150614bed818b61455b565b915050614bf988614c9e565b8760c08401528660e0840152828103610100840152614c18818761455b565b610120840195909552505061014001529998505050505050505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b6040518181016001600160401b0381118282101715614c7757600080fd5b604052919050565b60006001600160401b03821115614c94578081fd5b5060209081020190565b60038110614ca857fe5b50565b6001600160a01b0381168114614ca857600080fd5b8015158114614ca857600080fd5b636105e4009056fe5ef7677458e0f7b79c5d16119f1dd47672514c31e3d52a2d93950ee5524d9e4da365627a7a7231582047e52d2ad02d97b64c612d6adf7d80fdd5c4f6d3bae700f726a27095f26f51746c6578706572696d656e74616cf564736f6c634300050f0040
Deployed Bytecode Sourcemap
47207:33254:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47207:33254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53055:32;;;:::i;:::-;;;;;;;;;;;;;;;;79718:240;;;;;;;;;:::i;:::-;;;;;;;;72990:511;;;;;;;;;:::i;53032:17::-;;;:::i;67496:367::-;;;;;;;;;:::i;68624:325::-;;;;;;;;;:::i;58019:97::-;;;:::i;:::-;;;;;;;;71202:537;;;;;;;;;:::i;57755:112::-;;;;;;;;;:::i;61408:1046::-;;;;;;;;;:::i;75462:361::-;;;;;;;;;:::i;75829:482::-;;;;;;;;;:::i;68216:402::-;;;;;;;;;:::i;71745:447::-;;;;;;;;;:::i;60252:1150::-;;;;;;;;;:::i;58274:470::-;;;:::i;59541:156::-;;;;;;;;;:::i;:::-;;;;;;;;55342:320;;;;;;;;;:::i;57331:156::-;;;;;;;;;:::i;79234:232::-;;;;;;;;;:::i;76317:456::-;;;;;;;;;:::i;56797:528::-;;;;;;;;;:::i;74024:346::-;;;;;;;;;:::i;53946:639::-;;;;;;;;;:::i;52952:23::-;;;:::i;57524:225::-;;;;;;;;;:::i;65678:720::-;;;;;;;;;:::i;64999:673::-;;;;;;;;;:::i;69733:266::-;;;;;;;;;:::i;58750:785::-;;;;;;;;;:::i;69376:351::-;;;;;;;;;:::i;63694:613::-;;;;;;;;;:::i;66935:555::-;;;;;;;;;:::i;59873:162::-;;;;;;;;;:::i;:::-;;;;;;;;56322:126;;;;;;;;;:::i;70423:294::-;;;;;;;;;:::i;53453:51::-;;;:::i;73507:511::-;;;;;;;;;:::i;53179:72::-;;;:::i;53737:17::-;;;:::i;55088:248::-;;;:::i;78952:276::-;;;;;;;;;:::i;59703:164::-;;;;;;;;;:::i;:::-;;;;;;;;74376:460;;;;;;;;;:::i;56454:142::-;;;;;;;;;:::i;66404:525::-;;;;;;;;;:::i;79472:240::-;;;;;;;;;:::i;78706:::-;;;;;;;;;:::i;56638:153::-;;;;;;;;;:::i;53604:67::-;;;:::i;68955:415::-;;;;;;;;;:::i;67869:341::-;;;;;;;;;:::i;74842:189::-;;;;;;;;;:::i;53094:26::-;;;:::i;70005:412::-;;;;;;;;;:::i;79964:256::-;;;;;;;;;:::i;72651:333::-;;;;;;;;;:::i;72198:447::-;;;;;;;;;:::i;64313:680::-;;;;;;;;;:::i;70723:473::-;;;;;;;;;:::i;75037:419::-;;;;;;;;;:::i;58152:116::-;;;;;;;;;:::i;54896:155::-;;;:::i;76779:456::-;;;;;;;;;:::i;62460:1228::-;;;;;;;;;:::i;54792:98::-;;;;;;;;;:::i;60041:175::-;;;;;;;;;:::i;53367:55::-;;;:::i;53055:32::-;;;-1:-1:-1;;;;;53055:32:0;;:::o;79718:240::-;79818:4;79842:34;79864:10;79842:13;:34::i;:::-;79834:43;;;;;;79917:9;-1:-1:-1;;;;;79892:59:0;;79928:10;79940:5;79947:3;79892:59;;;;;;;;;;;;;;;;;79718:240;;;;;:::o;72990:511::-;73145:4;73226:10;73255:41;73226:10;73255:19;:41::i;:::-;73247:50;;;;;;73307:166;73331:9;73343:10;73355:7;73364;73373:29;73412:20;-1:-1:-1;;;;;73412:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;73412:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;73412:32: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;73412:32:0;;;;;;;;;73447:12;73461:8;73471:1;73307:15;:166::i;:::-;-1:-1:-1;73490:4:0;;72990:511;-1:-1:-1;;;;;;;72990:511:0:o;53032:17::-;;;-1:-1:-1;;;;;53032:17:0;;:::o;67496:367::-;67592:4;67616:26;67632:9;67616:15;:26::i;:::-;67608:35;;;;;;67661:79;;-1:-1:-1;;;67661:79:0;;-1:-1:-1;;;;;67661:44:0;;;;;:79;;67728:10;;67661:79;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;67661:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;67661:79: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;67661:79:0;;;;;;;;;67653:88;;;;;;67814:7;-1:-1:-1;;;;;67756:79:0;67794:9;-1:-1:-1;;;;;67756:79:0;;67824:10;67756:79;;;;;;;;;;;;;;;-1:-1:-1;67852:4:0;67496:367;;;;;:::o;68624:325::-;68713:4;68764:10;68793:29;68764:10;68793:15;:29::i;:::-;68785:38;;;;;;68907:12;-1:-1:-1;;;;;68838:83:0;68879:17;-1:-1:-1;;;;;68838:83:0;68861:7;-1:-1:-1;;;;;68838:83:0;;;;;;;;;;;-1:-1:-1;68938:4:0;;68624:325;-1:-1:-1;;;68624:325:0:o;58019:97::-;58090:4;;:19;;;-1:-1:-1;;;58090:19:0;;;;58064:7;;-1:-1:-1;;;;;58090:4:0;;:17;;:19;;;;;;;;;;;;;;:4;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;58090:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58090:19: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;58090:19:0;;;;;;;;;58083:26;;58019:97;;:::o;71202:537::-;71374:4;71455:10;71484:41;71455:10;71484:19;:41::i;:::-;71476:50;;;;;;71536:175;71565:9;71577:10;71589:5;71596:3;71601:6;71609:29;71648:20;-1:-1:-1;;;;;71648:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;71648:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;71648:32: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;71648:32:0;;;;;;;;;71683:12;71697:10;71709:1;71536:20;:175::i;:::-;-1:-1:-1;71728:4:0;;71202:537;-1:-1:-1;;;;;;;;71202:537:0:o;57755:112::-;-1:-1:-1;;;;;57837:23:0;57814:4;57837:23;;;:13;:23;;;;;;;;;57755:112::o;61408:1046::-;61599:4;61615:19;61637:34;61660:10;61637:22;:34::i;:::-;-1:-1:-1;;;;;61681:25:0;;:7;:25;;;;;;;;;;;;:32;;-1:-1:-1;;61681:32:0;61709:4;61681:32;;;61749:15;;61762:1;61749:15;;;61723:23;61749:15;;;;;;61615:56;;-1:-1:-1;61723:23:0;;61749:15;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;61749:15:0;61723:41;;53302:1;61774:7;61782:1;61774:10;;;;;;;;;;;;;:30;;;;;53353:7;61814;61822:1;61814:10;;;;;;;;;;;;;;;;;;:30;;;;-1:-1:-1;;;;;61854:36:0;;;;;;:18;:36;;;;;:59;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;61923:36:0;;;;;;;:18;:36;;;;;;;;:50;;;:67;;-1:-1:-1;;;;;;61923:67:0;;;;;;;;;;62000:47;;;:75;;-1:-1:-1;;62000:75:0;;;53665:6;62085:61;;;;:98;62356:16;;;;;;;;;;;-1:-1:-1;;;62374:35:0;;;;61923:67;;62198:228;;;;;62223:8;;62233:10;;61923:36;;62270:19;;62291:21;;62314:7;;62350:4;;62356:16;;62198:228;;62374:33;;:35;;;;;;;;;;;61923:36;62198:228;62374:35;;;5:2:-1;;;;30:1;27;20:12;5:2;62374:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;62374:35: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;62374:35:0;;;;;;;;;62411:14;:12;:14::i;:::-;62198:228;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62443:4:0;;61408:1046;-1:-1:-1;;;;;;;;61408:1046:0:o;75462:361::-;75557:4;75581:26;75597:9;75581:15;:26::i;:::-;75573:35;;;;;;75673:39;;-1:-1:-1;;;75673:39:0;;75644:10;;-1:-1:-1;;;;;75673:30:0;;;;;:39;;75644:10;;75673:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;75673:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;75673:39: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;75673:39:0;;;;;;;;;75665:48;;;;;;75774:7;-1:-1:-1;;;;;75728:67:0;75754:9;-1:-1:-1;;;;;75728:67:0;;75784:5;75791:3;75728:67;;;;;;;;;;;;;;;;-1:-1:-1;75812:4:0;;75462:361;-1:-1:-1;;;;75462:361:0:o;75829:482::-;75995:4;76019:26;76035:9;76019:15;:26::i;:::-;76011:35;;;;;;76064:65;;-1:-1:-1;;;76064:65:0;;-1:-1:-1;;;;;76064:37:0;;;;;:65;;76117:10;;76064:65;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;76064:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;76064: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;76064:65:0;;;;;;;;;76056:74;;;;;;76140:143;76169:9;76181:10;76193:5;76200:3;76205:6;76213:28;76251:1;76255:12;76269:10;76281:1;76140:20;:143::i;68216:402::-;68324:4;68348:26;68364:9;68348:15;:26::i;:::-;68340:35;;;;;;68440:39;;-1:-1:-1;;;68440:39:0;;68411:10;;-1:-1:-1;;;;;68440:30:0;;;;;:39;;68411:10;;68440:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;68440:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;68440:39: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;68440:39:0;;;;;;;;;68432:48;;;;;;68539:7;-1:-1:-1;;;;;68495:95:0;68519:9;-1:-1:-1;;;;;68495:95:0;;68549:14;:12;:14::i;:::-;68565:24;68495:95;;;;;;;;;;;;;;;;-1:-1:-1;68607:4:0;;68216:402;-1:-1:-1;;;68216:402:0:o;71745:447::-;71891:4;71915:26;71931:9;71915:15;:26::i;:::-;71907:35;;;;;;72011:10;-1:-1:-1;;;;;71960:62:0;:9;-1:-1:-1;;;;;71960:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;71960:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;71960:30: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;71960:30:0;;;;;;;;;-1:-1:-1;;;;;71960:62:0;;71952:71;;;;;;72033:131;72057:9;72069:10;72081:7;72090;72099:25;72134:1;72138:12;72152:8;72162:1;72033:15;:131::i;:::-;-1:-1:-1;72181:4:0;;71745:447;-1:-1:-1;;;;;;71745:447:0:o;60252:1150::-;60477:4;60493:19;60515:34;60538:10;60515:22;:34::i;:::-;-1:-1:-1;;;;;60559:25:0;;:7;:25;;;;;;;;;;;;:32;;-1:-1:-1;;60559:32:0;60587:4;60559:32;;;60627:15;;60640:1;60627:15;;;60601:23;60627:15;;;;;;60493:56;;-1:-1:-1;60601:23:0;;60627:15;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;60627:15:0;60601:41;;53302:1;60652:7;60660:1;60652:10;;;;;;;;;;;;;:30;;;;;53353:7;60692;60700:1;60692:10;;;;;;;;;;;;;;;;;;:30;;;;-1:-1:-1;;;;;60732:36:0;;;;;;:18;:36;;;;;:59;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;60801:36:0;;;;;;;:18;:36;;;;;;;;:50;;;:67;;-1:-1:-1;;;;;;60801:67:0;;;;;;;;;;;60878:57;;;;:45;;;:57;;;;:::i;:::-;-1:-1:-1;;;;;;60945:36:0;;;;;;:18;:36;;;;;;;;:47;:80;;60995:30;;60945:47;-1:-1:-1;;60945:80:0;60995:30;;60945:80;;;;;53665:6;61035:18;:36;61062:7;-1:-1:-1;;;;;61035:36:0;-1:-1:-1;;;;;61035:36:0;;;;;;;;;;;;:61;;:98;;;;61204:14;-1:-1:-1;;;;;61148:226:0;61162:9;-1:-1:-1;;;;;61148:226:0;;61173:8;61183:10;61195:7;61220:19;61241:21;61264:7;61273:30;61305:4;61311:9;61322;-1:-1:-1;;;;;61322:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;61322:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;61322:35: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;61322:35:0;;;;;;;;;61359:14;:12;:14::i;:::-;61148:226;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61391:4:0;;60252:1150;-1:-1:-1;;;;;;;;;60252:1150:0:o;58274:470::-;58325:7;58344:12;58359:14;:12;:14::i;:::-;58344:29;;58383:127;58397:16;;58390:4;:23;58383:127;;;58448:51;58469:29;:27;:29::i;:::-;58448:16;;;:51;:20;:51;:::i;:::-;58429:16;:70;58383:127;;;58560:16;;58519:38;58624:40;:38;:40::i;:::-;58617:47;;;-1:-1:-1;58681:56:0;58617:47;58706:30;58681:56;:24;:56;:::i;:::-;58674:63;;;;;58274:470;:::o;59541:156::-;59610:25;;:::i;:::-;-1:-1:-1;;;;;59654:36:0;;;;;;:18;:36;;;;;;;;;59647:43;;;;;;;;;;;-1:-1:-1;;59647:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59654:36;;59647:43;;59654:36;;59647:43;;;59654:36;59647:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59647:43:0;;;-1:-1:-1;;59647:43:0;;;;-1:-1:-1;;;;;59647:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59647:43:0;;;-1:-1:-1;;59647:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59541:156;;;:::o;55342:320::-;55468:9;55489:25;55517:34;55540:10;55517:22;:34::i;:::-;55489:62;;55568:87;55583:15;55600:29;55631:23;55568:14;:87::i;:::-;55561:94;55342:320;-1:-1:-1;;;;55342:320:0:o;57331:156::-;-1:-1:-1;;;57398:4:0;57435:22;;;:8;:22;;-1:-1:-1;;;;;;;;;;;57435:22:0;-1:-1:-1;;;;;57421:36:0;;;57435:22;;57421:36;;:59;;-1:-1:-1;;;;;;;57461:19:0;:7;:19;;;;;;;;;;;;;;57331:156::o;79234:232::-;79301:4;79317:19;79339:34;79362:10;79339:22;:34::i;:::-;79317:56;;79414:9;-1:-1:-1;;;;;79388:50:0;;79426:11;79388:50;;;;;;;;;;;;;;;-1:-1:-1;79455:4:0;;79234:232;-1:-1:-1;;79234:232:0:o;76317:456::-;76466:4;76490:26;76506:9;76490:15;:26::i;:::-;76482:35;;;;;;76535:65;;-1:-1:-1;;;76535:65:0;;-1:-1:-1;;;;;76535:37:0;;;;;:65;;76588:10;;76535:65;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;76535:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;76535: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;76535:65:0;;;;;;;;;76527:74;;;;;;76611:134;76635:9;76647:10;76659:7;76668;76677:28;76715:1;76719:12;76733:8;76743:1;76611:15;:134::i;56797:528::-;56991:4;57015:26;57031:9;57015:15;:26::i;:::-;57007:35;;;;;;57060:51;;-1:-1:-1;;;57060:51:0;;-1:-1:-1;;;;;57060:30:0;;;;;:51;;57099:10;;57060:51;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;57060:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57060:51: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;57060:51:0;;;;;;;;;57052:60;;;;;;-1:-1:-1;;;;;57122:35:0;;;;;;;:13;:35;;;;;;;:42;;-1:-1:-1;;57122:42:0;57160:4;57122:42;;;57179:118;;;;;;;;;;;;57136:20;;57257:17;;57276:5;;57283:13;;57179:118;;;;;;;;;;-1:-1:-1;57314:4:0;56797:528;;;;;;;;:::o;74024:346::-;74132:4;74156:38;74182:10;74156:15;:38::i;:::-;74148:47;;;;;;74231:10;-1:-1:-1;;;;;74210:132:0;;74251:14;74268;-1:-1:-1;;;;;74268:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;74268:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;74268:29: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;74268:29:0;;;;;;;;;74299:14;-1:-1:-1;;;;;74299:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;74299:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;74299:27: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;74299:27:0;;;;;;;;;74328:3;74333:8;74210:132;;;;;;;;;;;;;;;;;;;-1:-1:-1;74359:4:0;74024:346;;;;;:::o;53946:639::-;53817:8;;54033:4;;-1:-1:-1;;;;;53817:8:0;53803:10;:22;53795:31;;;;;;54083:1;54057:14;;;:8;:14;;;;;;-1:-1:-1;;;;;54057:14:0;:28;54049:102;;;;-1:-1:-1;;;54049:102:0;;;;;;;;;;;;;;;;;54169:17;:8;-1:-1:-1;;;;;54169:15:0;;:17::i;:::-;54161:26;;;;;;54197:14;;;;:8;:14;;;;;:25;;-1:-1:-1;;;;;;54197:25:0;-1:-1:-1;;;;;54197:25:0;;;;;-1:-1:-1;;;54236:20:0;;;:47;;;54260:4;-1:-1:-1;;;54260:23:0;54236:47;:72;;;;54287:4;-1:-1:-1;;;54287:21:0;54236:72;54232:279;;;-1:-1:-1;;;;;54324:23:0;;;;;;:13;:23;;;;;:30;;-1:-1:-1;;54324:30:0;54350:4;54324:30;;;54232:279;;;54375:4;-1:-1:-1;;;54375:14:0;54371:140;;;54405:4;:22;;-1:-1:-1;;;;;;54405:22:0;-1:-1:-1;;;;;54405:22:0;;;;;54371:140;;;54448:4;-1:-1:-1;;;54448:14:0;54444:67;;;54478:4;:22;;-1:-1:-1;;;;;;54478:22:0;-1:-1:-1;;;;;54478:22:0;;;;;54444:67;54525:32;54542:8;54552:4;54525:32;;;;;;;;;;;;;;;;-1:-1:-1;54574:4:0;53946:639;;;;:::o;52952:23::-;;;-1:-1:-1;;;;;52952:23:0;;:::o;57524:225::-;57652:10;57614:4;57638:25;;;:13;:25;;;;;;;;57630:34;;;;;;57682:4;;:38;;-1:-1:-1;;;57682:38:0;;-1:-1:-1;;;;;57682:4:0;;;;:17;;:38;;57700:5;;57707:3;;57712:7;;57682:38;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;57682:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57682:38: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;57682:38:0;;;;;;;;;57674:47;;;;;;-1:-1:-1;57738:4:0;57524:225;;;;;:::o;65678:720::-;66002:4;66026:26;66042:9;66026:15;:26::i;:::-;66018:35;;;;;;66071:51;;-1:-1:-1;;;66071:51:0;;-1:-1:-1;;;;;66071:30:0;;;;;:51;;66110:10;;66071:51;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;66071:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;66071:51: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;66071:51:0;;;;;;;;;66063:60;;;;;;66187:7;-1:-1:-1;;;;;66138:232:0;66175:9;-1:-1:-1;;;;;66138:232:0;;66196:20;66218:17;66237:20;66259:18;66279:9;66290:23;66315;66340:13;66355:14;:12;:14::i;:::-;66138:232;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;66387:4:0;65678:720;;;;;;;;;;;;:::o;64999:673::-;65304:4;65328:26;65344:9;65328:15;:26::i;:::-;65320:35;;;;;;65373:51;;-1:-1:-1;;;65373:51:0;;-1:-1:-1;;;;;65373:30:0;;;;;:51;;65412:10;;65373:51;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;65373:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;65373:51: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;65373:51:0;;;;;;;;;65365:60;;;;;;65503:7;-1:-1:-1;;;;;65440:204:0;65492:9;-1:-1:-1;;;;;65440:204:0;65480:9;-1:-1:-1;;;;;65440:204:0;;65512:20;65534:13;65549:12;65563:17;65582:13;65597:15;65614:13;65629:14;:12;:14::i;:::-;65440:204;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;65661:4:0;64999:673;;;;;;;;;;;;:::o;69733:266::-;-1:-1:-1;;;69815:4:0;69853:22;;;:8;:22;;-1:-1:-1;;;;;;;;;;;69853:22:0;-1:-1:-1;;;;;69853:22:0;69839:10;:36;69831:45;;;;;;69935:7;-1:-1:-1;;;;;69891:80:0;69915:9;-1:-1:-1;;;;;69891:80:0;;69945:7;-1:-1:-1;;;;;69945:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;69945:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;69945:25: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;69945:25:0;;;;;;;;;69891:80;;;;;;;58750:785;58886:7;58905:12;58920:1;58905:16;;59021:17;59039:1;59021:20;;;;;;;;;;;;;;59045:1;59021:25;:62;;;;59074:9;59050:17;59068:1;59050:20;;;;;;;;;;;;;;:33;59021:62;59013:71;;;;;;59130:12;59102:17;:24;:40;59094:112;;;;-1:-1:-1;;;59094:112:0;;;;;;;;;59221:9;59216:154;59240:17;:24;59236:1;:28;59216:154;;;59285:14;59302:17;59320:1;59302:20;;;;;;;;;;;;;;59285:37;;59343:16;59352:6;59343:4;:8;;:16;;;;:::i;:::-;59336:23;-1:-1:-1;;59266:3:0;;59216:154;;;;59395:9;59387:4;:17;59379:86;;;;-1:-1:-1;;;59379:86:0;;;;;;;;;59509:17;59492:35;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;59492:35:0;;;59482:46;;;;;;59475:53;;;58750:785;;;;;:::o;69376:351::-;-1:-1:-1;;;69518:4:0;69556:22;;;:8;:22;;-1:-1:-1;;;;;;;;;;;69556:22:0;-1:-1:-1;;;;;69556:22:0;69542:10;:36;69534:45;;;;;;69649:8;-1:-1:-1;;;;;69594:105:0;69639:7;-1:-1:-1;;;;;69594:105:0;69619:9;-1:-1:-1;;;;;69594:105:0;;69659:16;69677:5;69684:14;:12;:14::i;:::-;69594:105;;;;;;;;;;;;;;;;;-1:-1:-1;69716:4:0;69376:351;;;;;;;:::o;63694:613::-;63783:7;-1:-1:-1;;63841:9:0;:26;63837:82;;;-1:-1:-1;53498:6:0;63883:25;;63837:82;63928:22;63953:51;63990:13;63953:32;53414:8;63978:6;63953:32;:24;:32;:::i;:::-;:36;:51;:36;:51;:::i;:::-;63928:76;-1:-1:-1;53498:6:0;64069:110;64095:14;64076:16;:33;64069:110;;;64144:24;:16;64165:2;64144:24;:20;:24;:::i;:::-;64125:43;;64069:110;;;64205:16;-1:-1:-1;64205:16:0;64238:62;64293:6;64238:50;64278:9;64238:50;64205:16;64259:13;64238:35;:20;:35;:::i;:62::-;64231:69;63694:613;-1:-1:-1;;;;;63694:613:0:o;66935:555::-;67131:4;67212:10;67241:41;67212:10;67241:19;:41::i;:::-;67233:50;;;;;;67357:7;-1:-1:-1;;;;;67298:164:0;67346:9;-1:-1:-1;;;;;67298:164:0;67334:9;-1:-1:-1;;;;;67298:164:0;;67374:20;67397:15;67414:12;67428:17;67447:14;:12;:14::i;:::-;67298:164;;;;;;;;;;;;;;;;;;;-1:-1:-1;67479:4:0;;66935:555;-1:-1:-1;;;;;;;66935:555:0:o;59873:162::-;-1:-1:-1;;;;;59983:36:0;;;;;;:18;:36;;;;;;;;;:45;;59976:52;;;;;;;;;;;;;;;;;59938:26;;59976:52;;;59983:45;59976:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59873:162;;;:::o;56322:126::-;-1:-1:-1;;;;;56412:29:0;56389:4;56412:29;;;:9;:29;;;;;;;;;56322:126::o;70423:294::-;70490:4;70514:38;70540:10;70514:15;:38::i;:::-;70506:47;;;;;;70563:11;:16;;70578:1;70563:16;;;;;70607:10;70563:11;70589:29;;;:17;:29;;;;;;;:43;;;;70647:42;;;;;;70674:14;;70647:42;;;;;;;;;;-1:-1:-1;70706:4:0;70423:294;;;:::o;53453:51::-;53498:6;53453:51;:::o;73507:511::-;73662:4;73743:10;73772:41;73743:10;73772:19;:41::i;:::-;73764:50;;;;;;73824:166;73848:9;73860:10;73872:7;73881;73890:29;73929:20;-1:-1:-1;;;;;73929:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;73929:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;73929:32: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;73929:32:0;;;;;;;;;73964:12;73978:8;73988:1;73824:15;:166::i;53179:72::-;;;;:::o;53737:17::-;;;-1:-1:-1;;;;;53737:17:0;;:::o;55088:248::-;53817:8;;55150:9;;-1:-1:-1;;;;;53817:8:0;53803:10;:22;53795:31;;;;;;55179:15;;-1:-1:-1;;;;;55179:15:0;:31;55171:40;;;;;;55280:16;;;55264:1;55280:16;;;;;;;;;55239:58;;55264:1;;;55239:14;:58::i;:::-;55221:15;:76;;-1:-1:-1;;;;;;55221:76:0;-1:-1:-1;;;;;55221:76:0;;;;;;;;55314:15;;55088:248;-1:-1:-1;55088:248:0:o;78952:276::-;79041:4;79057:19;79079:34;79102:10;79079:22;:34::i;:::-;79057:56;;79165:9;-1:-1:-1;;;;;79128:72:0;;79177:22;79128:72;;;;;;;59703:164;-1:-1:-1;;;;;59813:36:0;59764:30;59813:36;;;:18;:36;;;;;;;;:47;;;;;59703:164::o;74376:460::-;74530:4;74554:26;74570:9;74554:15;:26::i;:::-;74546:35;;;;;;74599:65;;-1:-1:-1;;;74599:65:0;;-1:-1:-1;;;;;74599:37:0;;;;;:65;;74652:10;;74599:65;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;74599:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;74599: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;74599:65:0;;;;;;;;;74591:74;;;;;;74740:8;-1:-1:-1;;;;;74680:128:0;74728:10;-1:-1:-1;;;;;74680:128:0;74716:9;-1:-1:-1;;;;;74680:128:0;;74750:24;74776:15;74793:14;:12;:14::i;:::-;74680:128;;;;;;;;;;;;;;;;;-1:-1:-1;74825:4:0;74376:460;;;;;;:::o;56454:142::-;-1:-1:-1;;;;;56552:37:0;56526:7;56552:37;;;:17;:37;;;;;;;56454:142::o;66404:525::-;66596:4;66620:26;66636:9;66620:15;:26::i;:::-;66612:35;;;;;;66665:79;;-1:-1:-1;;;66665:79:0;;-1:-1:-1;;;;;66665:44:0;;;;;:79;;66732:10;;66665:79;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;66665:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;66665:79: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;66665:79:0;;;;;;;;;66657:88;;;;;;66815:7;-1:-1:-1;;;;;66760:141:0;66804:9;-1:-1:-1;;;;;66760:141:0;66792:9;-1:-1:-1;;;;;66760:141:0;;66824:10;66836:15;66853:12;66867:17;66886:14;:12;:14::i;:::-;66760:141;;;;;;;;;;;;;;;;;;;-1:-1:-1;66918:4:0;66404:525;;;;;;;;:::o;79472:240::-;79543:4;79559:19;79581:34;79604:10;79581:22;:34::i;:::-;79559:56;;79658:9;-1:-1:-1;;;;;79630:54:0;;79670:13;79630:54;;;;;;;78706:240;78777:4;78793:19;78815:34;78838:10;78815:22;:34::i;:::-;78793:56;;78892:9;-1:-1:-1;;;;;78864:54:0;;78904:13;78864:54;;;;;;;56638:153;-1:-1:-1;;;;;56747:37:0;56724:4;56747:37;;;:13;:37;;;;;;;;;56638:153::o;53604:67::-;53665:6;53604:67;:::o;68955:415::-;-1:-1:-1;;;69087:4:0;69125:22;;;:8;:22;;-1:-1:-1;;;;;;;;;;;69125:22:0;-1:-1:-1;;;;;69125:22:0;69111:10;:36;;:112;;;69152:26;69168:9;69152:15;:26::i;:::-;:70;;;;-1:-1:-1;69182:40:0;;-1:-1:-1;;;69182:40:0;;-1:-1:-1;;;;;69182:28:0;;;;;:40;;69211:10;;69182:40;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;69182:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;69182:40: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;69182:40:0;;;;;;;;;69103:121;;;;;;69299:8;-1:-1:-1;;;;;69239:103:0;69289:7;-1:-1:-1;;;;;69239:103:0;69269:9;-1:-1:-1;;;;;69239:103:0;;69309:16;69327:14;:12;:14::i;:::-;69239:103;;;;;;;;67869:341;67946:4;67970:26;67986:9;67970:15;:26::i;:::-;67962:35;;;;;;68062:39;;-1:-1:-1;;;68062:39:0;;68033:10;;-1:-1:-1;;;;;68062:30:0;;;;;:39;;68033:10;;68062:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;68062:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;68062:39: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;68062:39:0;;;;;;;;;68054:48;;;;;;68173:7;-1:-1:-1;;;;;68117:65:0;68153:9;-1:-1:-1;;;;;68117:65:0;;;;;;;;;;;-1:-1:-1;68199:4:0;;67869:341;-1:-1:-1;;67869:341:0:o;74842:189::-;-1:-1:-1;;;74906:4:0;74944:16;;;:8;:16;;;;-1:-1:-1;;;;;74944:16:0;74930:10;:30;74922:39;;;;;;74976:27;74989:13;74976:27;;;;;;;;;;;;;;;-1:-1:-1;75020:4:0;74842:189;;;:::o;53094:26::-;;;;:::o;70005:412::-;-1:-1:-1;;;70190:4:0;70228:22;;;:8;:22;;-1:-1:-1;;;;;;;;;;;70228:22:0;-1:-1:-1;;;;;70228:22:0;70214:10;:36;70206:45;;;;;;70309:7;-1:-1:-1;;;;;70266:123:0;70297:9;-1:-1:-1;;;;;70266:123:0;;70318:7;70327:8;70337:10;70349:16;70367:5;70374:14;:12;:14::i;:::-;70266:123;;;;;;;;;;;;;;;;;;;;-1:-1:-1;70406:4:0;70005:412;;;;;;;;;:::o;79964:256::-;-1:-1:-1;;;80078:4:0;80116:20;;;:8;:20;;;;-1:-1:-1;;;;;80116:20:0;80102:10;:34;80094:43;;;;;;80172:9;-1:-1:-1;;;;;80152:61:0;;80183:13;80198:14;80152:61;;;;;;;;72651:333;-1:-1:-1;;;72776:4:0;72814:22;;;:8;:22;;-1:-1:-1;;;;;;;;;;;72814:22:0;-1:-1:-1;;;;;72814:22:0;72800:10;:36;72792:45;;;;;;72927:7;-1:-1:-1;;;;;72852:104:0;72909:8;-1:-1:-1;;;;;72852:104:0;72885:7;-1:-1:-1;;;;;72885:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;72885:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;72885:21: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;72885:21:0;;;;;;;;;-1:-1:-1;;;;;72852:104:0;;72937:8;72947;72852:104;;;;;;;;72198:447;72344:4;72368:26;72384:9;72368:15;:26::i;:::-;72360:35;;;;;;72464:10;-1:-1:-1;;;;;72413:62:0;:9;-1:-1:-1;;;;;72413:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;72413:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;72413:30: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;72413:30:0;;;;;;;;;-1:-1:-1;;;;;72413:62:0;;72405:71;;;;;;72486:131;72510:9;72522:10;72534:7;72543;72552:25;72587:1;72591:12;72605:8;72615:1;72486:15;:131::i;64313:680::-;64620:4;64644:26;64660:9;64644:15;:26::i;:::-;64636:35;;;;;;64689:51;;-1:-1:-1;;;64689:51:0;;-1:-1:-1;;;;;64689:30:0;;;;;:51;;64728:10;;64689:51;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;64689:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;64689:51: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;64689:51:0;;;;;;;;;64681:60;;;;;;64810:7;-1:-1:-1;;;;;64756:209:0;64799:9;-1:-1:-1;;;;;64756:209:0;64787:9;-1:-1:-1;;;;;64756:209:0;;64819:16;64837:13;64852:21;64875:17;64894:12;64908:20;64930:18;64950:14;:12;:14::i;:::-;64756:209;;;;;;;;;;;;;;70723:473;70886:4;70910:26;70926:9;70910:15;:26::i;:::-;70902:35;;;;;;71006:10;-1:-1:-1;;;;;70955:62:0;:9;-1:-1:-1;;;;;70955:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;70955:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;70955:30: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;70955:30:0;;;;;;;;;-1:-1:-1;;;;;70955:62:0;;70947:71;;;;;;71028:140;71057:9;71069:10;71081:5;71088:3;71093:6;71101:25;71136:1;71140:12;71154:10;71166:1;71028:20;:140::i;75037:419::-;75158:4;75182:26;75198:9;75182:15;:26::i;:::-;75174:35;;;;;;75227:39;;-1:-1:-1;;;75227:39:0;;-1:-1:-1;;;;;75227:30:0;;;;;:39;;75258:7;;75227:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;75227:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;75227:39: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;75227:39:0;;;;;;;;;75219:48;;;;;;75307:7;-1:-1:-1;;;;;75307:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;75307:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;75307: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;75307:28:0;;;;;;;;;-1:-1:-1;;;;;75285:51:0;:10;-1:-1:-1;;;;;75285:51:0;;75277:60;;;;;;75407:7;-1:-1:-1;;;;;75352:76:0;75387:9;-1:-1:-1;;;;;75352:76:0;;75417:5;75424:3;75352:76;;;;;;;;58152:116;-1:-1:-1;;;;;58236:25:0;58213:4;58236:25;;;;;;;;;;;;;;58152:116::o;54896:155::-;53817:8;;54953:4;;-1:-1:-1;;;;;53817:8:0;53803:10;:22;53795:31;;;;;;54969:8;:21;;-1:-1:-1;;;;;;54969:21:0;54988:1;54969:21;;;55005:18;;;;54969:8;;55005:18;-1:-1:-1;55040:4:0;54896:155;:::o;76779:456::-;76928:4;76952:26;76968:9;76952:15;:26::i;:::-;76944:35;;;;;;76997:65;;-1:-1:-1;;;76997:65:0;;-1:-1:-1;;;;;76997:37:0;;;;;:65;;77050:10;;76997:65;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;76997:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;76997: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;76997:65:0;;;;;;;;;76989:74;;;;;;77073:134;77097:9;77109:10;77121:7;77130;77139:28;77177:1;77181:12;77195:8;77205:1;77073:15;:134::i;62460:1228::-;62697:4;62713:19;62735:34;62758:10;62735:22;:34::i;:::-;62713:56;;62787:7;:14;62805:1;62787:19;62779:28;;;;;;62838:7;62846:1;62838:10;;;;;;;;;;;;;;62825:7;62833:1;62825:10;;;;;;;;;;;;;;:23;62817:32;;;;;;62859:19;62902:7;62910:1;62902:10;;;;;;;;;;;;;;62889:7;62897:1;62889:10;;;;;;;;;;;;;;:23;62859:54;;62945:9;62931:11;:23;62923:32;;;;;;-1:-1:-1;;;;;62965:25:0;;:7;:25;;;;;;;;;;;:32;;-1:-1:-1;;62965:32:0;62993:4;62965:32;;;63007:18;:36;;;;;:59;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;63076:36:0;;;;;;;:18;:36;;;;;;;;:50;;;:67;;-1:-1:-1;;;;;;63076:67:0;;;;;;;;;;;63153:60;;;;:50;;;:60;;;;:::i;:::-;-1:-1:-1;;;;;;63223:36:0;;;;;;:18;:36;;;;;;;;:47;:75;;-1:-1:-1;;63223:75:0;63273:25;63223:75;;;63372:40;63389:11;63402:9;63372:16;:40::i;:::-;63308:18;:36;63335:7;-1:-1:-1;;;;;63308:36:0;-1:-1:-1;;;;;63308:36:0;;;;;;;;;;;;:61;;:104;;;;63483:14;-1:-1:-1;;;;;63427:233:0;63441:9;-1:-1:-1;;;;;63427:233:0;;63452:8;63462:10;63474:7;63499:19;63520:21;63543:7;63552:25;63579:9;63604:1;63590:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;63590:16:0;;63608:9;-1:-1:-1;;;;;63608:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;63608:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;63608:35: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;63608:35:0;;;;;;;;;63645:14;:12;:14::i;:::-;63427:233;;;;;;;;;;;;;;;;;54792:98;54843:7;54869:14;;;:8;:14;;;;;;-1:-1:-1;;;;;54869:14:0;;54792:98::o;60041:175::-;-1:-1:-1;;;;;60148:36:0;60122:7;60148:36;;;:18;:36;;;;;:61;;;;60041:175::o;53367:55::-;53414:8;53367:55;:::o;77806:444::-;78014:4;78067:7;-1:-1:-1;;;;;78035:84:0;78059:6;-1:-1:-1;;;;;78035:84:0;78048:9;-1:-1:-1;;;;;78035:84:0;;78076:7;78085:10;78097:7;78106:12;78035:84;;;;;;;;;;;;;;;;;;78165:7;-1:-1:-1;;;;;78134:88:0;78154:9;-1:-1:-1;;;;;78134:88:0;;78174:6;78182:10;78194:7;78203:8;78213;78134:88;;;;;;;;;;;77241:559;77467:4;77532:3;-1:-1:-1;;;;;77488:78:0;77525:5;-1:-1:-1;;;;;77488:78:0;77506:9;-1:-1:-1;;;;;77488:78:0;;77517:6;77537:7;77546:10;77558:7;77488:78;;;;;;;;;;;;;;;;;;77612:5;-1:-1:-1;;;;;77581:90:0;77601:9;-1:-1:-1;;;;;77581:90:0;;77619:6;77627:10;77639:7;77648:12;77662:8;77581:90;;;;;;;;;;;;;;;;;;;77717:3;-1:-1:-1;;;;;77686:86:0;77706:9;-1:-1:-1;;;;;77686:86:0;;77722:6;77730:10;77742:7;77751:10;77763:8;77686:86;;;;;;;;;;;80226:233;80309:9;80362:18;80399:26;80362:18;80399:15;:26::i;:::-;80391:35;;;;;34783:88;32195:8;34783:88;:::o;9161:144::-;9219:7;9250:5;;;9273:6;;;;9265:15;;;;;;9297:1;9161:144;-1:-1:-1;;;9161:144:0:o;34666:112::-;32088:7;34666:112;:::o;9484:167::-;9542:7;9570:1;9565;:6;9561:84;;-1:-1:-1;9594:1:0;9587:8;;9561:84;-1:-1:-1;9633:1:0;9626:8;;55668:648;-1:-1:-1;;;55817:9:0;55891:27;;;:8;:27;;;;;55954:104;-1:-1:-1;;;55954:104:0;;-1:-1:-1;;;;;55891:27:0;;;;55817:9;;55891:27;;55954:31;;:104;;55986:15;;56003:29;;56034:23;;55954:104;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55954:104:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55954:104: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;55954:104:0;;;;;;;;;-1:-1:-1;;;;;56068:32:0;;;;;;;56103:4;56068:32;;;;;;;;:39;;-1:-1:-1;;56068:39:0;;;;;;;;56117:13;:36;;;;;;:43;;;;;;;;55929:129;;-1:-1:-1;56175:105:0;;;56240:23;56265:14;:12;:14::i;:::-;56175:105;;;;;;;;;;;;;;;;56297:12;55668:648;-1:-1:-1;;;;;55668:648:0:o;7795:168::-;7909:21;7948:8;;;7795:168::o;8318:421::-;8376:7;8616:6;8612:45;;-1:-1:-1;8645:1:0;8638:8;;8612:45;8679:5;;;8683:1;8679;:5;:1;8702:5;;;;;:10;8694:19;;;;;8745:283;8803:7;8900:9;8916:1;8912;:5;;;;;;;8745:283;-1:-1:-1;;;;8745:283:0:o;78256:444::-;78464:4;78517:7;-1:-1:-1;;;;;78485:84:0;78509:6;-1:-1:-1;;;;;78485:84:0;78498:9;-1:-1:-1;;;;;78485:84:0;;78526:7;78535:10;78547:7;78556:12;78485:84;;;;;;;;;;47207:33254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47207:33254:0;;;-1:-1:-1;47207:33254:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47207:33254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;5:130:-1;72:20;;97:33;72:20;97:33;;1622:707;;1739:3;1732:4;1724:6;1720:17;1716:27;1706:2;;-1:-1;;1747:12;1706:2;1794:6;1781:20;1816:80;1831:64;1888:6;1831:64;;;1816:80;;;1924:21;;;1807:89;-1:-1;1968:4;1981:14;;;;1956:17;;;2070;;;2061:27;;;;2058:36;-1:-1;2055:2;;;2107:1;;2097:12;2055:2;2132:1;2117:206;2142:6;2139:1;2136:13;2117:206;;;4849:20;;2210:50;;2274:14;;;;2302;;;;2164:1;2157:9;2117:206;;;2121:14;;;;;1699:630;;;;;2337:124;2401:20;;2426:30;2401:20;2426:30;;4332:442;;4434:3;4427:4;4419:6;4415:17;4411:27;4401:2;;-1:-1;;4442:12;4401:2;4489:6;4476:20;-1:-1;;;;;68520:6;68517:30;68514:2;;;-1:-1;;68550:12;68514:2;4511:65;68623:9;68604:17;;-1:-1;;68600:33;68691:4;68681:15;4511:65;;;4502:74;;4596:6;4589:5;4582:21;4700:3;68691:4;4691:6;4624;4682:16;;4679:25;4676:2;;;4717:1;;4707:12;4676:2;76673:6;68691:4;4624:6;4620:17;68691:4;4658:5;4654:16;76650:30;76729:1;76711:16;;;68691:4;76711:16;76704:27;4658:5;4394:380;-1:-1;;4394:380;5060:241;;5164:2;5152:9;5143:7;5139:23;5135:32;5132:2;;;-1:-1;;5170:12;5132:2;85:6;72:20;97:33;124:5;97:33;;5308:491;;;;5446:2;5434:9;5425:7;5421:23;5417:32;5414:2;;;-1:-1;;5452:12;5414:2;85:6;72:20;97:33;124:5;97:33;;;5504:63;-1:-1;5604:2;5643:22;;72:20;97:33;72:20;97:33;;;5612:63;-1:-1;5712:2;5751:22;;72:20;97:33;72:20;97:33;;;5720:63;;;;5408:391;;;;;;5806:491;;;;5944:2;5932:9;5923:7;5919:23;5915:32;5912:2;;;-1:-1;;5950:12;5912:2;85:6;72:20;97:33;124:5;97:33;;;6002:63;-1:-1;6102:2;6141:22;;72:20;97:33;72:20;97:33;;;5906:391;;6110:63;;-1:-1;;;6210:2;6249:22;;;;4849:20;;5906:391;6304:649;;;;;6475:3;6463:9;6454:7;6450:23;6446:33;6443:2;;;-1:-1;;6482:12;6443:2;85:6;72:20;97:33;124:5;97:33;;;6534:63;-1:-1;6634:2;6689:22;;3392:20;3417:49;3392:20;3417:49;;;6437:516;;6642:79;;-1:-1;;;;6758:2;6797:22;;4849:20;;6866:2;6905:22;4849:20;;6437:516;6960:491;;;;7098:2;7086:9;7077:7;7073:23;7069:32;7066:2;;;-1:-1;;7104:12;7066:2;85:6;72:20;97:33;124:5;97:33;;;7156:63;7256:2;7295:22;;4849:20;;-1:-1;7364:2;7403:22;;;4849:20;;7060:391;-1:-1;;;7060:391;7458:627;;;;7621:2;7609:9;7600:7;7596:23;7592:32;7589:2;;;-1:-1;;7627:12;7589:2;7685:17;7672:31;-1:-1;;;;;7715:6;7712:30;7709:2;;;-1:-1;;7745:12;7709:2;7775:78;7845:7;7836:6;7825:9;7821:22;7775:78;;;7765:88;7890:2;7929:22;;4849:20;;-1:-1;7998:2;8037:22;;;4849:20;;7583:502;-1:-1;;;;7583:502;8092:257;;8204:2;8192:9;8183:7;8179:23;8175:32;8172:2;;;-1:-1;;8210:12;8172:2;2549:6;2543:13;2561:30;2585:5;2561:30;;8356:241;;8460:2;8448:9;8439:7;8435:23;8431:32;8428:2;;;-1:-1;;8466:12;8428:2;-1:-1;2670:20;;8422:175;-1:-1;8422:175;8604:366;;;8725:2;8713:9;8704:7;8700:23;8696:32;8693:2;;;-1:-1;;8731:12;8693:2;2683:6;2670:20;8783:63;;8883:2;8926:9;8922:22;72:20;97:33;124:5;97:33;;;8891:63;;;;8687:283;;;;;;8977:502;;;9123:2;9111:9;9102:7;9098:23;9094:32;9091:2;;;-1:-1;;9129:12;9091:2;2683:6;2670:20;9181:63;;9309:2;9298:9;9294:18;9281:32;-1:-1;;;;;9325:6;9322:30;9319:2;;;-1:-1;;9355:12;9319:2;9385:78;9455:7;9446:6;9435:9;9431:22;9385:78;;;9375:88;;;9085:394;;;;;;9792:531;;;;9950:2;9938:9;9929:7;9925:23;9921:32;9918:2;;;-1:-1;;9956:12;9918:2;3038:6;3025:20;3050:56;3100:5;3050:56;;;10008:86;-1:-1;10131:2;10170:22;;4849:20;;-1:-1;10239:2;10275:22;;2401:20;2426:30;2401:20;2426:30;;10330:313;;10470:2;10458:9;10449:7;10445:23;10441:32;10438:2;;;-1:-1;;10476:12;10438:2;3227:6;3221:13;3239:58;3291:5;3239:58;;11232:434;;;11387:2;11375:9;11366:7;11362:23;11358:32;11355:2;;;-1:-1;;11393:12;11355:2;3405:6;3392:20;3417:49;3460:5;3417:49;;;11445:79;-1:-1;11561:2;11618:22;;3736:20;3761:51;3736:20;3761:51;;12263:527;;;;12419:2;12407:9;12398:7;12394:23;12390:32;12387:2;;;-1:-1;;12425:12;12797:1645;;;;;;;;;;;13104:3;13092:9;13083:7;13079:23;13075:33;13072:2;;;-1:-1;;13111:12;13072:2;13173:71;13236:7;13212:22;13173:71;;;13163:81;;13299:53;13344:7;13281:2;13324:9;13320:22;13299:53;;;13289:63;;13407:53;13452:7;13389:2;13432:9;13428:22;13407:53;;;13397:63;;13515:53;13560:7;13497:2;13540:9;13536:22;13515:53;;;13505:63;;13605:3;13649:9;13645:22;4849:20;13614:63;;13733:50;13775:7;13714:3;13755:9;13751:22;13733:50;;;13723:60;;13848:3;13837:9;13833:19;13820:33;-1:-1;;;;;13873:18;13865:6;13862:30;13859:2;;;-1:-1;;13895:12;13859:2;13925:78;13995:7;13986:6;13975:9;13971:22;13925:78;;;13915:88;;14068:3;14057:9;14053:19;14040:33;14026:47;;13873:18;14085:6;14082:30;14079:2;;;-1:-1;;14115:12;14079:2;;14145:63;14200:7;14191:6;14180:9;14176:22;14145:63;;;14135:73;;;14245:3;14289:9;14285:22;4849:20;14254:63;;14354:3;14398:9;14394:22;4849:20;14363:63;;13066:1376;;;;;;;;;;;;;;14449:1651;;;;;;;;;;;14759:3;14747:9;14738:7;14734:23;14730:33;14727:2;;;-1:-1;;14766:12;14727:2;14828:71;14891:7;14867:22;14828:71;;;14818:81;;14954:53;14999:7;14936:2;14979:9;14975:22;14954:53;;;14944:63;;15062:53;15107:7;15044:2;15087:9;15083:22;15062:53;;;15052:63;;15170:53;15215:7;15152:2;15195:9;15191:22;15170:53;;;15160:63;;15260:3;15304:9;15300:22;4849:20;15269:63;;15397:3;15386:9;15382:19;15369:33;-1:-1;;;;;15422:18;15414:6;15411:30;15408:2;;;-1:-1;;15444:12;15408:2;15474:63;15529:7;15520:6;15509:9;15505:22;15474:63;;;15464:73;;15602:3;15591:9;15587:19;15574:33;15560:47;;15422:18;15619:6;15616:30;15613:2;;;-1:-1;;15649:12;15613:2;;15679:78;15749:7;15740:6;15729:9;15725:22;15679:78;;;15669:88;;;15794:3;15838:9;15834:22;4849:20;15803:63;;15903:3;15947:9;15943:22;4849:20;15912:63;;16012:3;16056:9;16052:22;4849:20;16021:63;;14721:1379;;;;;;;;;;;;;;16107:1041;;;;;;;16339:3;16327:9;16318:7;16314:23;16310:33;16307:2;;;-1:-1;;16346:12;16307:2;3749:6;3736:20;3761:51;3806:5;3761:51;;;16398:81;-1:-1;16516:2;16555:22;;72:20;97:33;72:20;97:33;;;16524:63;-1:-1;16624:2;16663:22;;72:20;97:33;72:20;97:33;;;16632:63;-1:-1;16760:2;16745:18;;16732:32;-1:-1;;;;;16773:30;;16770:2;;;-1:-1;;16806:12;16770:2;16836:78;16906:7;16897:6;16886:9;16882:22;16836:78;;;16826:88;;;16951:3;16995:9;16991:22;4849:20;16960:63;;17060:3;17104:9;17100:22;4849:20;17069:63;;16301:847;;;;;;;;;17155:1539;;;;;;;;;;;17452:3;17440:9;17431:7;17427:23;17423:33;17420:2;;;-1:-1;;17459:12;17420:2;3749:6;3736:20;3761:51;3806:5;3761:51;;;17511:81;-1:-1;17629:2;17668:22;;72:20;97:33;72:20;97:33;;;17637:63;-1:-1;17737:2;17776:22;;72:20;97:33;72:20;97:33;;;17745:63;-1:-1;17873:2;17858:18;;17845:32;-1:-1;;;;;17886:30;;17883:2;;;-1:-1;;17919:12;17883:2;17949:78;18019:7;18010:6;17999:9;17995:22;17949:78;;;17939:88;;;18064:3;18108:9;18104:22;4849:20;18073:63;;18173:3;18217:9;18213:22;4849:20;18182:63;;18282:3;18323:9;18319:22;2401:20;2426:30;2450:5;2426:30;;;18291:60;;;;18388:3;18432:9;18428:22;4849:20;18397:63;;18497:3;18541:9;18537:22;4849:20;18506:63;;18606:3;18650:9;18646:22;4849:20;18615:63;;17414:1280;;;;;;;;;;;;;;18701:1041;;;;;;;18933:3;18921:9;18912:7;18908:23;18904:33;18901:2;;;-1:-1;;18940:12;18901:2;3749:6;3736:20;3761:51;3806:5;3761:51;;;18992:81;-1:-1;19110:2;19149:22;;72:20;97:33;72:20;97:33;;;19118:63;-1:-1;19218:2;19257:22;;72:20;97:33;72:20;97:33;;;19226:63;-1:-1;19326:2;19365:22;;4849:20;;-1:-1;19434:3;19474:22;;4849:20;;-1:-1;19571:3;19556:19;;19543:33;-1:-1;;;;;19585:30;;19582:2;;;-1:-1;;19618:12;19582:2;19648:78;19718:7;19709:6;19698:9;19694:22;19648:78;;;19638:88;;;18895:847;;;;;;;;;19749:905;;;;;;;19956:3;19944:9;19935:7;19931:23;19927:33;19924:2;;;-1:-1;;19963:12;19924:2;3749:6;3736:20;3761:51;3806:5;3761:51;;;20015:81;-1:-1;20133:2;20172:22;;72:20;97:33;72:20;97:33;;;20141:63;-1:-1;20241:2;20280:22;;72:20;97:33;72:20;97:33;;;19918:736;;;;-1:-1;20249:63;;20349:2;20388:22;;4849:20;;-1:-1;20457:3;20497:22;;4849:20;;20566:3;20606:22;;;4849:20;;-1:-1;19918:736;-1:-1;;19918:736;20661:1031;;;;;;;;20885:3;20873:9;20864:7;20860:23;20856:33;20853:2;;;-1:-1;;20892:12;20853:2;3749:6;3736:20;3761:51;3806:5;3761:51;;;20944:81;-1:-1;21062:2;21101:22;;72:20;97:33;72:20;97:33;;;21070:63;-1:-1;21170:2;21209:22;;72:20;97:33;72:20;97:33;;;20847:845;;;;-1:-1;21178:63;;21278:2;21317:22;;4849:20;;-1:-1;21386:3;21426:22;;4849:20;;21495:3;21535:22;;4849:20;;-1:-1;21604:3;21644:22;;;4849:20;;-1:-1;20847:845;-1:-1;;20847:845;21699:653;;;;;21872:3;21860:9;21851:7;21847:23;21843:33;21840:2;;;-1:-1;;21879:12;22359:779;;;;;;22549:3;22537:9;22528:7;22524:23;22520:33;22517:2;;;-1:-1;;22556:12;22517:2;3749:6;3736:20;3761:51;3806:5;3761:51;;;22608:81;-1:-1;22726:2;22765:22;;72:20;97:33;72:20;97:33;;;22511:627;;22734:63;;-1:-1;;;;22834:2;22873:22;;4849:20;;22942:2;22981:22;;4849:20;;23050:3;23090:22;;;4849:20;;-1:-1;22511:627;23145:538;;;23309:2;23297:9;23288:7;23284:23;23280:32;23277:2;;;-1:-1;;23315:12;23277:2;3749:6;3736:20;3761:51;3806:5;3761:51;;;23367:81;-1:-1;23513:2;23498:18;;23485:32;-1:-1;;;;;23526:30;;23523:2;;;-1:-1;;23559:12;24131:685;;;;;24320:3;24308:9;24299:7;24295:23;24291:33;24288:2;;;-1:-1;;24327:12;24288:2;3749:6;3736:20;3761:51;3806:5;3761:51;;;24379:81;-1:-1;24497:2;24552:22;;3392:20;3417:49;3392:20;3417:49;;;24505:79;-1:-1;24621:2;24660:22;;72:20;97:33;72:20;97:33;;;24629:63;-1:-1;24729:2;24768:22;;72:20;97:33;72:20;97:33;;;24282:534;;;;-1:-1;24282:534;;-1:-1;;24282:534;24823:685;;;;;25012:3;25000:9;24991:7;24987:23;24983:33;24980:2;;;-1:-1;;25019:12;24980:2;3749:6;3736:20;3761:51;3806:5;3761:51;;;25071:81;-1:-1;25189:2;25244:22;;3392:20;3417:49;3392:20;3417:49;;;25197:79;-1:-1;25313:2;25352:22;;72:20;97:33;72:20;97:33;;;24974:534;;;;-1:-1;25321:63;;25421:2;25460:22;4849:20;;-1:-1;;24974:534;25515:811;;;;;;25721:3;25709:9;25700:7;25696:23;25692:33;25689:2;;;-1:-1;;25728:12;25689:2;3749:6;3736:20;3761:51;3806:5;3761:51;;;25780:81;-1:-1;25898:2;25953:22;;3392:20;3417:49;3392:20;3417:49;;;25906:79;-1:-1;26022:2;26061:22;;72:20;97:33;72:20;97:33;;;25683:643;;;;-1:-1;26030:63;;26130:2;26169:22;;4849:20;;-1:-1;26238:3;26278:22;4849:20;;25683:643;-1:-1;;25683:643;26905:263;;27020:2;27008:9;26999:7;26995:23;26991:32;26988:2;;;-1:-1;;27026:12;26988:2;-1:-1;4997:13;;26982:186;-1:-1;26982:186;27175:1007;;;;;;;27390:3;27378:9;27369:7;27365:23;27361:33;27358:2;;;-1:-1;;27397:12;27358:2;4862:6;4849:20;27449:63;;27577:2;27566:9;27562:18;27549:32;-1:-1;;;;;27593:6;27590:30;27587:2;;;-1:-1;;27623:12;27587:2;27653:63;27708:7;27699:6;27688:9;27684:22;27653:63;;;27643:73;;;27753:2;27812:9;27808:22;3392:20;3417:49;3460:5;3417:49;;;27761:79;-1:-1;27877:2;27916:22;;72:20;97:33;72:20;97:33;;;27885:63;-1:-1;27985:3;28025:22;;72:20;97:33;72:20;97:33;;;27994:63;;;;28094:3;28138:9;28134:22;4849:20;28103:63;;27352:830;;;;;;;;;28189:1269;;;;;;;;28446:3;28434:9;28425:7;28421:23;28417:33;28414:2;;;-1:-1;;28453:12;28414:2;4862:6;4849:20;28505:63;;28633:2;;28622:9;28618:18;28605:32;-1:-1;;;;;28657:18;28649:6;28646:30;28643:2;;;-1:-1;;28679:12;28643:2;28709:63;28764:7;28755:6;28744:9;28740:22;28709:63;;;28699:73;;28809:2;28868:9;28864:22;3392:20;3383:29;;3417:49;3460:5;3417:49;;;28817:79;;-1:-1;28933:2;28972:22;;72:20;;97:33;72:20;97:33;;;28941:63;;-1:-1;29041:3;29081:22;;72:20;;97:33;72:20;97:33;;;29050:63;;-1:-1;29150:3;29190:22;;4849:20;;-1:-1;29287:3;29272:19;;29259:33;;29301:30;;;29298:2;;;-1:-1;;29334:12;29298:2;;29425:6;29414:9;29410:22;277:3;270:4;262:6;258:17;254:27;244:2;;-1:-1;;285:12;244:2;332:6;319:20;305:34;;354:80;369:64;426:6;369:64;;354:80;462:21;;;519:14;;;;494:17;;;608;;;599:27;;;;596:36;-1:-1;593:2;;;-1:-1;;635:12;593:2;-1:-1;661:10;;655:206;680:6;677:1;674:13;655:206;;;2670:20;;748:50;;702:1;695:9;;;;;812:14;;;;840;;655:206;;;659:14;29354:88;;;;;;;;28408:1050;;;;;;;;;;;29465:1393;;;;;;;;;29738:3;29726:9;29717:7;29713:23;29709:33;29706:2;;;-1:-1;;29745:12;29706:2;4862:6;4849:20;29797:63;;29925:2;;29914:9;29910:18;29897:32;-1:-1;;;;;29949:18;29941:6;29938:30;29935:2;;;-1:-1;;29971:12;29935:2;30001:63;30056:7;30047:6;30036:9;30032:22;30001:63;;;29991:73;;30101:2;30160:9;30156:22;3392:20;3383:29;;3417:49;3460:5;3417:49;;;30109:79;;-1:-1;30225:2;30264:22;;72:20;;97:33;72:20;97:33;;;30233:63;;-1:-1;30333:3;30373:22;;72:20;;97:33;72:20;97:33;;;30342:63;;-1:-1;30442:3;30482:22;;4849:20;;-1:-1;30579:3;30564:19;;30551:33;;30593:30;;;30590:2;;;-1:-1;;30626:12;30590:2;;30716:6;30705:9;30701:22;1008:3;1001:4;993:6;989:17;985:27;975:2;;-1:-1;;1016:12;975:2;1063:6;1050:20;1036:34;;1085:79;1100:63;1156:6;1100:63;;1085:79;1170:16;1206:6;1199:5;1192:21;29925:2;1253:3;1249:14;1242:21;;29925:2;1228:6;1224:17;1358:3;29925:2;;1342:6;1338:17;1228:6;1329:27;;1326:36;1323:2;;;-1:-1;;1365:12;1323:2;-1:-1;1391:10;;1385:205;1410:6;1407:1;1404:13;1385:205;;;4262:20;;1478:49;;1432:1;1425:9;;;;;1541:14;;;;1569;;1385:205;;;1389:14;30646:87;;;;;;;;30770:3;30814:9;30810:22;4849:20;30779:63;;29700:1158;;;;;;;;;;;;30865:366;;;30986:2;30974:9;30965:7;30961:23;30957:32;30954:2;;;-1:-1;;30992:12;30954:2;-1:-1;;4849:20;;;31144:2;31183:22;;;4849:20;;-1:-1;30948:283;32388:690;;32581:5;69592:12;71143:6;71138:3;71131:19;71180:4;71175:3;71171:14;32593:93;;71180:4;32757:5;68824:14;-1:-1;32796:260;32821:6;32818:1;32815:13;32796:260;;;32882:13;;37568:37;;71180:4;31392:14;;;;70542;;;;32843:1;32836:9;32796:260;;;-1:-1;33062:10;;32512:566;-1:-1;;;;32512:566;39490:347;;39635:5;69592:12;71143:6;71138:3;71131:19;-1:-1;76818:101;76832:6;76829:1;76826:13;76818:101;;;71180:4;76899:11;;;;;76893:18;76880:11;;;;;76873:39;76847:10;76818:101;;;76934:6;76931:1;76928:13;76925:2;;;-1:-1;71180:4;76990:6;71175:3;76981:16;;76974:27;76925:2;-1:-1;68623:9;77090:14;-1:-1;;77086:28;39793:39;;;;71180:4;39793:39;;39582:255;-1:-1;;39582:255;43321:326;69592:12;;43321:326;;43497:125;;68833:4;68824:14;;43321:326;37098:268;37123:6;37120:1;37117:13;37098:268;;;37184:13;;37568:37;;68833:4;31752:14;;;;70542;;;;37145:1;37138:9;37098:268;;;-1:-1;43632:10;;43478:169;-1:-1;;;;;43478:169;43654:213;-1:-1;;;;;73857:54;;;;32188:37;;43772:2;43757:18;;43743:124;44110:451;-1:-1;;;;;73857:54;;;32057:58;;73857:54;;;44464:2;44449:18;;32188:37;73857:54;;;44547:2;44532:18;;32188:37;44292:2;44277:18;;44263:298;44568:823;;68528:18;;73868:42;;;72518:5;73857:54;32064:3;32057:58;37598:5;45029:2;45018:9;45014:18;37568:37;37598:5;45112:2;45101:9;45097:18;37568:37;44856:3;45149:2;45138:9;45134:18;45127:48;45189:108;44856:3;44845:9;44841:19;45283:6;45189:108;;;45181:116;;37598:5;45376:3;45365:9;45361:19;37568:37;44827:564;;;;;;;;;45398:324;-1:-1;;;;;73857:54;;;32188:37;;73857:54;;45708:2;45693:18;;32188:37;45544:2;45529:18;;45515:207;45729:435;-1:-1;;;;;73857:54;;;32188:37;;73857:54;;;;46067:2;46052:18;;32188:37;46150:2;46135:18;;37568:37;;;;45903:2;45888:18;;45874:290;46171:695;-1:-1;;;;;73857:54;;32188:37;;46423:3;46542:2;46527:18;;46520:48;;;46171:695;;46582:108;;46408:19;;46676:6;46582:108;;;46769:2;46754:18;;37568:37;;;;-1:-1;46852:2;46837:18;37568:37;46574:116;46394:472;-1:-1;;46394:472;46873:1243;-1:-1;;;;;73857:54;;32188:37;;47259:3;47378:2;47363:18;;47356:48;;;46873:1243;;47418:108;47244:19;;;47512:6;47418:108;;;47605:2;47590:18;;37568:37;;;;-1:-1;;47688:2;47673:18;;37568:37;;;;72602:13;;72595:21;47765:3;47750:19;;37461:34;47849:3;47834:19;;37568:37;;;;47933:3;47918:19;;37568:37;48017:3;48002:19;;37568:37;48101:3;48086:19;;;37568:37;47410:116;47230:886;-1:-1;;47230:886;48123:324;-1:-1;;;;;73857:54;;;;32188:37;;48433:2;48418:18;;37568:37;48269:2;48254:18;;48240:207;48454:683;-1:-1;;;;;73857:54;;;32188:37;;48696:3;48681:19;;;73516:48;73558:5;73516:48;;;76172:38;48873:2;48862:9;48858:18;39154:62;73868:42;72518:5;73857:54;48956:2;48945:9;48941:18;32188:37;;37598:5;49039:2;49028:9;49024:18;37568:37;37598:5;49122:3;49111:9;49107:19;37568:37;48667:470;;;;;;;;;49144:1219;-1:-1;;;;;73857:54;;32188:37;;49687:2;49672:18;;37568:37;;;72602:13;;72595:21;49764:2;49749:18;;37461:34;49522:3;49801:2;49786:18;;49779:48;;;49144:1219;;49841:108;49507:19;;;49935:6;49841:108;;;49998:9;49992:4;49988:20;49982:3;49971:9;49967:19;49960:49;50023:78;50096:4;50087:6;50023:78;;;50180:3;50165:19;;37568:37;;;;-1:-1;;;50264:3;50249:19;;37568:37;;;;50348:3;50333:19;;;37568:37;50015:86;49493:870;-1:-1;;;;;49493:870;50370:571;-1:-1;;;;;73857:54;;;32188:37;;50749:2;50734:18;;37568:37;;;50584:3;50569:19;;;73516:48;73558:5;73516:48;;;76172:38;50844:2;50833:9;50829:18;39154:62;73868:42;72518:5;73857:54;50927:2;50916:9;50912:18;32188:37;;50555:386;;;;;;;;50948:1231;-1:-1;;;;;73857:54;;32188:37;;51497:2;51482:18;;37568:37;;;51332:3;51534:2;51519:18;;51512:48;;;50948:1231;;51574:78;51317:19;;;51638:6;51574:78;;;51700:9;51694:4;51690:20;51685:2;51674:9;51670:18;51663:48;51725:108;51828:4;51819:6;51725:108;;;51717:116;;;;37598:5;51912:3;51901:9;51897:19;37568:37;37598:5;51996:3;51985:9;51981:19;37568:37;37598:5;52080:3;52069:9;52065:19;37568:37;37598:5;52164:3;52153:9;52149:19;37568:37;51303:876;;;;;;;;;;;;53000:647;-1:-1;;;;;73857:54;;;;32188:37;;53389:2;53374:18;;37568:37;;;;53472:2;53457:18;;37568:37;;;;53555:2;53540:18;;37568:37;72602:13;72595:21;53632:3;53617:19;;37461:34;53224:3;53209:19;;53195:452;53654:771;-1:-1;;;;;73857:54;;;;32188:37;;54077:2;54062:18;;37568:37;;;;54160:2;54145:18;;37568:37;;;;54243:2;54228:18;;37568:37;54326:3;54311:19;;37568:37;73868:42;54395:19;;37568:37;53912:3;53897:19;;53883:542;54432:361;;54600:2;54621:17;54614:47;54675:108;54600:2;54589:9;54585:18;54769:6;54675:108;;54800:472;;54996:2;55017:17;55010:47;55071:108;54996:2;54985:9;54981:18;55165:6;55071:108;;;55063:116;;37598:5;55258:2;55247:9;55243:18;37568:37;54967:305;;;;;;55279:201;72602:13;;72595:21;37461:34;;55391:2;55376:18;;55362:118;55487:213;37568:37;;;55605:2;55590:18;;55576:124;57255:619;;68528:18;;73868:42;;;72518:5;73857:54;37829:3;37822:64;37598:5;57679:2;57668:9;57664:18;37568:37;57497:2;57716;57705:9;57701:18;57694:48;57756:108;57497:2;57486:9;57482:18;57850:6;57756:108;;57881:239;58012:2;57997:18;;73516:48;73558:5;73516:48;;;38837:63;;;57983:137;;58127:407;58318:2;58332:47;;;40395:2;58303:18;;;71131:19;40431:34;71171:14;;;40411:55;40500:31;40486:12;;;40479:53;40551:12;;;58289:245;58541:407;58732:2;58746:47;;;40802:2;58717:18;;;71131:19;40838:34;71171:14;;;40818:55;40907:29;40893:12;;;40886:51;40956:12;;;58703:245;58955:407;59146:2;59160:47;;;41207:2;59131:18;;;71131:19;41243:34;71171:14;;;41223:55;41312:26;41298:12;;;41291:48;41358:12;;;59117:245;59369:401;;59557:2;59578:17;59571:47;41743:16;41737:23;41666:4;59557:2;59546:9;59542:18;41773:38;41826:69;41657:14;59546:9;41657:14;41876:12;41826:69;;;68528:18;;73868:42;;;59557:2;41982:5;41978:16;41972:23;73857:54;42049:14;59546:9;42049:14;32188:37;42049:14;42140:5;42136:16;42130:23;42110:43;;68623:9;;42189:14;59546:9;42193:4;42189:14;;42173;59546:9;42173:14;42166:38;42219:99;42313:4;42299:12;42219:99;;;42173:14;42405:5;42401:16;42395:23;42375:43;;42189:14;59546:9;42458:4;42454:14;;42438;59546:9;42438:14;42431:38;42484:97;42576:4;42562:12;42484:97;;;42476:105;;;;42438:14;42665:5;42661:16;42655:23;42635:43;;73516:48;73558:5;73516:48;;;42745:14;;;;38837:63;;;;42848:16;;42842:23;41666:4;42919:14;;;37568:37;;;;-1:-1;59624:136;59528:242;59997:472;;37598:5;37575:3;37568:37;60193:2;60311;60300:9;60296:18;60289:48;60351:108;60193:2;60182:9;60178:18;60445:6;60351:108;;60476:571;37568:37;;;60690:3;60675:19;;73516:48;73558:5;73516:48;;;60867:2;60852:18;;39154:62;;;;-1:-1;;;;;73857:54;;;;60950:2;60935:18;;32188:37;61033:2;61018:18;;;37568:37;60661:386;;-1:-1;60661:386;61054:1793;;61611:3;37598:5;37575:3;37568:37;61611:3;61730:2;61719:9;61715:18;61708:48;61770:78;61611:3;61600:9;61596:19;61834:6;61770:78;;;-1:-1;;;;;73857:54;;;61943:2;61928:18;;37822:64;73857:54;;;62026:2;62011:18;;32188:37;62109:3;62094:19;;37568:37;;;62153:20;;;73868:42;62132:19;;62125:49;73868:42;-1:-1;62188:106;62157:4;62280:6;62188:106;;;62180:114;;;73516:48;73558:5;73516:48;;;76030:39;62386:3;62375:9;62371:19;38837:63;37598:5;62481:3;62470:9;62466:19;37568:37;62535:9;62529:4;62525:20;62519:3;62508:9;62504:19;62497:49;62560:108;62663:4;62654:6;62560:108;;;62747:3;62732:19;;37568:37;;;;-1:-1;;62832:3;62817:19;37568:37;62552:116;61582:1265;-1:-1;;;;;;;;;61582:1265;66416:324;37568:37;;;66726:2;66711:18;;37568:37;66562:2;66547:18;;66533:207;66747:435;37568:37;;;67085:2;67070:18;;37568:37;;;;67168:2;67153:18;;37568:37;66921:2;66906:18;;66892:290;67189:256;67251:2;67245:9;67277:17;;;-1:-1;;;;;67337:34;;67373:22;;;67334:62;67331:2;;;67409:1;;67399:12;67331:2;67251;67418:22;67229:216;;-1:-1;67229:216;67452:304;;-1:-1;;;;;67603:6;67600:30;67597:2;;;-1:-1;;67633:12;67597:2;-1:-1;67678:4;67666:17;;;67731:15;;67534:222;77127:106;77211:1;77204:5;77201:12;77191:2;;77217:9;77191:2;77185:48;;77352:117;-1:-1;;;;;73857:54;;77411:35;;77401:2;;77460:1;;77450:12;77476:111;77557:5;72602:13;72595:21;77535:5;77532:32;77522:2;;77578:1;;77568:12;77516:71;32262:10:0;34876:107;:::o
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.