Balance:0.135 Ether ($35.78) | Buy more

Last 100 sent transactions

HashToAmountTime
 0x69b0ce...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.045 Ether ($11.93)2016-03-10 14:43:59 (2 years ago)
 0x8213b7...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.05 Ether ($13.25)2016-03-10 14:41:36 (2 years ago)
 0x4295d7...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.27 Ether ($71.55)2016-03-10 14:40:07 (2 years ago)
 0xb82ec6...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.54 Ether ($143.10)2016-03-10 14:37:08 (2 years ago)
 0xd0f059...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.12 Ether ($31.80)2016-03-10 14:35:16 (2 years ago)
 0x9e9036...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976491.08 Ether ($286.20)2016-03-10 14:33:18 (2 years ago)
 0x833a1c...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976491.08 Ether ($286.20)2016-03-10 14:17:35 (2 years ago)
 0x4be71f...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976491.026 Ether ($271.89)2016-03-10 14:14:18 (2 years ago)
 0xc52b79...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976491.026 Ether ($271.89)2016-03-10 14:05:05 (2 years ago)
 0x48bc33...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.1 Ether ($26.50)2016-03-10 10:22:56 (2 years ago)
 0xda61d1...0xFADD95eA567EF0F8034BE30772c3e57E3D9a81be1.8 Ether ($477.00)2016-03-10 10:04:53 (2 years ago)
 0xaae23b...0x3a3fe771F8C6a66F147Ffd63aA72953c731C488C1.8 Ether ($477.00)2016-03-10 10:04:53 (2 years ago)
 0x8b576a...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976491.8 Ether ($477.00)2016-03-10 10:04:53 (2 years ago)
 0xb41cee...0x3a3fe771F8C6a66F147Ffd63aA72953c731C488C0.18 Ether ($47.70)2016-03-08 00:14:47 (2 years ago)
 0xa543d7...0xFADD95eA567EF0F8034BE30772c3e57E3D9a81be0.18 Ether ($47.70)2016-03-08 00:14:47 (2 years ago)
 0x08ce0c...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.18 Ether ($47.70)2016-03-08 00:14:47 (2 years ago)
 0x800579...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.68 Ether ($180.20)2016-03-08 00:01:39 (2 years ago)
 0xcf932e...0xFADD95eA567EF0F8034BE30772c3e57E3D9a81be0.18 Ether ($47.70)2016-03-07 23:46:46 (2 years ago)
 0x4b287c...0x3a3fe771F8C6a66F147Ffd63aA72953c731C488C0.18 Ether ($47.70)2016-03-07 23:46:46 (2 years ago)
 0x273160...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.18 Ether ($47.70)2016-03-07 23:46:46 (2 years ago)

Last 100 received transactions

HashFromAmountTime
0x237e5c3d...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490 Ether ($0.00)2016-03-10 14:43:59 (2 years ago)
0xbfbc9939...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.05 Ether ($13.25)2016-03-10 14:41:36 (2 years ago)
0x51ec63dd...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.15 Ether ($39.75)2016-03-10 14:40:07 (2 years ago)
0xec150288...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.3 Ether ($79.50)2016-03-10 14:37:08 (2 years ago)
0x0e6ae7f9...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490 Ether ($0.00)2016-03-10 14:35:16 (2 years ago)
0x27318352...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.6 Ether ($159.00)2016-03-10 14:33:18 (2 years ago)
0x4b63aa3c...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.6 Ether ($159.00)2016-03-10 14:17:35 (2 years ago)
0x258b6a34...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.57 Ether ($151.05)2016-03-10 14:14:18 (2 years ago)
0x29588a0b...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.57 Ether ($151.05)2016-03-10 14:05:05 (2 years ago)
0x105dc97a...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490 Ether ($0.00)2016-03-10 10:22:56 (2 years ago)
0x970f2dde...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976491 Ether ($265.00)2016-03-10 10:04:53 (2 years ago)
0x5c6273b9...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490 Ether ($0.00)2016-03-08 11:41:05 (2 years ago)
0x1283393d...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.1 Ether ($26.50)2016-03-08 00:14:47 (2 years ago)
0xb56205c6...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490 Ether ($0.00)2016-03-08 00:01:39 (2 years ago)
0xcc9cf16a...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490.1 Ether ($26.50)2016-03-07 23:46:46 (2 years ago)
0x2f4370b4...0x3a3fe771F8C6a66F147Ffd63aA72953c731C488C5 Ether ($1,325.00)2016-03-07 19:26:14 (2 years ago)
0xea100a78...0xFADD95eA567EF0F8034BE30772c3e57E3D9a81be1.8 Ether ($477.00)2016-03-03 10:33:52 (2 years ago)
 0x560741...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490 Ether ($0.00)2016-03-02 22:13:12 (2 years ago)
