| start T1, expires in rand(0,τ) timer, expires in round 1 |
| start T2, expires in rand(τ,2τ) timer, expires in round 2 |
| announFirst = (rand(0,1) ≤ γ) |
| CAID = −1 ID of the cluster aggregator of the node |
| while T1 NOT expired do |
| if receive ENC(announcement) AND (CAID = −1) then |
| CAID = ID of sender of announcement |
| end if |
| end while |
| T1 expired |
| if announFirst AND (CAID = −1) then |
| broadcast ENC(announcement); |
| CAID = ID of node itself; |
| else |
| broadcast ENC(dummy); |
| end if |
| while T2 NOT expired do |
| if receive ENC(announcement) AND (CAID = −1) then |
| CAID = ID of sender of announcement |
| end if |
| end while |
| T2 expired |
| if (NOT announFirst) AND (CAID = −1) then |
| broadcast ENC(announcement); |
| CAID = ID of node itself; |
| else |
| broadcast ENC(dummy); |
| end if |