More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 598 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Fees | 15276130 | 797 days ago | IN | 0 ETH | 0.00030607 | ||||
Batch Relay | 11058587 | 1455 days ago | IN | 0 ETH | 0.00431453 | ||||
Create Escrow | 11058545 | 1455 days ago | IN | 0.2778064 ETH | 0.00462694 | ||||
Batch Relay | 11057308 | 1455 days ago | IN | 0 ETH | 0.00184908 | ||||
Create Escrow | 11057264 | 1455 days ago | IN | 0.22795389 ETH | 0.00232555 | ||||
Batch Relay | 11055492 | 1456 days ago | IN | 0 ETH | 0.00330516 | ||||
Create Escrow | 11055442 | 1456 days ago | IN | 0.0101 ETH | 0.00439877 | ||||
Create Escrow | 11053310 | 1456 days ago | IN | 0.3462734 ETH | 0.00452382 | ||||
Batch Relay | 11051489 | 1456 days ago | IN | 0 ETH | 0.00336355 | ||||
Create Escrow | 11051475 | 1456 days ago | IN | 0.34385712 ETH | 0.00358412 | ||||
Batch Relay | 11050932 | 1456 days ago | IN | 0 ETH | 0.00269084 | ||||
Create Escrow | 11050907 | 1456 days ago | IN | 0.25719078 ETH | 0.00308108 | ||||
Batch Relay | 11050356 | 1456 days ago | IN | 0 ETH | 0.00184952 | ||||
Create Escrow | 11050340 | 1456 days ago | IN | 0.38117955 ETH | 0.00208086 | ||||
Resolve Dispute | 11046277 | 1457 days ago | IN | 0 ETH | 0.00246661 | ||||
Batch Relay | 11046073 | 1457 days ago | IN | 0 ETH | 0.00296974 | ||||
Batch Relay | 11045108 | 1457 days ago | IN | 0 ETH | 0.00280032 | ||||
Create Escrow | 11044137 | 1457 days ago | IN | 1.27 ETH | 0.00301693 | ||||
Create Escrow | 11042366 | 1458 days ago | IN | 0.8 ETH | 0.00377117 | ||||
Batch Relay | 11039888 | 1458 days ago | IN | 0 ETH | 0.00302648 | ||||
Create Escrow | 11039879 | 1458 days ago | IN | 0.2546183 ETH | 0.00339476 | ||||
Batch Relay | 11039825 | 1458 days ago | IN | 0 ETH | 0.0029647 | ||||
Create Escrow | 11039653 | 1458 days ago | IN | 0.27384891 ETH | 0.00370832 | ||||
Batch Relay | 11039367 | 1458 days ago | IN | 0 ETH | 0.00274625 | ||||
Create Escrow | 11039352 | 1458 days ago | IN | 0.09845075 ETH | 0.00297932 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15276130 | 797 days ago | 2.5849562 ETH | ||||
11058587 | 1455 days ago | 0.26866838 ETH | ||||
11057308 | 1455 days ago | 0.22294866 ETH | ||||
11055492 | 1456 days ago | 0.00512578 ETH | ||||
11051489 | 1456 days ago | 0.33546274 ETH | ||||
11050932 | 1456 days ago | 0.25065422 ETH | ||||
11050356 | 1456 days ago | 0.37464206 ETH | ||||
11046277 | 1457 days ago | 0.05343829 ETH | ||||
11046073 | 1457 days ago | 0.78762236 ETH | ||||
11045108 | 1457 days ago | 1.25317016 ETH | ||||
11039888 | 1458 days ago | 0.24761189 ETH | ||||
11039825 | 1458 days ago | 0.26949809 ETH | ||||
11039367 | 1458 days ago | 0.093419 ETH | ||||
11033382 | 1459 days ago | 0.2725258 ETH | ||||
11032565 | 1459 days ago | 0.09489941 ETH | ||||
11029125 | 1460 days ago | 0.08791982 ETH | ||||
11026998 | 1460 days ago | 0.08850694 ETH | ||||
11026312 | 1460 days ago | 0.22928039 ETH | ||||
11025021 | 1460 days ago | 0.96764326 ETH | ||||
11019630 | 1461 days ago | 0.15362444 ETH | ||||
11018467 | 1461 days ago | 0.17179249 ETH | ||||
11012266 | 1462 days ago | 0.14413065 ETH | ||||
10989126 | 1466 days ago | 0.9847138 ETH | ||||
10983130 | 1467 days ago | 0.49736717 ETH | ||||
10980263 | 1467 days ago | 3.95013363 ETH |
Loading...
Loading
Contract Name:
LocalCoinSwapEthereumEscrow
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-05-15 */ pragma solidity ^0.5.0; /// @title localcoinswap.com /// @author localcoinswap.com contract LocalCoinSwapEthereumEscrow { /*********************** + Global settings + ***********************/ // Address of the arbitrator (currently always localcoinswap staff) address public arbitrator; // Address of the owner (who can withdraw collected fees) address public owner; // Address of the relayer (who is allowed to forward signed instructions from parties) address public relayer; uint32 public requestCancellationMinimumTime = 2 hours; // Cumulative balance of collected fees uint256 public feesAvailableForWithdraw; /*********************** + Instruction types + ***********************/ // Called when the buyer marks payment as sent. Locks funds in escrow uint8 constant INSTRUCTION_SELLER_CANNOT_CANCEL = 0x01; // Buyer cancelling uint8 constant INSTRUCTION_BUYER_CANCEL = 0x02; // Seller cancelling uint8 constant INSTRUCTION_SELLER_CANCEL = 0x03; // Seller requesting to cancel. Begins a window for buyer to object uint8 constant INSTRUCTION_SELLER_REQUEST_CANCEL = 0x04; // Seller releasing funds to the buyer uint8 constant INSTRUCTION_RELEASE = 0x05; // Either party permitting the arbitrator to resolve a dispute uint8 constant INSTRUCTION_RESOLVE = 0x06; /*********************** + Events + ***********************/ event Created(bytes32 indexed _tradeHash); event SellerCancelDisabled(bytes32 indexed _tradeHash); event SellerRequestedCancel(bytes32 indexed _tradeHash); event CancelledBySeller(bytes32 indexed _tradeHash); event CancelledByBuyer(bytes32 indexed _tradeHash); event Released(bytes32 indexed _tradeHash); event DisputeResolved(bytes32 indexed _tradeHash); struct Escrow { // So we know the escrow exists bool exists; // This is the timestamp in whic hthe seller can cancel the escrow after. // It has two special values: // 0 : Permanently locked by the buyer (i.e. marked as paid; the seller can never cancel) // 1 : The seller can only request to cancel, which will change this value to a timestamp. // This option is avaialble for complex trade terms such as cash-in-person where a // payment window is inappropriate uint32 sellerCanCancelAfter; // Cumulative cost of gas incurred by the relayer. This amount will be refunded to the owner // in the way of fees once the escrow has completed uint128 totalGasFeesSpentByRelayer; } // Mapping of active trades. The key here is a hash of the trade proprties mapping (bytes32 => Escrow) public escrows; modifier onlyOwner() { require(msg.sender == owner, "Must be owner"); _; } modifier onlyArbitrator() { require(msg.sender == arbitrator, "Must be arbitrator"); _; } constructor(address initialAddress) public { owner = initialAddress; arbitrator = initialAddress; relayer = initialAddress; } /// @notice Create and fund a new escrow. /// @param _tradeID The unique ID of the trade, generated by localcoinswap.com /// @param _seller The selling party /// @param _buyer The buying party /// @param _value The amount of the escrow, exclusive of the fee /// @param _fee localcoinswap's commission in 1/10000ths /// @param _paymentWindowInSeconds The time in seconds from escrow creation that the seller can cancel after /// @param _expiry This transaction must be created before this time /// @param _v Signature "v" component /// @param _r Signature "r" component /// @param _s Signature "s" component function createEscrow( bytes16 _tradeID, address _seller, address _buyer, uint256 _value, uint16 _fee, uint32 _paymentWindowInSeconds, uint32 _expiry, uint8 _v, bytes32 _r, bytes32 _s ) external payable { // The trade hash is created by tightly-concatenating and hashing properties of the trade. // This hash becomes the identifier of the escrow, and hence all these variables must be // supplied on future contract calls bytes32 _tradeHash = keccak256(abi.encodePacked(_tradeID, _seller, _buyer, _value, _fee)); // Require that trade does not already exist require(!escrows[_tradeHash].exists, "Trade already exists"); // A signature (v, r and s) must come from localcoinswap to open an escrow bytes32 _invitationHash = keccak256(abi.encodePacked( _tradeHash, _paymentWindowInSeconds, _expiry )); require(recoverAddress(_invitationHash, _v, _r, _s) == relayer, "Must be relayer"); // These signatures come with an expiry stamp require(block.timestamp < _expiry, "Signature has expired"); // solium-disable-line // Check transaction value against signed _value and make sure is not 0 require(msg.value == _value && msg.value > 0, "Incorrect ether sent"); uint32 _sellerCanCancelAfter = _paymentWindowInSeconds == 0 ? 1 : uint32(block.timestamp) + _paymentWindowInSeconds; // solium-disable-line // Add the escrow to the public mapping escrows[_tradeHash] = Escrow(true, _sellerCanCancelAfter, 0); emit Created(_tradeHash); } uint16 constant GAS_doResolveDispute = 36100; /// @notice Called by the arbitrator to resolve a dispute. Requires a signature from either party. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @param _v Signature "v" component /// @param _r Signature "r" component /// @param _s Signature "s" component /// @param _buyerPercent What % should be distributed to the buyer (this is usually 0 or 100) function resolveDispute( bytes16 _tradeID, address payable _seller, address payable _buyer, uint256 _value, uint16 _fee, uint8 _v, bytes32 _r, bytes32 _s, uint8 _buyerPercent ) external onlyArbitrator { address _signature = recoverAddress(keccak256(abi.encodePacked( _tradeID, INSTRUCTION_RESOLVE )), _v, _r, _s); require(_signature == _buyer || _signature == _seller, "Must be buyer or seller"); Escrow memory _escrow; bytes32 _tradeHash; (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee); require(_escrow.exists, "Escrow does not exist"); require(_buyerPercent <= 100, "_buyerPercent must be 100 or lower"); uint256 _totalFees = _escrow.totalGasFeesSpentByRelayer + (GAS_doResolveDispute * uint128(tx.gasprice)); require(_value - _totalFees <= _value, "Overflow error"); // Prevent underflow feesAvailableForWithdraw += _totalFees; // Add the the pot for localcoinswap to withdraw delete escrows[_tradeHash]; emit DisputeResolved(_tradeHash); if (_buyerPercent > 0) { // Take fees if buyer wins dispute uint256 _escrowFees = (_value * _fee / 10000); // Prevent underflow uint256 _buyerAmount = _value * _buyerPercent / 100 - _totalFees - _escrowFees; require(_buyerAmount <= _value, "Overflow error"); feesAvailableForWithdraw += _escrowFees; _buyer.transfer(_buyerAmount); } if (_buyerPercent < 100) { _seller.transfer((_value - _totalFees) * (100 - _buyerPercent) / 100); } } /// @notice Release ether in escrow to the buyer. Direct call option. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @return bool function release( bytes16 _tradeID, address payable _seller, address payable _buyer, uint256 _value, uint16 _fee ) external returns (bool){ require(msg.sender == _seller, "Must be seller"); return doRelease(_tradeID, _seller, _buyer, _value, _fee, 0); } /// @notice Disable the seller from cancelling (i.e. "mark as paid"). Direct call option. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @return bool function disableSellerCancel( bytes16 _tradeID, address _seller, address _buyer, uint256 _value, uint16 _fee ) external returns (bool) { require(msg.sender == _buyer, "Must be buyer"); return doDisableSellerCancel(_tradeID, _seller, _buyer, _value, _fee, 0); } /// @notice Cancel the escrow as a buyer. Direct call option. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @return bool function buyerCancel( bytes16 _tradeID, address payable _seller, address payable _buyer, uint256 _value, uint16 _fee ) external returns (bool) { require(msg.sender == _buyer, "Must be buyer"); return doBuyerCancel(_tradeID, _seller, _buyer, _value, _fee, 0); } /// @notice Request to cancel as a seller. Direct call option. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @return bool function sellerRequestCancel( bytes16 _tradeID, address _seller, address _buyer, uint256 _value, uint16 _fee ) external returns (bool) { require(msg.sender == _seller, "Must be seller"); return doSellerRequestCancel(_tradeID, _seller, _buyer, _value, _fee, 0); } /// @notice Relay multiple signed instructions from parties of escrows. /// @param _tradeID List of _tradeID values /// @param _seller List of _seller values /// @param _buyer List of _buyer values /// @param _value List of _value values /// @param _fee List of _fee values /// @param _maximumGasPrice List of _maximumGasPrice values /// @param _v List of signature "v" components /// @param _r List of signature "r" components /// @param _s List of signature "s" components /// @param _instructionByte List of _instructionByte values /// @return bool List of results uint16 constant GAS_batchRelayBaseCost = 28500; function batchRelay( bytes16[] memory _tradeID, address payable[] memory _seller, address payable[] memory _buyer, uint256[] memory _value, uint16[] memory _fee, uint128[] memory _maximumGasPrice, uint8[] memory _v, bytes32[] memory _r, bytes32[] memory _s, uint8[] memory _instructionByte ) public returns (bool[] memory) { bool[] memory _results = new bool[](_tradeID.length); uint128 _additionalGas = uint128(msg.sender == relayer ? GAS_batchRelayBaseCost / _tradeID.length : 0); for (uint8 i = 0; i < _tradeID.length; i++) { _results[i] = relay( _tradeID[i], _seller[i], _buyer[i], _value[i], _fee[i], _maximumGasPrice[i], _v[i], _r[i], _s[i], _instructionByte[i], _additionalGas ); } return _results; } /// @notice Withdraw fees collected by the contract. Only the owner can call this. /// @param _to Address to withdraw fees in to /// @param _amount Amount to withdraw function withdrawFees(address payable _to, uint256 _amount) external onlyOwner { // This check also prevents underflow require(_amount <= feesAvailableForWithdraw, "Amount is higher than amount available"); feesAvailableForWithdraw -= _amount; _to.transfer(_amount); } /// @notice Set the arbitrator to a new address. Only the owner can call this. /// @param _newArbitrator Address of the replacement arbitrator function setArbitrator(address _newArbitrator) external onlyOwner { arbitrator = _newArbitrator; } /// @notice Change the owner to a new address. Only the owner can call this. /// @param _newOwner Address of the replacement owner function setOwner(address _newOwner) external onlyOwner { owner = _newOwner; } /// @notice Change the relayer to a new address. Only the owner can call this. /// @param _newRelayer Address of the replacement relayer function setRelayer(address _newRelayer) external onlyOwner { relayer = _newRelayer; } /// @notice Change the requestCancellationMinimumTime. Only the owner can call this. /// @param _newRequestCancellationMinimumTime Replacement function setRequestCancellationMinimumTime( uint32 _newRequestCancellationMinimumTime ) external onlyOwner { requestCancellationMinimumTime = _newRequestCancellationMinimumTime; } /// @notice Send ERC20 tokens away. This function allows the owner to withdraw stuck ERC20 tokens. /// @param _tokenContract Token contract /// @param _transferTo Recipient /// @param _value Value function transferToken( _Token _tokenContract, address _transferTo, uint256 _value ) external onlyOwner { _tokenContract.transfer(_transferTo, _value); } /// @notice Send ERC20 tokens away. This function allows the owner to withdraw stuck ERC20 tokens. /// @param _tokenContract Token contract /// @param _transferTo Recipient /// @param _transferFrom Sender /// @param _value Value function transferTokenFrom( _Token _tokenContract, address _transferTo, address _transferFrom, uint256 _value ) external onlyOwner { _tokenContract.transferFrom(_transferTo, _transferFrom, _value); } /// @notice Send ERC20 tokens away. This function allows the owner to withdraw stuck ERC20 tokens. /// @param _tokenContract Token contract /// @param _spender Spender address /// @param _value Value function approveToken( _Token _tokenContract, address _spender, uint256 _value ) external onlyOwner { _tokenContract.approve(_spender, _value); } /// @notice Relay a signed instruction from a party of an escrow. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @param _maximumGasPrice Maximum gas price permitted for the relayer (set by the instructor) /// @param _v Signature "v" component /// @param _r Signature "r" component /// @param _s Signature "s" component /// @param _additionalGas Additional gas to be deducted after this operation /// @return bool function relay( bytes16 _tradeID, address payable _seller, address payable _buyer, uint256 _value, uint16 _fee, uint128 _maximumGasPrice, uint8 _v, bytes32 _r, bytes32 _s, uint8 _instructionByte, uint128 _additionalGas ) private returns (bool) { address _relayedSender = getRelayedSender( _tradeID, _instructionByte, _maximumGasPrice, _v, _r, _s ); if (_relayedSender == _buyer) { // Buyer's instructions: if (_instructionByte == INSTRUCTION_SELLER_CANNOT_CANCEL) { // Disable seller from cancelling return doDisableSellerCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas); } else if (_instructionByte == INSTRUCTION_BUYER_CANCEL) { // Cancel return doBuyerCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas); } } else if (_relayedSender == _seller) { // Seller's instructions: if (_instructionByte == INSTRUCTION_RELEASE) { // Release return doRelease(_tradeID, _seller, _buyer, _value, _fee, _additionalGas); } else if (_instructionByte == INSTRUCTION_SELLER_CANCEL) { // Cancel return doSellerCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas); } else if (_instructionByte == INSTRUCTION_SELLER_REQUEST_CANCEL){ // Request to cancel return doSellerRequestCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas); } } else { require(msg.sender == _seller, "Unrecognised party"); return false; } } /// @notice Increase the amount of gas to be charged later on completion of an escrow /// @param _tradeHash Trade hash /// @param _gas Gas cost function increaseGasSpent(bytes32 _tradeHash, uint128 _gas) private { escrows[_tradeHash].totalGasFeesSpentByRelayer += _gas * uint128(tx.gasprice); } /// @notice Transfer the value of an escrow, minus the fees, minus the gas costs incurred by relay /// @param _to Recipient address /// @param _value Value of the transfer /// @param _totalGasFeesSpentByRelayer Total gas fees spent by the relayer /// @param _fee Commission in 1/10000ths function transferMinusFees( address payable _to, uint256 _value, uint128 _totalGasFeesSpentByRelayer, uint16 _fee ) private { uint256 _totalFees = (_value * _fee / 10000) + _totalGasFeesSpentByRelayer; // Prevent underflow if(_value - _totalFees > _value) { return; } // Add fees to the pot for localcoinswap to withdraw feesAvailableForWithdraw += _totalFees; _to.transfer(_value - _totalFees); } uint16 constant GAS_doRelease = 46588; /// @notice Release escrow to the buyer. This completes it and removes it from the mapping. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @param _additionalGas Additional gas to be deducted after this operation /// @return bool function doRelease( bytes16 _tradeID, address payable _seller, address payable _buyer, uint256 _value, uint16 _fee, uint128 _additionalGas ) private returns (bool) { Escrow memory _escrow; bytes32 _tradeHash; (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee); if (!_escrow.exists) return false; uint128 _gasFees = _escrow.totalGasFeesSpentByRelayer + (msg.sender == relayer ? (GAS_doRelease + _additionalGas ) * uint128(tx.gasprice) : 0 ); delete escrows[_tradeHash]; emit Released(_tradeHash); transferMinusFees(_buyer, _value, _gasFees, _fee); return true; } uint16 constant GAS_doDisableSellerCancel = 28944; /// @notice Prevents the seller from cancelling an escrow. Used to "mark as paid" by the buyer. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @param _additionalGas Additional gas to be deducted after this operation /// @return bool function doDisableSellerCancel( bytes16 _tradeID, address _seller, address _buyer, uint256 _value, uint16 _fee, uint128 _additionalGas ) private returns (bool) { Escrow memory _escrow; bytes32 _tradeHash; (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee); if (!_escrow.exists) return false; if(_escrow.sellerCanCancelAfter == 0) return false; escrows[_tradeHash].sellerCanCancelAfter = 0; emit SellerCancelDisabled(_tradeHash); if (msg.sender == relayer) { increaseGasSpent(_tradeHash, GAS_doDisableSellerCancel + _additionalGas); } return true; } uint16 constant GAS_doBuyerCancel = 46255; /// @notice Cancels the trade and returns the ether to the seller. Can only be called the buyer. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @param _additionalGas Additional gas to be deducted after this operation /// @return bool function doBuyerCancel( bytes16 _tradeID, address payable _seller, address payable _buyer, uint256 _value, uint16 _fee, uint128 _additionalGas ) private returns (bool) { Escrow memory _escrow; bytes32 _tradeHash; (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee); if (!_escrow.exists) { return false; } uint128 _gasFees = _escrow.totalGasFeesSpentByRelayer + (msg.sender == relayer ? (GAS_doBuyerCancel + _additionalGas ) * uint128(tx.gasprice) : 0 ); delete escrows[_tradeHash]; emit CancelledByBuyer(_tradeHash); transferMinusFees(_seller, _value, _gasFees, 0); return true; } uint16 constant GAS_doSellerCancel = 46815; /// @notice Returns the ether in escrow to the seller. Called by the seller. Sometimes unavailable. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @param _additionalGas Additional gas to be deducted after this operation /// @return bool function doSellerCancel( bytes16 _tradeID, address payable _seller, address payable _buyer, uint256 _value, uint16 _fee, uint128 _additionalGas ) private returns (bool) { Escrow memory _escrow; bytes32 _tradeHash; (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee); if (!_escrow.exists) { return false; } if(_escrow.sellerCanCancelAfter <= 1 || _escrow.sellerCanCancelAfter > block.timestamp) { // solium-disable-line return false; } uint128 _gasFees = _escrow.totalGasFeesSpentByRelayer + (msg.sender == relayer ? (GAS_doSellerCancel + _additionalGas ) * uint128(tx.gasprice) : 0 ); delete escrows[_tradeHash]; emit CancelledBySeller(_tradeHash); transferMinusFees(_seller, _value, _gasFees, 0); return true; } uint16 constant GAS_doSellerRequestCancel = 29507; /// @notice Request to cancel. Used if the buyer is unresponsive. Begins a countdown timer. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @param _additionalGas Additional gas to be deducted after this operation /// @return bool function doSellerRequestCancel( bytes16 _tradeID, address _seller, address _buyer, uint256 _value, uint16 _fee, uint128 _additionalGas ) private returns (bool) { // Called on unlimited payment window trades where the buyer is not responding Escrow memory _escrow; bytes32 _tradeHash; (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee); if (!_escrow.exists) { return false; } if(_escrow.sellerCanCancelAfter != 1) { return false; } escrows[_tradeHash].sellerCanCancelAfter = uint32(block.timestamp) // solium-disable-line + requestCancellationMinimumTime; emit SellerRequestedCancel(_tradeHash); if (msg.sender == relayer) { increaseGasSpent(_tradeHash, GAS_doSellerRequestCancel + _additionalGas); } return true; } /// @notice Get the sender of the signed instruction. /// @param _tradeID Identifier of the trade /// @param _instructionByte Identifier of the instruction /// @param _maximumGasPrice Maximum gas price permitted by the sender /// @param _v Signature "v" component /// @param _r Signature "r" component /// @param _s Signature "s" component /// @return address function getRelayedSender( bytes16 _tradeID, uint8 _instructionByte, uint128 _maximumGasPrice, uint8 _v, bytes32 _r, bytes32 _s ) private view returns (address) { bytes32 _hash = keccak256(abi.encodePacked( _tradeID, _instructionByte, _maximumGasPrice )); return recoverAddress(_hash, _v, _r, _s); } /// @notice Hashes the values and returns the matching escrow object and trade hash. /// @dev Returns an empty escrow struct and 0 _tradeHash if not found. /// @param _tradeID Escrow "tradeID" parameter /// @param _seller Escrow "seller" parameter /// @param _buyer Escrow "buyer" parameter /// @param _value Escrow "value" parameter /// @param _fee Escrow "fee parameter /// @return Escrow function getEscrowAndHash( bytes16 _tradeID, address _seller, address _buyer, uint256 _value, uint16 _fee ) private view returns (Escrow storage, bytes32) { bytes32 _tradeHash = keccak256(abi.encodePacked( _tradeID, _seller, _buyer, _value, _fee )); return (escrows[_tradeHash], _tradeHash); } /// @notice Returns an empty escrow struct and 0 _tradeHash if not found. /// @param _h Data to be hashed /// @param _v Signature "v" component /// @param _r Signature "r" component /// @param _s Signature "s" component /// @return address function recoverAddress( bytes32 _h, uint8 _v, bytes32 _r, bytes32 _s ) private pure returns (address) { bytes memory _prefix = "\x19Ethereum Signed Message:\n32"; bytes32 _prefixedHash = keccak256(abi.encodePacked(_prefix, _h)); return ecrecover(_prefixedHash, _v, _r, _s); } } contract _Token { function transfer(address _to, uint _value) public returns (bool success); function transferFrom(address _from, address _to, uint _value) public returns (bool success); function approve(address _spender, uint _value) public returns (bool success); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"initialAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"CancelledByBuyer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"CancelledBySeller","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"Created","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"DisputeResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"SellerCancelDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"SellerRequestedCancel","type":"event"},{"constant":false,"inputs":[{"internalType":"contract _Token","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"arbitrator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16[]","name":"_tradeID","type":"bytes16[]"},{"internalType":"address payable[]","name":"_seller","type":"address[]"},{"internalType":"address payable[]","name":"_buyer","type":"address[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"},{"internalType":"uint16[]","name":"_fee","type":"uint16[]"},{"internalType":"uint128[]","name":"_maximumGasPrice","type":"uint128[]"},{"internalType":"uint8[]","name":"_v","type":"uint8[]"},{"internalType":"bytes32[]","name":"_r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_s","type":"bytes32[]"},{"internalType":"uint8[]","name":"_instructionByte","type":"uint8[]"}],"name":"batchRelay","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address payable","name":"_seller","type":"address"},{"internalType":"address payable","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"buyerCancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address","name":"_seller","type":"address"},{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"},{"internalType":"uint32","name":"_paymentWindowInSeconds","type":"uint32"},{"internalType":"uint32","name":"_expiry","type":"uint32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"createEscrow","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address","name":"_seller","type":"address"},{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"disableSellerCancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"escrows","outputs":[{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"uint32","name":"sellerCanCancelAfter","type":"uint32"},{"internalType":"uint128","name":"totalGasFeesSpentByRelayer","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feesAvailableForWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"relayer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address payable","name":"_seller","type":"address"},{"internalType":"address payable","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"release","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"requestCancellationMinimumTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address payable","name":"_seller","type":"address"},{"internalType":"address payable","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint8","name":"_buyerPercent","type":"uint8"}],"name":"resolveDispute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address","name":"_seller","type":"address"},{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"sellerRequestCancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newArbitrator","type":"address"}],"name":"setArbitrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newRelayer","type":"address"}],"name":"setRelayer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"_newRequestCancellationMinimumTime","type":"uint32"}],"name":"setRequestCancellationMinimumTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract _Token","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_transferTo","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract _Token","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_transferTo","type":"address"},{"internalType":"address","name":"_transferFrom","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferTokenFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611c20600260146101000a81548163ffffffff021916908363ffffffff16021790555034801561003357600080fd5b50604051613de4380380613de48339818101604052602081101561005657600080fd5b810190808051906020019092919050505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050613cab806101396000396000f3fe60806040526004361061012a5760003560e01c80638406c079116100ab578063da3e33971161006f578063da3e339714610de9578063de5785d514610e64578063e599490514610e8f578063e9600f1214610f2a578063f1e03d6714610fe8578063f5537ede146110c35761012a565b80638406c079146106405780638da5cb5b146106975780638eb4e0ad146106ee578063ad3b1b4714610d3d578063b0eefabe14610d985761012a565b806357938b2a116100f257806357938b2a146103e55780635c810f091461041c5780636548e9bc146104da5780636b4078371461052b5780636cc6cde1146105e95761012a565b806305b649931461012f57806313af40351461017057806324943c7d146101c15780632cc9636c146102965780632d83549c14610354575b600080fd5b34801561013b57600080fd5b5061016e6004803603602081101561015257600080fd5b81019080803563ffffffff16906020019092919050505061113e565b005b34801561017c57600080fd5b506101bf6004803603602081101561019357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611225565b005b3480156101cd57600080fd5b5061029460048036036101208110156101e557600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919050505061132c565b005b3480156102a257600080fd5b5061033a600480360360a08110156102b957600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff16906020019092919050505061197e565b604051808215151515815260200191505060405180910390f35b34801561036057600080fd5b5061038d6004803603602081101561037757600080fd5b8101908080359060200190929190505050611a3b565b60405180841515151581526020018363ffffffff1663ffffffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b3480156103f157600080fd5b506103fa611a9e565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561042857600080fd5b506104c0600480360360a081101561043f57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050611ab4565b604051808215151515815260200191505060405180910390f35b3480156104e657600080fd5b50610529600480360360208110156104fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b71565b005b34801561053757600080fd5b506105cf600480360360a081101561054e57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050611c78565b604051808215151515815260200191505060405180910390f35b3480156105f557600080fd5b506105fe611d35565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064c57600080fd5b50610655611d5a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106a357600080fd5b506106ac611d80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106fa57600080fd5b50610ce6600480360361014081101561071257600080fd5b810190808035906020019064010000000081111561072f57600080fd5b82018360208201111561074157600080fd5b8035906020019184602083028401116401000000008311171561076357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107c357600080fd5b8201836020820111156107d557600080fd5b803590602001918460208302840111640100000000831117156107f757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561085757600080fd5b82018360208201111561086957600080fd5b8035906020019184602083028401116401000000008311171561088b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108eb57600080fd5b8201836020820111156108fd57600080fd5b8035906020019184602083028401116401000000008311171561091f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561097f57600080fd5b82018360208201111561099157600080fd5b803590602001918460208302840111640100000000831117156109b357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a1357600080fd5b820183602082011115610a2557600080fd5b80359060200191846020830284011164010000000083111715610a4757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610aa757600080fd5b820183602082011115610ab957600080fd5b80359060200191846020830284011164010000000083111715610adb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b3b57600080fd5b820183602082011115610b4d57600080fd5b80359060200191846020830284011164010000000083111715610b6f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610bcf57600080fd5b820183602082011115610be157600080fd5b80359060200191846020830284011164010000000083111715610c0357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c6357600080fd5b820183602082011115610c7557600080fd5b80359060200191846020830284011164010000000083111715610c9757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611da6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d29578082015181840152602081019050610d0e565b505050509050019250505060405180910390f35b348015610d4957600080fd5b50610d9660048036036040811015610d6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f91565b005b348015610da457600080fd5b50610de760048036036020811015610dbb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061210a565b005b348015610df557600080fd5b50610e6260048036036060811015610e0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612210565b005b348015610e7057600080fd5b50610e7961239b565b6040518082815260200191505060405180910390f35b348015610e9b57600080fd5b50610f2860048036036080811015610eb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123a1565b005b348015610f3657600080fd5b50610fce600480360360a0811015610f4d57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050612561565b604051808215151515815260200191505060405180910390f35b6110c16004803603610140811015610fff57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061261e565b005b3480156110cf57600080fd5b5061113c600480360360608110156110e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612add565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260146101000a81548163ffffffff021916908363ffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d7573742062652061726269747261746f72000000000000000000000000000081525060200191505060405180910390fd5b600061145a8a600660405160200180836fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018260ff1660ff1660f81b81526001019250505060405160208183030381529060405280519060200120868686612c68565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806114c157508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611533576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d757374206265206275796572206f722073656c6c657200000000000000000081525060200191505060405180910390fd5b61153b613bf3565b600061154a8c8c8c8c8c612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f457363726f7720646f6573206e6f74206578697374000000000000000000000081525060200191505060405180910390fd5b60648460ff1611156116bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c2f6022913960400191505060405180910390fd5b60003a618d0461ffff16028360400151016fffffffffffffffffffffffffffffffff16905089818b03111561175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f766572666c6f77206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b8060036000828254019250508190555060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f65e0c7182ce84cd9087c1b07dc4b65875578877b885848e4be19ee312f2c3d3160405160405180910390a260008560ff1611156119075760006127108a61ffff168c028161181c57fe5b0490506000818360648960ff168f028161183257fe5b04030390508b8111156118ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f766572666c6f77206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b816003600082825401925050819055508c73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611903573d6000803e3d6000fd5b5050505b60648560ff16101561196f578b73ffffffffffffffffffffffffffffffffffffffff166108fc60648760640360ff16848e03028161194157fe5b049081150290604051600060405180830381858888f1935050505015801561196d573d6000803e3d6000fd5b505b50505050505050505050505050565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d7573742062652062757965720000000000000000000000000000000000000081525060200191505060405180910390fd5b611a3086868686866000612e98565b905095945050505050565b60046020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900463ffffffff16908060000160059054906101000a90046fffffffffffffffffffffffffffffffff16905083565b600260149054906101000a900463ffffffff1681565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d7573742062652062757965720000000000000000000000000000000000000081525060200191505060405180910390fd5b611b6686868686866000613088565b905095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d7573742062652073656c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b611d2a86868686866000613251565b905095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060808b51604051908082528060200260200182016040528015611dd95781602001602082028038833980820191505090505b5090506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e3a576000611e4c565b8c51616f5461ffff1681611e4a57fe5b045b905060008090505b8d518160ff161015611f7d57611f4f8e8260ff1681518110611e7257fe5b60200260200101518e8360ff1681518110611e8957fe5b60200260200101518e8460ff1681518110611ea057fe5b60200260200101518e8560ff1681518110611eb757fe5b60200260200101518e8660ff1681518110611ece57fe5b60200260200101518e8760ff1681518110611ee557fe5b60200260200101518e8860ff1681518110611efc57fe5b60200260200101518e8960ff1681518110611f1357fe5b60200260200101518e8a60ff1681518110611f2a57fe5b60200260200101518e8b60ff1681518110611f4157fe5b60200260200101518c61342c565b838260ff1681518110611f5e57fe5b6020026020010190151590811515815250508080600101915050611e54565b5081925050509a9950505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b6003548111156120af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c516026913960400191505060405180910390fd5b806003600082825403925050819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612105573d6000803e3d6000fd5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561235a57600080fd5b505af115801561236e573d6000803e3d6000fd5b505050506040513d602081101561238457600080fd5b810190808051906020019092919050505050505050565b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561251f57600080fd5b505af1158015612533573d6000803e3d6000fd5b505050506040513d602081101561254957600080fd5b81019080805190602001909291905050505050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d7573742062652073656c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b61261386868686866000613627565b905095945050505050565b60008a8a8a8a8a60405160200180866fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018261ffff1661ffff1660f01b8152600201955050505050506040516020818303038152906040528051906020012090506004600082815260200190815260200160002060000160009054906101000a900460ff161561278f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f547261646520616c72656164792065786973747300000000000000000000000081525060200191505060405180910390fd5b6000818787604051602001808481526020018363ffffffff1663ffffffff1660e01b81526004018263ffffffff1663ffffffff1660e01b81526004019350505050604051602081830303815290604052805190602001209050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661282d82878787612c68565b73ffffffffffffffffffffffffffffffffffffffff16146128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4d7573742062652072656c61796572000000000000000000000000000000000081525060200191505060405180910390fd5b8563ffffffff164210612931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5369676e6174757265206861732065787069726564000000000000000000000081525060200191505060405180910390fd5b88341480156129405750600034115b6129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f496e636f72726563742065746865722073656e7400000000000000000000000081525060200191505060405180910390fd5b6000808863ffffffff16146129c9578742016129cc565b60015b905060405180606001604052806001151581526020018263ffffffff16815260200160006fffffffffffffffffffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050827f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c60405160405180910390a250505050505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050506040513d6020811015612c5157600080fd5b810190808051906020019092919050505050505050565b600060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152509050600081876040516020018083805190602001908083835b60208310612cde5780518252602082019150602081019050602083039250612cbb565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612d7f573d6000803e3d6000fd5b5050506020604051035192505050949350505050565b6000806000878787878760405160200180866fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018261ffff1661ffff1660f01b815260020195505050505050604051602081830303815290604052805190602001209050600460008281526020019081526020016000208181915092509250509550959350505050565b6000612ea2613bf3565b6000612eb18989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151612f665760009250505061307e565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fc4576000612fd0565b3a8561b4af61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817fd9b627ddaa414e8e6c82366cc9c179f6281d73968827cc17038a56852e28ac8b60405160405180910390a26130768988836000613816565b600193505050505b9695505050505050565b6000613092613bf3565b60006130a18989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505091508092508193505050816000015161315657600092505050613247565b6000826020015163ffffffff16141561317457600092505050613247565b60006004600083815260200190815260200160002060000160016101000a81548163ffffffff021916908363ffffffff160217905550807fe95fa7985c7585e90dab2dc46470726468662be06f67d79a31a5012e4bc0edeb60405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132405761323f818561711061ffff16016138b1565b5b6001925050505b9695505050505050565b600061325b613bf3565b600061326a8989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505091508092508193505050816000015161331f57600092505050613422565b6001826020015163ffffffff161461333c57600092505050613422565b600260149054906101000a900463ffffffff1642016004600083815260200190815260200160002060000160016101000a81548163ffffffff021916908363ffffffff160217905550807f43e76a2687c7b12792086e4c776772be26c4d6a7041115f446cbc22ccada08ab60405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561341b5761341a818561734361ffff16016138b1565b5b6001925050505b9695505050505050565b60008061343d8d858a8a8a8a613925565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156134c257600160ff168460ff161415613498576134908d8d8d8d8d88613088565b915050613618565b600260ff168460ff1614156134bd576134b58d8d8d8d8d88612e98565b915050613618565b613616565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561356a57600560ff168460ff16141561351b576135138d8d8d8d8d88613627565b915050613618565b600360ff168460ff161415613540576135388d8d8d8d8d886139d0565b915050613618565b600460ff168460ff1614156135655761355d8d8d8d8d8d88613251565b915050613618565b613615565b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461360b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f556e7265636f676e69736564207061727479000000000000000000000000000081525060200191505060405180910390fd5b6000915050613618565b5b505b9b9a5050505050505050505050565b6000613631613bf3565b60006136408989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509150809250819350505081600001516136f55760009250505061380c565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461375357600061375f565b3a8561b5fc61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f6eec2dd2382427616d4ea7ef183b16091feac4e2e63c8b55f25215f132df8d1460405160405180910390a261380488888389613816565b600193505050505b9695505050505050565b6000826fffffffffffffffffffffffffffffffff166127108361ffff1686028161383c57fe5b0401905083818503111561385057506138ab565b806003600082825401925050819055508473ffffffffffffffffffffffffffffffffffffffff166108fc8286039081150290604051600060405180830381858888f193505050501580156138a8573d6000803e3d6000fd5b50505b50505050565b3a81026004600084815260200190815260200160002060000160058282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050565b60008087878760405160200180846fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018360ff1660ff1660f81b8152600101826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1660801b815260100193505050506040516020818303038152906040528051906020012090506139c381868686612c68565b9150509695505050505050565b60006139da613bf3565b60006139e98989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151613a9e57600092505050613be9565b6001826020015163ffffffff16111580613ac1575042826020015163ffffffff16115b15613ad157600092505050613be9565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613b2f576000613b3b565b3a8561b6df61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f366d2b4e6cc37ecebb3d7d41df6d581634fd8137412710a1e086e4ca4656bb5860405160405180910390a2613be18988836000613816565b600193505050505b9695505050505050565b6040518060600160405280600015158152602001600063ffffffff16815260200160006fffffffffffffffffffffffffffffffff168152509056fe5f627579657250657263656e74206d75737420626520313030206f72206c6f776572416d6f756e7420697320686967686572207468616e20616d6f756e7420617661696c61626c65a265627a7a72315820619413efc9f1bfc075ff600f5996975b820abf42bd0dd18fb303b23649b2993c64736f6c63430005110032000000000000000000000000877cf5f02497607e0b4e4e6aaf6c275648cd5ce5
Deployed Bytecode
0x60806040526004361061012a5760003560e01c80638406c079116100ab578063da3e33971161006f578063da3e339714610de9578063de5785d514610e64578063e599490514610e8f578063e9600f1214610f2a578063f1e03d6714610fe8578063f5537ede146110c35761012a565b80638406c079146106405780638da5cb5b146106975780638eb4e0ad146106ee578063ad3b1b4714610d3d578063b0eefabe14610d985761012a565b806357938b2a116100f257806357938b2a146103e55780635c810f091461041c5780636548e9bc146104da5780636b4078371461052b5780636cc6cde1146105e95761012a565b806305b649931461012f57806313af40351461017057806324943c7d146101c15780632cc9636c146102965780632d83549c14610354575b600080fd5b34801561013b57600080fd5b5061016e6004803603602081101561015257600080fd5b81019080803563ffffffff16906020019092919050505061113e565b005b34801561017c57600080fd5b506101bf6004803603602081101561019357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611225565b005b3480156101cd57600080fd5b5061029460048036036101208110156101e557600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919050505061132c565b005b3480156102a257600080fd5b5061033a600480360360a08110156102b957600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff16906020019092919050505061197e565b604051808215151515815260200191505060405180910390f35b34801561036057600080fd5b5061038d6004803603602081101561037757600080fd5b8101908080359060200190929190505050611a3b565b60405180841515151581526020018363ffffffff1663ffffffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b3480156103f157600080fd5b506103fa611a9e565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561042857600080fd5b506104c0600480360360a081101561043f57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050611ab4565b604051808215151515815260200191505060405180910390f35b3480156104e657600080fd5b50610529600480360360208110156104fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b71565b005b34801561053757600080fd5b506105cf600480360360a081101561054e57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050611c78565b604051808215151515815260200191505060405180910390f35b3480156105f557600080fd5b506105fe611d35565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064c57600080fd5b50610655611d5a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106a357600080fd5b506106ac611d80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106fa57600080fd5b50610ce6600480360361014081101561071257600080fd5b810190808035906020019064010000000081111561072f57600080fd5b82018360208201111561074157600080fd5b8035906020019184602083028401116401000000008311171561076357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107c357600080fd5b8201836020820111156107d557600080fd5b803590602001918460208302840111640100000000831117156107f757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561085757600080fd5b82018360208201111561086957600080fd5b8035906020019184602083028401116401000000008311171561088b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108eb57600080fd5b8201836020820111156108fd57600080fd5b8035906020019184602083028401116401000000008311171561091f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561097f57600080fd5b82018360208201111561099157600080fd5b803590602001918460208302840111640100000000831117156109b357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a1357600080fd5b820183602082011115610a2557600080fd5b80359060200191846020830284011164010000000083111715610a4757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610aa757600080fd5b820183602082011115610ab957600080fd5b80359060200191846020830284011164010000000083111715610adb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b3b57600080fd5b820183602082011115610b4d57600080fd5b80359060200191846020830284011164010000000083111715610b6f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610bcf57600080fd5b820183602082011115610be157600080fd5b80359060200191846020830284011164010000000083111715610c0357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c6357600080fd5b820183602082011115610c7557600080fd5b80359060200191846020830284011164010000000083111715610c9757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611da6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d29578082015181840152602081019050610d0e565b505050509050019250505060405180910390f35b348015610d4957600080fd5b50610d9660048036036040811015610d6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f91565b005b348015610da457600080fd5b50610de760048036036020811015610dbb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061210a565b005b348015610df557600080fd5b50610e6260048036036060811015610e0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612210565b005b348015610e7057600080fd5b50610e7961239b565b6040518082815260200191505060405180910390f35b348015610e9b57600080fd5b50610f2860048036036080811015610eb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123a1565b005b348015610f3657600080fd5b50610fce600480360360a0811015610f4d57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050612561565b604051808215151515815260200191505060405180910390f35b6110c16004803603610140811015610fff57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061261e565b005b3480156110cf57600080fd5b5061113c600480360360608110156110e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612add565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260146101000a81548163ffffffff021916908363ffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d7573742062652061726269747261746f72000000000000000000000000000081525060200191505060405180910390fd5b600061145a8a600660405160200180836fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018260ff1660ff1660f81b81526001019250505060405160208183030381529060405280519060200120868686612c68565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806114c157508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611533576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d757374206265206275796572206f722073656c6c657200000000000000000081525060200191505060405180910390fd5b61153b613bf3565b600061154a8c8c8c8c8c612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f457363726f7720646f6573206e6f74206578697374000000000000000000000081525060200191505060405180910390fd5b60648460ff1611156116bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c2f6022913960400191505060405180910390fd5b60003a618d0461ffff16028360400151016fffffffffffffffffffffffffffffffff16905089818b03111561175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f766572666c6f77206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b8060036000828254019250508190555060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f65e0c7182ce84cd9087c1b07dc4b65875578877b885848e4be19ee312f2c3d3160405160405180910390a260008560ff1611156119075760006127108a61ffff168c028161181c57fe5b0490506000818360648960ff168f028161183257fe5b04030390508b8111156118ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f766572666c6f77206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b816003600082825401925050819055508c73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611903573d6000803e3d6000fd5b5050505b60648560ff16101561196f578b73ffffffffffffffffffffffffffffffffffffffff166108fc60648760640360ff16848e03028161194157fe5b049081150290604051600060405180830381858888f1935050505015801561196d573d6000803e3d6000fd5b505b50505050505050505050505050565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d7573742062652062757965720000000000000000000000000000000000000081525060200191505060405180910390fd5b611a3086868686866000612e98565b905095945050505050565b60046020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900463ffffffff16908060000160059054906101000a90046fffffffffffffffffffffffffffffffff16905083565b600260149054906101000a900463ffffffff1681565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d7573742062652062757965720000000000000000000000000000000000000081525060200191505060405180910390fd5b611b6686868686866000613088565b905095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d7573742062652073656c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b611d2a86868686866000613251565b905095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060808b51604051908082528060200260200182016040528015611dd95781602001602082028038833980820191505090505b5090506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e3a576000611e4c565b8c51616f5461ffff1681611e4a57fe5b045b905060008090505b8d518160ff161015611f7d57611f4f8e8260ff1681518110611e7257fe5b60200260200101518e8360ff1681518110611e8957fe5b60200260200101518e8460ff1681518110611ea057fe5b60200260200101518e8560ff1681518110611eb757fe5b60200260200101518e8660ff1681518110611ece57fe5b60200260200101518e8760ff1681518110611ee557fe5b60200260200101518e8860ff1681518110611efc57fe5b60200260200101518e8960ff1681518110611f1357fe5b60200260200101518e8a60ff1681518110611f2a57fe5b60200260200101518e8b60ff1681518110611f4157fe5b60200260200101518c61342c565b838260ff1681518110611f5e57fe5b6020026020010190151590811515815250508080600101915050611e54565b5081925050509a9950505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b6003548111156120af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c516026913960400191505060405180910390fd5b806003600082825403925050819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612105573d6000803e3d6000fd5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561235a57600080fd5b505af115801561236e573d6000803e3d6000fd5b505050506040513d602081101561238457600080fd5b810190808051906020019092919050505050505050565b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561251f57600080fd5b505af1158015612533573d6000803e3d6000fd5b505050506040513d602081101561254957600080fd5b81019080805190602001909291905050505050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d7573742062652073656c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b61261386868686866000613627565b905095945050505050565b60008a8a8a8a8a60405160200180866fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018261ffff1661ffff1660f01b8152600201955050505050506040516020818303038152906040528051906020012090506004600082815260200190815260200160002060000160009054906101000a900460ff161561278f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f547261646520616c72656164792065786973747300000000000000000000000081525060200191505060405180910390fd5b6000818787604051602001808481526020018363ffffffff1663ffffffff1660e01b81526004018263ffffffff1663ffffffff1660e01b81526004019350505050604051602081830303815290604052805190602001209050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661282d82878787612c68565b73ffffffffffffffffffffffffffffffffffffffff16146128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4d7573742062652072656c61796572000000000000000000000000000000000081525060200191505060405180910390fd5b8563ffffffff164210612931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5369676e6174757265206861732065787069726564000000000000000000000081525060200191505060405180910390fd5b88341480156129405750600034115b6129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f496e636f72726563742065746865722073656e7400000000000000000000000081525060200191505060405180910390fd5b6000808863ffffffff16146129c9578742016129cc565b60015b905060405180606001604052806001151581526020018263ffffffff16815260200160006fffffffffffffffffffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050827f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c60405160405180910390a250505050505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050506040513d6020811015612c5157600080fd5b810190808051906020019092919050505050505050565b600060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152509050600081876040516020018083805190602001908083835b60208310612cde5780518252602082019150602081019050602083039250612cbb565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612d7f573d6000803e3d6000fd5b5050506020604051035192505050949350505050565b6000806000878787878760405160200180866fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018261ffff1661ffff1660f01b815260020195505050505050604051602081830303815290604052805190602001209050600460008281526020019081526020016000208181915092509250509550959350505050565b6000612ea2613bf3565b6000612eb18989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151612f665760009250505061307e565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fc4576000612fd0565b3a8561b4af61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817fd9b627ddaa414e8e6c82366cc9c179f6281d73968827cc17038a56852e28ac8b60405160405180910390a26130768988836000613816565b600193505050505b9695505050505050565b6000613092613bf3565b60006130a18989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505091508092508193505050816000015161315657600092505050613247565b6000826020015163ffffffff16141561317457600092505050613247565b60006004600083815260200190815260200160002060000160016101000a81548163ffffffff021916908363ffffffff160217905550807fe95fa7985c7585e90dab2dc46470726468662be06f67d79a31a5012e4bc0edeb60405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132405761323f818561711061ffff16016138b1565b5b6001925050505b9695505050505050565b600061325b613bf3565b600061326a8989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505091508092508193505050816000015161331f57600092505050613422565b6001826020015163ffffffff161461333c57600092505050613422565b600260149054906101000a900463ffffffff1642016004600083815260200190815260200160002060000160016101000a81548163ffffffff021916908363ffffffff160217905550807f43e76a2687c7b12792086e4c776772be26c4d6a7041115f446cbc22ccada08ab60405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561341b5761341a818561734361ffff16016138b1565b5b6001925050505b9695505050505050565b60008061343d8d858a8a8a8a613925565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156134c257600160ff168460ff161415613498576134908d8d8d8d8d88613088565b915050613618565b600260ff168460ff1614156134bd576134b58d8d8d8d8d88612e98565b915050613618565b613616565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561356a57600560ff168460ff16141561351b576135138d8d8d8d8d88613627565b915050613618565b600360ff168460ff161415613540576135388d8d8d8d8d886139d0565b915050613618565b600460ff168460ff1614156135655761355d8d8d8d8d8d88613251565b915050613618565b613615565b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461360b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f556e7265636f676e69736564207061727479000000000000000000000000000081525060200191505060405180910390fd5b6000915050613618565b5b505b9b9a5050505050505050505050565b6000613631613bf3565b60006136408989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509150809250819350505081600001516136f55760009250505061380c565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461375357600061375f565b3a8561b5fc61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f6eec2dd2382427616d4ea7ef183b16091feac4e2e63c8b55f25215f132df8d1460405160405180910390a261380488888389613816565b600193505050505b9695505050505050565b6000826fffffffffffffffffffffffffffffffff166127108361ffff1686028161383c57fe5b0401905083818503111561385057506138ab565b806003600082825401925050819055508473ffffffffffffffffffffffffffffffffffffffff166108fc8286039081150290604051600060405180830381858888f193505050501580156138a8573d6000803e3d6000fd5b50505b50505050565b3a81026004600084815260200190815260200160002060000160058282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050565b60008087878760405160200180846fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018360ff1660ff1660f81b8152600101826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1660801b815260100193505050506040516020818303038152906040528051906020012090506139c381868686612c68565b9150509695505050505050565b60006139da613bf3565b60006139e98989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151613a9e57600092505050613be9565b6001826020015163ffffffff16111580613ac1575042826020015163ffffffff16115b15613ad157600092505050613be9565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613b2f576000613b3b565b3a8561b6df61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f366d2b4e6cc37ecebb3d7d41df6d581634fd8137412710a1e086e4ca4656bb5860405160405180910390a2613be18988836000613816565b600193505050505b9695505050505050565b6040518060600160405280600015158152602001600063ffffffff16815260200160006fffffffffffffffffffffffffffffffff168152509056fe5f627579657250657263656e74206d75737420626520313030206f72206c6f776572416d6f756e7420697320686967686572207468616e20616d6f756e7420617661696c61626c65a265627a7a72315820619413efc9f1bfc075ff600f5996975b820abf42bd0dd18fb303b23649b2993c64736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000877cf5f02497607e0b4e4e6aaf6c275648cd5ce5
-----Decoded View---------------
Arg [0] : initialAddress (address): 0x877cf5F02497607E0B4e4E6AaF6C275648Cd5ce5
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000877cf5f02497607e0b4e4e6aaf6c275648cd5ce5
Deployed Bytecode Sourcemap
88:28312:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13943:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13943:207:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13943:207:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;13435:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13435:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13435:92:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;6279:1775;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6279:1775:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6279:1775:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9763:323;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9763:323:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9763:323:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2793:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2793:42:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2793:42:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;539:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;539:54:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9092:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9092:333:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9092:333:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13682:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13682:100:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13682:100:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;10425:335;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10425:335:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;10425:335:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;296:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;296:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;510:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;510:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;391:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;391:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11449:1065;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11449:1065:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;11449:1065:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11449:1065:0;;;;;;;;;;;;;;;;;12704:309;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12704:309:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12704:309:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13174:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13174:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13174:112:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;15318:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15318:191:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15318:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;645:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;645:39:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14836:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14836:254:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14836:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8400:326;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8400:326:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8400:326:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3896:1751;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3896:1751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14375:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14375:199:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14375:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13943:207;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14108:34;14075:30;;:67;;;;;;;;;;;;;;;;;;13943:207;:::o;13435:92::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13510:9;13502:5;;:17;;;;;;;;;;;;;;;;;;13435:92;:::o;6279:1775::-;3008:10;;;;;;;;;;;2994:24;;:10;:24;;;2986:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6577:18;6598:123;6654:8;1410:4;6623:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6623:84:0;;;6613:95;;;;;;6710:2;6714;6718;6598:14;:123::i;:::-;6577:144;;6754:6;6740:20;;:10;:20;;;:45;;;;6778:7;6764:21;;:10;:21;;;6740:45;6732:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6826:21;;:::i;:::-;6858:18;6911:57;6928:8;6938:7;6947:6;6955;6963:4;6911:16;:57::i;:::-;6887:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6987:7;:14;;;6979:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7063:3;7046:13;:20;;;;7038:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7118:18;7208:11;5694:5;7177:43;;;7139:7;:34;;;:82;7118:103;;;;7263:6;7249:10;7240:6;:19;:29;;7232:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7348:10;7320:24;;:38;;;;;;;;;;;7427:7;:19;7435:10;7427:19;;;;;;;;;;;;7420:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7478:10;7462:27;;;;;;;;;;7520:1;7504:13;:17;;;7500:418;;;7582:19;7621:5;7614:4;7605:13;;:6;:13;:21;;;;;;7582:45;;7672:20;7739:11;7726:10;7720:3;7704:13;7695:22;;:6;:22;:28;;;;;;:41;:55;7672:78;;7787:6;7771:12;:22;;7763:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7853:11;7825:24;;:39;;;;;;;;;;;7877:6;:15;;:29;7893:12;7877:29;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7877:29:0;7500:418;;;7948:3;7932:13;:19;;;7928:119;;;7966:7;:16;;:69;8031:3;8014:13;8008:3;:19;7983:45;;7993:10;7984:6;:19;7983:45;:51;;;;;;7966:69;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7966:69:0;7928:119;3052:1;;;;6279:1775;;;;;;;;;:::o;9763:323::-;9940:4;9979:6;9965:20;;:10;:20;;;9957:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10021:57;10035:8;10045:7;10054:6;10062;10070:4;10076:1;10021:13;:57::i;:::-;10014:64;;9763:323;;;;;;;:::o;2793:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;539:54::-;;;;;;;;;;;;;:::o;9092:333::-;9271:4;9310:6;9296:20;;:10;:20;;;9288:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9352:65;9374:8;9384:7;9393:6;9401;9409:4;9415:1;9352:21;:65::i;:::-;9345:72;;9092:333;;;;;;;:::o;13682:100::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13763:11;13753:7;;:21;;;;;;;;;;;;;;;;;;13682:100;:::o;10425:335::-;10604:4;10643:7;10629:21;;:10;:21;;;10621:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10687:65;10709:8;10719:7;10728:6;10736;10744:4;10750:1;10687:21;:65::i;:::-;10680:72;;10425:335;;;;;;;:::o;296:25::-;;;;;;;;;;;;;:::o;510:22::-;;;;;;;;;;;;;:::o;391:20::-;;;;;;;;;;;;;:::o;11449:1065::-;11852:13;11878:22;11914:8;:15;11903:27;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11903:27:0;;;;11878:52;;11941:22;11988:7;;;;;;;;;;;11974:21;;:10;:21;;;:68;;12041:1;11974:68;;;12023:8;:15;11437:5;11998:40;;;;;;;;11974:68;11941:102;;12059:7;12069:1;12059:11;;12054:427;12076:8;:15;12072:1;:19;;;12054:427;;;12127:342;12151:8;12160:1;12151:11;;;;;;;;;;;;;;;;12181:7;12189:1;12181:10;;;;;;;;;;;;;;;;12210:6;12217:1;12210:9;;;;;;;;;;;;;;;;12238:6;12245:1;12238:9;;;;;;;;;;;;;;;;12266:4;12271:1;12266:7;;;;;;;;;;;;;;;;12292:16;12309:1;12292:19;;;;;;;;;;;;;;;;12330:2;12333:1;12330:5;;;;;;;;;;;;;;;;12354:2;12357:1;12354:5;;;;;;;;;;;;;;;;12378:2;12381:1;12378:5;;;;;;;;;;;;;;;;12402:16;12419:1;12402:19;;;;;;;;;;;;;;;;12440:14;12127:5;:342::i;:::-;12113:8;12122:1;12113:11;;;;;;;;;;;;;;;:356;;;;;;;;;;;12093:3;;;;;;;12054:427;;;;12498:8;12491:15;;;;11449:1065;;;;;;;;;;;;:::o;12704:309::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12860:24;;12849:7;:35;;12841:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12966:7;12938:24;;:35;;;;;;;;;;;12984:3;:12;;:21;12997:7;12984:21;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12984:21:0;12704:309;;:::o;13174:112::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13264:14;13251:10;;:27;;;;;;;;;;;;;;;;;;13174:112;:::o;15318:191::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15461:14;:22;;;15484:8;15494:6;15461:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15461:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15461:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15461:40:0;;;;;;;;;;;;;;;;;15318:191;;;:::o;645:39::-;;;;:::o;14836:254::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15019:14;:27;;;15047:11;15060:13;15075:6;15019:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15019:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15019:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15019:63:0;;;;;;;;;;;;;;;;;14836:254;;;;:::o;8400:326::-;8583:4;8621:7;8607:21;;:10;:21;;;8599:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8665:53;8675:8;8685:7;8694:6;8702;8710:4;8716:1;8665:9;:53::i;:::-;8658:60;;8400:326;;;;;;;:::o;3896:1751::-;4449:18;4497:8;4507:7;4516:6;4524;4532:4;4480:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4480:57:0;;;4470:68;;;;;;4449:89;;4612:7;:19;4620:10;4612:19;;;;;;;;;;;:26;;;;;;;;;;;;4611:27;4603:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4758:23;4825:10;4850:23;4888:7;4794:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4794:112:0;;;4784:123;;;;;;4758:149;;4973:7;;;;;;;;;;;4926:54;;:43;4941:15;4958:2;4962;4966;4926:14;:43::i;:::-;:54;;;4918:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5092:7;5074:25;;:15;:25;5066:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5261:6;5248:9;:19;:36;;;;;5283:1;5271:9;:13;5248:36;5240:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5320:28;5378:1;5351:23;:28;;;:110;;5438:23;5419:15;5412:49;5351:110;;;5395:1;5351:110;5320:141;;5566:38;;;;;;;;5573:4;5566:38;;;;;;5579:21;5566:38;;;;;;5602:1;5566:38;;;;;5544:7;:19;5552:10;5544:19;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5628:10;5620:19;;;;;;;;;;3896:1751;;;;;;;;;;;;;:::o;14375:199::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14522:14;:23;;;14546:11;14559:6;14522:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14522:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14522:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14522:44:0;;;;;;;;;;;;;;;;;14375:199;;;:::o;28048:349::-;28183:7;28203:20;:57;;;;;;;;;;;;;;;;;;;28271:21;28322:7;28331:2;28305:29;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28305:29:0;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28305:29:0;;;28295:40;;;;;;28271:64;;28353:36;28363:13;28378:2;28382;28386;28353:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28353:36:0;;;;;;;;28346:43;;;;28048:349;;;;;;:::o;27330:440::-;27510:14;27526:7;27546:18;27608:8;27631:7;27653:6;27674;27695:4;27577:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27577:133:0;;;27567:144;;;;;;27546:165;;27730:7;:19;27738:10;27730:19;;;;;;;;;;;27751:10;27722:40;;;;;;;;27330:440;;;;;;;;:::o;22266:824::-;22487:4;22504:21;;:::i;:::-;22536:18;22589:57;22606:8;22616:7;22625:6;22633;22641:4;22589:16;:57::i;:::-;22565:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22662:7;:14;;;22657:60;;22700:5;22693:12;;;;;;22657:60;22727:16;22798:7;;;;;;;;;;;22784:21;;:10;:21;;;:122;;22905:1;22784:122;;;22873:11;22846:14;21807:5;22826:34;;;22825:60;22784:122;22746:7;:34;;;:175;22727:194;;22939:7;:19;22947:10;22939:19;;;;;;;;;;;;22932:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22991:10;22974:28;;;;;;;;;;23013:47;23031:7;23040:6;23048:8;23058:1;23013:17;:47::i;:::-;23078:4;23071:11;;;;;22266:824;;;;;;;;;:::o;21019:744::-;21232:4;21249:21;;:::i;:::-;21281:18;21334:57;21351:8;21361:7;21370:6;21378;21386:4;21334:16;:57::i;:::-;21310:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21407:7;:14;;;21402:33;;21430:5;21423:12;;;;;;21402:33;21481:1;21449:7;:28;;;:33;;;21446:50;;;21491:5;21484:12;;;;;;21446:50;21550:1;21507:7;:19;21515:10;21507:19;;;;;;;;;;;:40;;;:44;;;;;;;;;;;;;;;;;;21588:10;21567:32;;;;;;;;;;21628:7;;;;;;;;;;;21614:21;;:10;:21;;;21610:124;;;21650:72;21667:10;21707:14;20561:5;21679:42;;;21650:16;:72::i;:::-;21610:124;21751:4;21744:11;;;;21019:744;;;;;;;;;:::o;25090:976::-;25303:4;25408:21;;:::i;:::-;25440:18;25493:57;25510:8;25520:7;25529:6;25537;25545:4;25493:16;:57::i;:::-;25469:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25566:7;:14;;;25561:60;;25604:5;25597:12;;;;;;25561:60;25666:1;25634:7;:28;;;:33;;;25631:77;;25691:5;25684:12;;;;;;25631:77;25823:30;;;;;;;;;;;25768:15;25761:92;25718:7;:19;25726:10;25718:19;;;;;;;;;;;:40;;;:135;;;;;;;;;;;;;;;;;;25891:10;25869:33;;;;;;;;;;25931:7;;;;;;;;;;;25917:21;;:10;:21;;;25913:124;;;25953:72;25970:10;26010:14;24636:5;25982:42;;;25953:16;:72::i;:::-;25913:124;26054:4;26047:11;;;;25090:976;;;;;;;;;:::o;16163:1897::-;16505:4;16522:22;16547:163;16578:8;16601:16;16632;16663:2;16680;16697;16547:16;:163::i;:::-;16522:188;;16743:6;16725:24;;:14;:24;;;16721:1332;;;909:4;16808:52;;:16;:52;;;16804:424;;;16939:78;16961:8;16971:7;16980:6;16988;16996:4;17002:14;16939:21;:78::i;:::-;16932:85;;;;;16804:424;987:4;17043:44;;:16;:44;;;17039:189;;;17142:70;17156:8;17166:7;17175:6;17183;17191:4;17197:14;17142:13;:70::i;:::-;17135:77;;;;;17039:189;16721:1332;;;17267:7;17249:25;;:14;:25;;;17245:808;;;1294:4;17334:39;;:16;:39;;;17330:600;;;17429:66;17439:8;17449:7;17458:6;17466;17474:4;17480:14;17429:9;:66::i;:::-;17422:73;;;;;17330:600;1067:4;17521:45;;:16;:45;;;17517:413;;;17621:71;17636:8;17646:7;17655:6;17663;17671:4;17677:14;17621;:71::i;:::-;17614:78;;;;;17517:413;1202:4;17718:53;;:16;:53;;;17714:216;;;17836:78;17858:8;17868:7;17877:6;17885;17893:4;17899:14;17836:21;:78::i;:::-;17829:85;;;;;17714:216;17245:808;;;17984:7;17970:21;;:10;:21;;;17962:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18036:5;18029:12;;;;;17245:808;16721:1332;16163:1897;;;;;;;;;;;;;;;:::o;19725:784::-;19942:4;19959:21;;:::i;:::-;19991:18;20044:57;20061:8;20071:7;20080:6;20088;20096:4;20044:16;:57::i;:::-;20020:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20117:7;:14;;;20112:33;;20140:5;20133:12;;;;;;20112:33;20156:16;20227:7;;;;;;;;;;;20213:21;;:10;:21;;;:118;;20330:1;20213:118;;;20298:11;20271:14;19271:5;20255:30;;;20254:56;20213:118;20175:7;:34;;;:171;20156:190;;20364:7;:19;20372:10;20364:19;;;;;;;;;;;;20357:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20408:10;20399:20;;;;;;;;;;20430:49;20448:6;20456;20464:8;20474:4;20430:17;:49::i;:::-;20497:4;20490:11;;;;;19725:784;;;;;;;;;:::o;18712:519::-;18888:18;18935:27;18909:53;;18926:5;18919:4;18910:13;;:6;:13;:21;;;;;;18909:53;18888:74;;19028:6;19015:10;19006:6;:19;:28;19003:66;;;19051:7;;;19003:66;19169:10;19141:24;;:38;;;;;;;;;;;19190:3;:12;;:33;19212:10;19203:6;:19;19190:33;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19190:33:0;18712:519;;;;;;:::o;18227:164::-;18371:11;18356:4;:27;18306:7;:19;18314:10;18306:19;;;;;;;;;;;:46;;;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18227:164;;:::o;26474:417::-;26673:7;26693:13;26750:8;26773:16;26804;26719:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26719:112:0;;;26709:123;;;;;;26693:139;;26850:33;26865:5;26872:2;26876;26880;26850:14;:33::i;:::-;26843:40;;;26474:417;;;;;;;;:::o;23597:987::-;23819:4;23836:21;;:::i;:::-;23868:18;23921:57;23938:8;23948:7;23957:6;23965;23973:4;23921:16;:57::i;:::-;23897:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23994:7;:14;;;23989:60;;24032:5;24025:12;;;;;;23989:60;24094:1;24062:7;:28;;;:33;;;;:83;;;;24130:15;24099:7;:28;;;:46;;;24062:83;24059:150;;;24192:5;24185:12;;;;;;24059:150;24219:16;24290:7;;;;;;;;;;;24276:21;;:10;:21;;;:123;;24398:1;24276:123;;;24366:11;24339:14;23135:5;24318:35;;;24317:61;24276:123;24238:7;:34;;;:176;24219:195;;24432:7;:19;24440:10;24432:19;;;;;;;;;;;;24425:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24485:10;24467:29;;;;;;;;;;24507:47;24525:7;24534:6;24542:8;24552:1;24507:17;:47::i;:::-;24572:4;24565:11;;;;;23597:987;;;;;;;;;:::o;88:28312::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://619413efc9f1bfc075ff600f5996975b820abf42bd0dd18fb303b23649b2993c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,413.2 | 1.2274 | $2,961.88 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.