Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Wallet
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-06-03 */ // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.4.24; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 _a, uint256 _b) internal pure returns (uint256) { // assert(_b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = _a / _b; // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold return _a / _b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } // File: contracts/Interfaces/IWallet.sol pragma solidity ^0.4.24; /** * @title Wallet interface. * @dev The interface of the SC that own the assets. */ interface IWallet { function transferAssetTo( address _assetAddress, address _to, uint _amount ) external payable returns (bool); function withdrawAsset( address _assetAddress, uint _amount ) external returns (bool); function setTokenSwapAllowance ( address _tokenSwapAddress, bool _allowance ) external returns(bool); } // File: contracts/Interfaces/IBadERC20.sol pragma solidity ^0.4.24; /** * @title Bad formed ERC20 token interface. * @dev The interface of the a bad formed ERC20 token. */ interface IBadERC20 { function transfer(address to, uint256 value) external; function approve(address spender, uint256 value) external; function transferFrom( address from, address to, uint256 value ) external; function totalSupply() external view returns (uint256); function balanceOf( address who ) external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); event Transfer( address indexed from, address indexed to, uint256 value ); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/Utils/Ownable.sol pragma solidity ^0.4.24; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner, "msg.sender not owner"); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0), "_newOwner == 0"); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: contracts/Utils/Destructible.sol pragma solidity ^0.4.24; /** * @title Destructible * @dev Base contract that can be destroyed by owner. All funds in contract will be sent to the owner. */ contract Destructible is Ownable { /** * @dev Transfers the current balance to the owner and terminates the contract. */ function destroy() public onlyOwner { selfdestruct(owner); } function destroyAndSend(address _recipient) public onlyOwner { selfdestruct(_recipient); } } // File: contracts/Utils/SafeTransfer.sol pragma solidity ^0.4.24; /** * @title SafeTransfer * @dev Transfer Bad ERC20 tokens */ library SafeTransfer { /** * @dev Wrapping the ERC20 transferFrom function to avoid missing returns. * @param _tokenAddress The address of bad formed ERC20 token. * @param _from Transfer sender. * @param _to Transfer receiver. * @param _value Amount to be transfered. * @return Success of the safeTransferFrom. */ function _safeTransferFrom( address _tokenAddress, address _from, address _to, uint256 _value ) internal returns (bool result) { IBadERC20(_tokenAddress).transferFrom(_from, _to, _value); assembly { switch returndatasize() case 0 { // This is our BadToken result := not(0) // result is true } case 32 { // This is our GoodToken returndatacopy(0, 0, 32) result := mload(0) // result == returndata of external call } default { // This is not an ERC20 token revert(0, 0) } } } /** * @dev Wrapping the ERC20 transfer function to avoid missing returns. * @param _tokenAddress The address of bad formed ERC20 token. * @param _to Transfer receiver. * @param _amount Amount to be transfered. * @return Success of the safeTransfer. */ function _safeTransfer( address _tokenAddress, address _to, uint _amount ) internal returns (bool result) { IBadERC20(_tokenAddress).transfer(_to, _amount); assembly { switch returndatasize() case 0 { // This is our BadToken result := not(0) // result is true } case 32 { // This is our GoodToken returndatacopy(0, 0, 32) result := mload(0) // result == returndata of external call } default { // This is not an ERC20 token revert(0, 0) } } } } // File: contracts/Wallet.sol pragma solidity ^0.4.24; /** * @title Wallet. * The wallet that will manage the TokenSwap contract liquidity. */ contract Wallet is IWallet, Destructible { using SafeMath for uint; mapping (address => bool) public isTokenSwapAllowed; event LogTransferAssetTo( address indexed _assetAddress, address indexed _to, uint _amount ); event LogWithdrawAsset( address indexed _assetAddress, address indexed _from, uint _amount ); event LogSetTokenSwapAllowance( address indexed _tokenSwapAddress, bool _allowance ); constructor(address[] memory _tokenSwapContractsAddress) public { for (uint i = 0; i < _tokenSwapContractsAddress.length; i++) { isTokenSwapAllowed[_tokenSwapContractsAddress[i]] = true; } } /** * @dev Throws if called by any TokenSwap not allowed. */ modifier onlyTokenSwapAllowed() { require( isTokenSwapAllowed[msg.sender], "msg.sender is not one of the allowed TokenSwap smart contract" ); _; } /** * @dev Fallback function. * So the contract is able to receive ETH. */ function() external payable {} /** * @dev Transfer an asset from this wallet to a receiver. * This function can be call only from allowed TokenSwap smart contracts. * @param _assetAddress The asset address. * @param _to The asset receiver. * @param _amount The amount to be received. */ function transferAssetTo( address _assetAddress, address _to, uint _amount ) external payable onlyTokenSwapAllowed returns (bool) { require(_to != address(0), "_to == 0"); if (isETH(_assetAddress)) { require(address(this).balance >= _amount, "ETH balance not sufficient"); _to.transfer(_amount); } else { require( IBadERC20(_assetAddress).balanceOf(address(this)) >= _amount, "Token balance not sufficient" ); require( SafeTransfer._safeTransfer( _assetAddress, _to, _amount ), "Token transfer failed" ); } emit LogTransferAssetTo(_assetAddress, _to, _amount); return true; } /** * @dev Asset withdraw. * This function can be call only from the owner of the Wallet smart contract. * @param _assetAddress The asset address. * @param _amount The amount to be received. */ function withdrawAsset( address _assetAddress, uint _amount ) external onlyOwner returns(bool) { if (isETH(_assetAddress)) { require( address(this).balance >= _amount, "ETH balance not sufficient" ); msg.sender.transfer(_amount); } else { require( IBadERC20(_assetAddress).balanceOf(address(this)) >= _amount, "Token balance not sufficient" ); require( SafeTransfer._safeTransfer( _assetAddress, msg.sender, _amount ), "Token transfer failed" ); } emit LogWithdrawAsset(_assetAddress, msg.sender, _amount); return true; } /** * @dev Add or remove Token Swap allowance. * @param _tokenSwapAddress The token swap sc address. * @param _allowance The allowance TRUE or FALSE. */ function setTokenSwapAllowance ( address _tokenSwapAddress, bool _allowance ) external onlyOwner returns(bool) { emit LogSetTokenSwapAllowance( _tokenSwapAddress, _allowance ); isTokenSwapAllowed[_tokenSwapAddress] = _allowance; return true; } /** * @dev Understand if the token is ETH or not. * @param _tokenAddress The token address to be checked. */ function isETH(address _tokenAddress) public pure returns (bool) { return _tokenAddress == 0; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_assetAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawAsset","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isTokenSwapAllowed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenSwapAddress","type":"address"},{"name":"_allowance","type":"bool"}],"name":"setTokenSwapAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_assetAddress","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferAssetTo","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"destroyAndSend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenAddress","type":"address"}],"name":"isETH","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"inputs":[{"name":"_tokenSwapContractsAddress","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_assetAddress","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"LogTransferAssetTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_assetAddress","type":"address"},{"indexed":true,"name":"_from","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"LogWithdrawAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenSwapAddress","type":"address"},{"indexed":false,"name":"_allowance","type":"bool"}],"name":"LogSetTokenSwapAllowance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610cc4380380610cc483398101604052805160008054600160a060020a031916331781559101905b8151811015610092576001806000848481518110151561005857fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560010161003c565b5050610c21806100a36000396000f3006080604052600436106100a35763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166338e4f06481146100a557806361acdf70146100dd578063715018a6146100fe57806383197ef0146101135780638da5cb5b14610128578063df5c833814610159578063f2fde38b1461017f578063f46e62f0146101a0578063f5074f41146101bd578063f70a2508146101de575b005b3480156100b157600080fd5b506100c9600160a060020a03600435166024356101ff565b604080519115158252519081900360200190f35b3480156100e957600080fd5b506100c9600160a060020a036004351661047a565b34801561010a57600080fd5b506100a361048f565b34801561011f57600080fd5b506100a3610534565b34801561013457600080fd5b5061013d610592565b60408051600160a060020a039092168252519081900360200190f35b34801561016557600080fd5b506100c9600160a060020a036004351660243515156105a1565b34801561018b57600080fd5b506100a3600160a060020a0360043516610663565b6100c9600160a060020a03600435811690602435166044356106bf565b3480156101c957600080fd5b506100a3600160a060020a03600435166109ed565b3480156101ea57600080fd5b506100c9600160a060020a0360043516610a49565b60008054600160a060020a03163314610250576040805160e560020a62461bcd0281526020600482015260146024820152600080516020610bd6833981519152604482015290519081900360640190fd5b61025983610a49565b156102ea5730318211156102b7576040805160e560020a62461bcd02815260206004820152601a60248201527f4554482062616c616e6365206e6f742073756666696369656e74000000000000604482015290519081900360640190fd5b604051339083156108fc029084906000818181858888f193505050501580156102e4573d6000803e3d6000fd5b50610431565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290518391600160a060020a038616916370a08231916024808201926020929091908290030181600087803b15801561034e57600080fd5b505af1158015610362573d6000803e3d6000fd5b505050506040513d602081101561037857600080fd5b505110156103d0576040805160e560020a62461bcd02815260206004820152601c60248201527f546f6b656e2062616c616e6365206e6f742073756666696369656e7400000000604482015290519081900360640190fd5b6103db833384610a56565b1515610431576040805160e560020a62461bcd02815260206004820152601560248201527f546f6b656e207472616e73666572206661696c65640000000000000000000000604482015290519081900360640190fd5b6040805183815290513391600160a060020a038616917f9eee58f2a65397b5d83268766f2ef5bcdae50480bdc3e350b0e0b81732555a399181900360200190a350600192915050565b60016020526000908152604090205460ff1681565b600054600160a060020a031633146104df576040805160e560020a62461bcd0281526020600482015260146024820152600080516020610bd6833981519152604482015290519081900360640190fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a03163314610584576040805160e560020a62461bcd0281526020600482015260146024820152600080516020610bd6833981519152604482015290519081900360640190fd5b600054600160a060020a0316ff5b600054600160a060020a031681565b60008054600160a060020a031633146105f2576040805160e560020a62461bcd0281526020600482015260146024820152600080516020610bd6833981519152604482015290519081900360640190fd5b6040805183151581529051600160a060020a038516917fbb30081a0ed5b8b57574d10de11d818e723dd006e844f87c9eab2f3ef44f3f3e919081900360200190a250600160a060020a0382166000908152600160208190526040909120805483151560ff1990911617905592915050565b600054600160a060020a031633146106b3576040805160e560020a62461bcd0281526020600482015260146024820152600080516020610bd6833981519152604482015290519081900360640190fd5b6106bc81610b0d565b50565b3360009081526001602052604081205460ff16151561074e576040805160e560020a62461bcd02815260206004820152603d60248201527f6d73672e73656e646572206973206e6f74206f6e65206f662074686520616c6c60448201527f6f77656420546f6b656e5377617020736d61727420636f6e7472616374000000606482015290519081900360840190fd5b600160a060020a03831615156107ae576040805160e560020a62461bcd02815260206004820152600860248201527f5f746f203d3d2030000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6107b784610a49565b15610851573031821115610815576040805160e560020a62461bcd02815260206004820152601a60248201527f4554482062616c616e6365206e6f742073756666696369656e74000000000000604482015290519081900360640190fd5b604051600160a060020a0384169083156108fc029084906000818181858888f1935050505015801561084b573d6000803e3d6000fd5b50610998565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290518391600160a060020a038716916370a08231916024808201926020929091908290030181600087803b1580156108b557600080fd5b505af11580156108c9573d6000803e3d6000fd5b505050506040513d60208110156108df57600080fd5b50511015610937576040805160e560020a62461bcd02815260206004820152601c60248201527f546f6b656e2062616c616e6365206e6f742073756666696369656e7400000000604482015290519081900360640190fd5b610942848484610a56565b1515610998576040805160e560020a62461bcd02815260206004820152601560248201527f546f6b656e207472616e73666572206661696c65640000000000000000000000604482015290519081900360640190fd5b82600160a060020a031684600160a060020a03167fbf74501c3ae032b3e21c87ef8918787f8eabeeb62dc12152070f52fd8d443775846040518082815260200191505060405180910390a35060019392505050565b600054600160a060020a03163314610a3d576040805160e560020a62461bcd0281526020600482015260146024820152600080516020610bd6833981519152604482015290519081900360640190fd5b80600160a060020a0316ff5b600160a060020a03161590565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03848116600483015260248201849052915160009286169163a9059cbb916044808301928692919082900301818387803b158015610ac157600080fd5b505af1158015610ad5573d6000803e3d6000fd5b505050503d60008114610aef5760208114610af957600080fd5b6000199150610b05565b60206000803e60005191505b509392505050565b600160a060020a0381161515610b6d576040805160e560020a62461bcd02815260206004820152600e60248201527f5f6e65774f776e6572203d3d2030000000000000000000000000000000000000604482015290519081900360640190fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905556006d73672e73656e646572206e6f74206f776e6572000000000000000000000000a165627a7a72305820d0103a715da00c447ddee1f9a9e340b0c6b5e7379cf6820a7f972c525b05f4fc002900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
7623:3791:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9964:725;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9964:725:0;-1:-1:-1;;;;;9964:725:0;;;;;;;;;;;;;;;;;;;;;;;;;7699:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7699:51:0;-1:-1:-1;;;;;7699:51:0;;;;;4064:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4064:114:0;;;;5140:68;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5140:68:0;;;;3245:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3245:20:0;;;;;;;;-1:-1:-1;;;;;3245:20:0;;;;;;;;;;;;;;10867:293;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10867:293:0;-1:-1:-1;;;;;10867:293:0;;;;;;;;;4346:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4346:105:0;-1:-1:-1;;;;;4346:105:0;;;;;8972:769;;-1:-1:-1;;;;;8972:769:0;;;;;;;;;;;;5214:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5214:98:0;-1:-1:-1;;;;;5214:98:0;;;;;11290:121;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11290:121:0;-1:-1:-1;;;;;11290:121:0;;;;;9964:725;10081:4;3748:5;;-1:-1:-1;;;;;3748:5:0;3734:10;:19;3726:52;;;;;-1:-1:-1;;;;;3726:52:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3726:52:0;;;;;;;;;;;;;;;10101:20;10107:13;10101:5;:20::i;:::-;10097:505;;;10158:4;10150:21;:32;-1:-1:-1;10150:32:0;10132:98;;;;;-1:-1:-1;;;;;10132:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10239:28;;:10;;:28;;;;;10259:7;;10239:28;;;;10259:7;10239:10;:28;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10239:28:0;10097:505;;;10308:49;;;;;;10351:4;10308:49;;;;;;10361:7;;-1:-1:-1;;;;;10308:34:0;;;;;:49;;;;;;;;;;;;;;;-1:-1:-1;10308:34:0;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;10308:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10308:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10308:49:0;:60;;10290:128;;;;;-1:-1:-1;;;;;10290:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10445:106;10484:13;10510:10;10533:7;10445:26;:106::i;:::-;10427:167;;;;;;;-1:-1:-1;;;;;10427:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10613:52;;;;;;;;10645:10;;-1:-1:-1;;;;;10613:52:0;;;;;;;;;;;;-1:-1:-1;10679:4:0;9964:725;;;;:::o;7699:51::-;;;;;;;;;;;;;;;:::o;4064:114::-;3748:5;;-1:-1:-1;;;;;3748:5:0;3734:10;:19;3726:52;;;;;-1:-1:-1;;;;;3726:52:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3726:52:0;;;;;;;;;;;;;;;4141:5;;;4122:25;;-1:-1:-1;;;;;4141:5:0;;;;4122:25;;;4170:1;4154:18;;-1:-1:-1;;4154:18:0;;;4064:114::o;5140:68::-;3748:5;;-1:-1:-1;;;;;3748:5:0;3734:10;:19;3726:52;;;;;-1:-1:-1;;;;;3726:52:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3726:52:0;;;;;;;;;;;;;;;5196:5;;-1:-1:-1;;;;;5196:5:0;5183:19;3245:20;;;-1:-1:-1;;;;;3245:20:0;;:::o;10867:293::-;10985:4;3748:5;;-1:-1:-1;;;;;3748:5:0;3734:10;:19;3726:52;;;;;-1:-1:-1;;;;;3726:52:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3726:52:0;;;;;;;;;;;;;;;11003:76;;;;;;;;;;-1:-1:-1;;;;;11003:76:0;;;;;;;;;;;;;-1:-1:-1;;;;;;11086:37:0;;;;;;:18;:37;;;;;;;;:50;;;;;-1:-1:-1;;11086:50:0;;;;;;10867:293;;;;:::o;4346:105::-;3748:5;;-1:-1:-1;;;;;3748:5:0;3734:10;:19;3726:52;;;;;-1:-1:-1;;;;;3726:52:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3726:52:0;;;;;;;;;;;;;;;4416:29;4435:9;4416:18;:29::i;:::-;4346:105;:::o;8972:769::-;8453:10;9134:4;8434:30;;;:18;:30;;;;;;;;8418:125;;;;;;;-1:-1:-1;;;;;8418:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9158:17:0;;;;9150:38;;;;;-1:-1:-1;;;;;9150:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9199:20;9205:13;9199:5;:20::i;:::-;9195:464;;;9246:4;9238:21;:32;-1:-1:-1;9238:32:0;9230:71;;;;;-1:-1:-1;;;;;9230:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9310:21;;-1:-1:-1;;;;;9310:12:0;;;:21;;;;;9323:7;;9310:21;;;;9323:7;9310:12;:21;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9310:21:0;9195:464;;;9372:49;;;;;;9415:4;9372:49;;;;;;9425:7;;-1:-1:-1;;;;;9372:34:0;;;;;:49;;;;;;;;;;;;;;;-1:-1:-1;9372:34:0;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;9372:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9372:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9372:49:0;:60;;9354:128;;;;;-1:-1:-1;;;;;9354:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9509:99;9548:13;9574:3;9590:7;9509:26;:99::i;:::-;9491:160;;;;;;;-1:-1:-1;;;;;9491:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9704:3;-1:-1:-1;;;;;9670:47:0;9689:13;-1:-1:-1;;;;;9670:47:0;;9709:7;9670:47;;;;;;;;;;;;;;;;;;-1:-1:-1;9731:4:0;8972:769;;;;;:::o;5214:98::-;3748:5;;-1:-1:-1;;;;;3748:5:0;3734:10;:19;3726:52;;;;;-1:-1:-1;;;;;3726:52:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3726:52:0;;;;;;;;;;;;;;;5295:10;-1:-1:-1;;;;;5282:24:0;;11290:121;-1:-1:-1;;;;;11387:18:0;;;11290:121::o;6791:659::-;6935:47;;;;;;-1:-1:-1;;;;;6935:47:0;;;;;;;;;;;;;;;6912:11;;6935:33;;;;;:47;;;;;6912:11;;6935:47;;;;;;;6912:11;6935:33;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;6935:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6935:47:0;;;;7016:16;7045:1;7040:117;;;;7170:2;7165:175;;;;7427:1;7424;7417:12;7040:117;-1:-1:-1;;7113:6:0;-1:-1:-1;7040:117:0;;7165:175;7250:2;7247:1;7244;7229:24;7279:1;7273:8;7263:18;;7009:429;;7000:445;;;;;:::o;4592:193::-;-1:-1:-1;;;;;4663:23:0;;;;4655:50;;;;;-1:-1:-1;;;;;4655:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4738:5;;;4717:38;;-1:-1:-1;;;;;4717:38:0;;;;4738:5;;;4717:38;;;4762:5;:17;;-1:-1:-1;;4762:17:0;-1:-1:-1;;;;;4762:17:0;;;;;;;;;;4592:193::o
Swarm Source
bzzr://d0103a715da00c447ddee1f9a9e340b0c6b5e7379cf6820a7f972c525b05f4fc
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.