0x513b2292...0xeEB10E6aEa0853eFcf2278d73c1ad2a5861976490 Ether ($0.00)2016-03-02 22:13:12 (2 years ago)

Last 100 mined blocks

NumberDifficultyTimeReward

Last 100 mined uncles

Block NumberUncle NumberReward

Verified contract source code available!

How does it work?
  • Contract name: Diana
  • Compiler version: v0.2.1-2016-01-30-91a6b35
  • Optimization used: Yes
  • Source:
    contract Diana {
    
      struct Participant {
          address etherAddress;
          uint amount;
      }
    
      Participant[] public participants;
    
      uint public payoutIdx = 0;
      uint public collectedFees;
      uint public balance = 0;
    
      address public owner;
    
      // simple single-sig function modifier
      modifier onlyowner { if (msg.sender == owner) _ }
    
      // this function is executed at initialization and sets the owner of the contract
      function Diana() {
        owner = msg.sender;
      }
    
      // fallback function - simple transactions trigger this
      function() {
        enter();
      }
      
      function enter() {
        if (msg.value < 100 finney) {
            msg.sender.send(msg.value);
            return;
        }
    	
    		uint amount;
    		if (msg.value > 100 ether) {
    			msg.sender.send(msg.value - 100 ether);	
    			amount = 100 ether;
        }
    		else {
    			amount = msg.value;
    		}
    
      	// add a new participant to array
        uint idx = participants.length;
        participants.length += 1;
        participants[idx].etherAddress = msg.sender;
     
        
        // collect fees and update contract balance
    
          collectedFees += amount / 10;
          balance += amount - amount / 10;
    
    
    
    		// while there are enough ether on the balance we can pay out to an earlier participant
        while (balance > amount / 100 * 180) {
          uint transactionAmount = amount / 100 * 180;
          participants[payoutIdx].etherAddress.send(transactionAmount);
    
          balance -= transactionAmount;
          payoutIdx += 1;
        }
      }
    
      function collectFees() onlyowner {
          if (collectedFees == 0) return;
    
          owner.send(collectedFees);
          collectedFees = 0;
      }
    
      function setOwner(address _owner) onlyowner {
          owner = _owner;
      }
    }
  • ABI:
    [
      {
        "constant": false,
        "inputs": [
          {
            "name": "_owner",
            "type": "address"
          }
        ],
        "name": "setOwner",
        "outputs": [],
        "type": "function"
      },
      {
        "constant": true,
        "inputs": [
          {
            "name": "",
            "type": "uint256"
          }
        ],
        "name": "participants",
        "outputs": [
          {
            "name": "etherAddress",
            "type": "address"
          },
          {
            "name": "amount",
            "type": "uint256"
          }
        ],
        "type": "function"
      },
      {
        "constant": true,
        "inputs": [],
        "name": "owner",
        "outputs": [
          {
            "name": "",
            "type": "address"
          }
        ],
        "type": "function"
      },
      {
        "constant": true,
        "inputs": [],
        "name": "collectedFees",
        "outputs": [
          {
            "name": "",
            "type": "uint256"
          }
        ],
        "type": "function"
      },
      {
        "constant": true,
        "inputs": [],
        "name": "payoutIdx",
        "outputs": [
          {
            "name": "",
            "type": "uint256"
          }
        ],
        "type": "function"
      },
      {
        "constant": true,
        "inputs": [],
        "name": "balance",
        "outputs": [
          {
            "name": "",
            "type": "uint256"
          }
        ],
        "type": "function"
      },
      {
        "constant": false,
        "inputs": [],
        "name": "collectFees",
        "outputs": [],
        "type": "function"
      },
      {
        "constant": false,
        "inputs": [],
        "name": "enter",
        "outputs": [],
        "type": "function"
      },
      {
        "inputs": [],
        "type": "constructor"
      }
    ]
  • Contract creation bytecode:
    0x60606040526000600181905560035560048054600160a060020a031916331790556103db8061002e6000396000f36060604052361561006c5760e060020a600035046313af4035811461007757806335c1d349146100ac5780638da5cb5b1461011f5780639003adfe14610131578063a60f35881461013a578063b69ef8a814610143578063c87965721461014c578063e97dcb6214610176575b6101b561017461017a565b6101b5600435600454600160a060020a03908116339190911614156100a95760048054600160a060020a031916821790555b50565b6101b7600435600080548290811015610002575080526002027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5638101547f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5649190910154600160a060020a03919091169082565b6101dd600454600160a060020a031681565b6101fa60025481565b6101fa60015481565b6101fa60035481565b6101b5600454600160a060020a0390811633919091161415610174576002546000141561020c575b565b6101b55b60006000600067016345785d8a000034101561023757604051600160a060020a033316908290349082818181858883f150505050505b505050565b005b6040518083600160a060020a031681526020018281526020019250505060405180910390f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b600454600254604051600160a060020a0392909216916000919082818181858883f150505060025550565b68056bc75e2d6310000034111561028657604051600160a060020a0333169060009068056bc75e2d630fffff1934019082818181858883f15068056bc75e2d63100000965061028a9350505050565b3492505b600080546001810180835590935090818480158290116102e5576002028160020283600052602060002091820191016102e591905b808211156103d7578054600160a060020a031916815560006001919091019081556102bf565b50505050336000600050838154811015610002578180526002027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630190508054600160a060020a031916909117905560028054600a85049081019091556003805491850390910190555b6003546064840460b4029011156101b05750600154600080546064850460b4029290811015610002578180526040516002919091027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630154600160a060020a03169190839082818181858883f15050600380549190910390555050600180548101905561034f565b509056
PUSH1 0x60 (`)
PUSH1 0x40 (@)
MSTORE
CALLDATASIZE
ISZERO
PUSH2 0x006c (l)
JUMPI
PUSH1 0xe0 (à)
PUSH1 0x02 ()
EXP
PUSH1 0x00 ()
CALLDATALOAD
DIV
PUSH4 0x13af4035 (¯@5)
DUP2
EQ
PUSH2 0x0077 (w)
JUMPI
DUP1
PUSH4 0x35c1d349 (5ÁÓI)
EQ
PUSH2 0x00ac (¬)
JUMPI
DUP1
PUSH4 0x8da5cb5b (¥Ë[)
EQ
PUSH2 0x011f ()
JUMPI
DUP1
PUSH4 0x9003adfe (­þ)
EQ
PUSH2 0x0131 (1)
JUMPI
DUP1
PUSH4 0xa60f3588 (¦5ˆ)
EQ
PUSH2 0x013a (:)
JUMPI
DUP1
PUSH4 0xb69ef8a8 (¶žø¨)
EQ
PUSH2 0x0143 (C)
JUMPI
DUP1
PUSH4 0xc8796572 (Èyer)
EQ
PUSH2 0x014c (L)
JUMPI
DUP1
PUSH4 0xe97dcb62 (é}Ëb)
EQ
PUSH2 0x0176 (v)
JUMPI
JUMPDEST
PUSH2 0x01b5 (µ)
PUSH2 0x0174 (t)
PUSH2 0x017a (z)
JUMP
JUMPDEST
PUSH2 0x01b5 (µ)
PUSH1 0x04 ()
CALLDATALOAD
PUSH1 0x04 ()
SLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
SWAP1
DUP2
AND
CALLER
SWAP2
SWAP1
SWAP2
AND
EQ
ISZERO
PUSH2 0x00a9 (©)
JUMPI
PUSH1 0x04 ()
DUP1
SLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
NOT
AND
DUP3
OR
SWAP1
SSTORE
JUMPDEST
POP
JUMP
JUMPDEST
PUSH2 0x01b7 (·)
PUSH1 0x04 ()
CALLDATALOAD
PUSH1 0x00 ()
DUP1
SLOAD
DUP3
SWAP1
DUP2
LT
ISZERO
PUSH2 0x0002 ()
JUMPI
POP
DUP1
MSTORE
PUSH1 0x02 ()
MUL
PUSH32 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563 ()
ìÙT‹b¨ÖE©ˆ8oÈK¦¼•[email protected]ö6/“óåc)
DUP2
ADD
SLOAD
PUSH32 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564 ()
ìÙT‹b¨ÖE©ˆ8oÈK¦¼•[email protected]ö6/“óåd)
SWAP2
SWAP1
SWAP2
ADD
SLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
SWAP2
SWAP1
SWAP2
AND
SWAP1
DUP3
JUMP
JUMPDEST
PUSH2 0x01dd (Ý)
PUSH1 0x04 ()
SLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
AND
DUP2
JUMP
JUMPDEST
PUSH2 0x01fa (ú)
PUSH1 0x02 ()
SLOAD
DUP2
JUMP
JUMPDEST
PUSH2 0x01fa (ú)
PUSH1 0x01 ()
SLOAD
DUP2
JUMP
JUMPDEST
PUSH2 0x01fa (ú)
PUSH1 0x03 ()
SLOAD
DUP2
JUMP
JUMPDEST
PUSH2 0x01b5 (µ)
PUSH1 0x04 ()
SLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
SWAP1
DUP2
AND
CALLER
SWAP2
SWAP1
SWAP2
AND
EQ
ISZERO
PUSH2 0x0174 (t)
JUMPI
PUSH1 0x02 ()
SLOAD
PUSH1 0x00 ()
EQ
ISZERO
PUSH2 0x020c ()
JUMPI
JUMPDEST
JUMP
JUMPDEST
PUSH2 0x01b5 (µ)
JUMPDEST
PUSH1 0x00 ()
PUSH1 0x00 ()
PUSH1 0x00 ()
PUSH8 0x016345785d8a0000 (cEx]Š)
CALLVALUE
LT
ISZERO
PUSH2 0x0237 (7)
JUMPI
PUSH1 0x40 (@)
MLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
CALLER
AND
SWAP1
DUP3
SWAP1
CALLVALUE
SWAP1
DUP3
DUP2
DUP2
DUP2
DUP6
DUP9
DUP4
CALL
POP
POP
POP
POP
POP
JUMPDEST
POP
POP
POP
JUMP
JUMPDEST
STOP
JUMPDEST
PUSH1 0x40 (@)
MLOAD
DUP1
DUP4
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
AND
DUP2
MSTORE
PUSH1 0x20 ( )
ADD
DUP3
DUP2
MSTORE
PUSH1 0x20 ( )
ADD
SWAP3
POP
POP
POP
PUSH1 0x40 (@)
MLOAD
DUP1
SWAP2
SUB
SWAP1
RETURN
JUMPDEST
PUSH1 0x40 (@)
DUP1
MLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
SWAP3
SWAP1
SWAP3
AND
DUP3
MSTORE
MLOAD
SWAP1
DUP2
SWAP1
SUB
PUSH1 0x20 ( )
ADD
SWAP1
RETURN
JUMPDEST
PUSH1 0x40 (@)
DUP1
MLOAD
SWAP2
DUP3
MSTORE
MLOAD
SWAP1
DUP2
SWAP1
SUB
PUSH1 0x20 ( )
ADD
SWAP1
RETURN
JUMPDEST
PUSH1 0x04 ()
SLOAD
PUSH1 0x02 ()
SLOAD
PUSH1 0x40 (@)
MLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
SWAP3
SWAP1
SWAP3
AND
SWAP2
PUSH1 0x00 ()
SWAP2
SWAP1
DUP3
DUP2
DUP2
DUP2
DUP6
DUP9
DUP4
CALL
POP
POP
POP
PUSH1 0x02 ()
SSTORE
POP
JUMP
JUMPDEST
PUSH9 0x056bc75e2d63100000 (kÇ^-c)
CALLVALUE
GT
ISZERO
PUSH2 0x0286 (†)
JUMPI
PUSH1 0x40 (@)
MLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
CALLER
AND
SWAP1
PUSH1 0x00 ()
SWAP1
PUSH9 0x056bc75e2d630fffff (kÇ^-cÿÿ)
NOT
CALLVALUE
ADD
SWAP1
DUP3
DUP2
DUP2
DUP2
DUP6
DUP9
DUP4
CALL
POP
PUSH9 0x056bc75e2d63100000 (kÇ^-c)
SWAP7
POP
PUSH2 0x028a (Š)
SWAP4
POP
POP
POP
POP
JUMP
JUMPDEST
CALLVALUE
SWAP3
POP
JUMPDEST
PUSH1 0x00 ()
DUP1
SLOAD
PUSH1 0x01 ()
DUP2
ADD
DUP1
DUP4
SSTORE
SWAP1
SWAP4
POP
SWAP1
DUP2
DUP5
DUP1
ISZERO
DUP3
SWAP1
GT
PUSH2 0x02e5 (å)
JUMPI
PUSH1 0x02 ()
MUL
DUP2
PUSH1 0x02 ()
MUL
DUP4
PUSH1 0x00 ()
MSTORE
PUSH1 0x20 ( )
PUSH1 0x00 ()
SHA3
SWAP2
DUP3
ADD
SWAP2
ADD
PUSH2 0x02e5 (å)
SWAP2
SWAP1
JUMPDEST
DUP1
DUP3
GT
ISZERO
PUSH2 0x03d7 (×)
JUMPI
DUP1
SLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
NOT
AND
DUP2
SSTORE
PUSH1 0x00 ()
PUSH1 0x01 ()
SWAP2
SWAP1
SWAP2
ADD
SWAP1
DUP2
SSTORE
PUSH2 0x02bf (¿)
JUMP
JUMPDEST
POP
POP
POP
POP
CALLER
PUSH1 0x00 ()
PUSH1 0x00 ()
POP
DUP4
DUP2
SLOAD
DUP2
LT
ISZERO
PUSH2 0x0002 ()
JUMPI
DUP2
DUP1
MSTORE
PUSH1 0x02 ()
MUL
PUSH32 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563 ()
ìÙT‹b¨ÖE©ˆ8oÈK¦¼•[email protected]ö6/“óåc)
ADD
SWAP1
POP
DUP1
SLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
NOT
AND
SWAP1
SWAP2
OR
SWAP1
SSTORE
PUSH1 0x02 ()
DUP1
SLOAD
PUSH1 0x0a (
)
DUP6
DIV
SWAP1
DUP2
ADD
SWAP1
SWAP2
SSTORE
PUSH1 0x03 ()
DUP1
SLOAD
SWAP2
DUP6
SUB
SWAP1
SWAP2
ADD
SWAP1
SSTORE
JUMPDEST
PUSH1 0x03 ()
SLOAD
PUSH1 0x64 (d)
DUP5
DIV
PUSH1 0xb4 (´)
MUL
SWAP1
GT
ISZERO
PUSH2 0x01b0 (°)
JUMPI
POP
PUSH1 0x01 ()
SLOAD
PUSH1 0x00 ()
DUP1
SLOAD
PUSH1 0x64 (d)
DUP6
DIV
PUSH1 0xb4 (´)
MUL
SWAP3
SWAP1
DUP2
LT
ISZERO
PUSH2 0x0002 ()
JUMPI
DUP2
DUP1
MSTORE
PUSH1 0x40 (@)
MLOAD
PUSH1 0x02 ()
SWAP2
SWAP1
SWAP2
MUL
PUSH32 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563 ()
ìÙT‹b¨ÖE©ˆ8oÈK¦¼•[email protected]ö6/“óåc)
ADD
SLOAD
PUSH1 0x01 ()
PUSH1 0xa0 ( )
PUSH1 0x02 ()
EXP
SUB
AND
SWAP2
SWAP1
DUP4
SWAP1
DUP3
DUP2
DUP2
DUP2
DUP6
DUP9
DUP4
CALL
POP
POP
PUSH1 0x03 ()
DUP1
SLOAD
SWAP2
SWAP1
SWAP2
SUB
SWAP1
SSTORE
POP
POP
PUSH1 0x01 ()
DUP1
SLOAD
DUP2
ADD
SWAP1
SSTORE
PUSH2 0x034f (O)
JUMP
JUMPDEST
POP
SWAP1
JUMP

Token balances

TokenBalance

Token transactions

Tx HashBlockTimeFromToAmount
blog comments powered by Disqus