ETH Price: $4,453.70 (-4.86%)

Transaction Decoder

Block:
4873870 at Jan-08-2018 09:52:36 AM +UTC
Transaction Fee:
0.03100576 ETH $138.09
Gas Used:
775,144 Gas / 40 Gwei

Emitted Events:

42 0x8322c7e7c14b57ff85947f28381421692a1cf267.0x4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef( 0x4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef, 0x000000000000000000000000c9c6f10201ee382220132447234f924c1bd2161a, 0x0000000000000000000000000000000000000000000000000000000000000104 )
43 TelcoinSaleKYCEscrow.Rejected( participant=0xae0d6163e7b414cf185fb9af0e748d975c1482f5 )
44 TelcoinSaleKYCEscrow.Rejected( participant=0x663dae01d7251eaa333c12282bcaa6cabc9b9b8c )
45 TelcoinSaleKYCEscrow.Rejected( participant=0x2b8cf6d0f39c260b6d023112964909b2c9ed40e7 )
46 TelcoinSaleKYCEscrow.Rejected( participant=0x30acca7d93232b6249a43d25081f5f8b7c4e538b )
47 TelcoinSaleKYCEscrow.Rejected( participant=0xc1ae1fb188761683225f24469b74b2fb492b4b01 )
48 TelcoinSaleKYCEscrow.Rejected( participant=0x45991243a97b3768da975432250129f30dbf272d )
49 TelcoinSaleKYCEscrow.Rejected( participant=0x2b830731504812ca2ffad1c26cb0d3b30edebd84 )
50 TelcoinSaleKYCEscrow.Rejected( participant=0xdff168521e01cf2c5d827ddc645ab7c7277547cf )
51 TelcoinSaleKYCEscrow.Rejected( participant=0xa1ffbccb2e306007d7f801bc90d6000a780c465b )
52 TelcoinSaleKYCEscrow.Rejected( participant=0xbad6c7d5e7e3fd214ab08db5f4f79c5ca1c321d1 )
53 TelcoinSaleKYCEscrow.Rejected( participant=0x0387c94efe8d28b79a5b3bd4c2ec0efccf734cec )
54 TelcoinSaleKYCEscrow.Rejected( participant=0xa15c3d561afc43f7a1542342fea3aa6aa9c9494f )
55 TelcoinSaleKYCEscrow.Rejected( participant=0x55220da403ba8f6896006b6312efe37687ff9686 )
56 TelcoinSaleKYCEscrow.Rejected( participant=0x9b075e4fb2e7a12accbb2df0d835517c9c9397b1 )
57 TelcoinSaleKYCEscrow.Rejected( participant=0x2d09ff39f0017077c41954ad01883bec1c12769e )
58 TelcoinSaleKYCEscrow.Rejected( participant=0xc85bd5db02aa5caa667c3d91c86c842ae52c73d5 )
59 TelcoinSaleKYCEscrow.Rejected( participant=0xdd6685e913c9a8e95c17091e03f0d642b0b65fcf )
60 TelcoinSaleKYCEscrow.Rejected( participant=0x8364c8b38f8a6412fe101896f62a9749cffbb2b2 )
61 TelcoinSaleKYCEscrow.Rejected( participant=0xc6a8be456d39abdb9c7d9c8a15d44f5fd74ba6a6 )
62 TelcoinSaleKYCEscrow.Rejected( participant=0x17821d20c75a3ac2d36680f91e56d6a492d3dbc8 )
63 TelcoinSaleKYCEscrow.Rejected( participant=0xd64e9ca3d291b7796a56e3aa48cc59ab6add84a2 )
64 TelcoinSaleKYCEscrow.Rejected( participant=0xf00fbac92465c3cf0473c12fe0fcc4c10c15882f )
65 TelcoinSaleKYCEscrow.Rejected( participant=0xf84cb2a05992a9cb92681861570edceee3781b4f )
66 TelcoinSaleKYCEscrow.Rejected( participant=0xa1f83d98c5611d2a5190541184054d1bc140df91 )
67 TelcoinSaleKYCEscrow.Rejected( participant=0x5fe31bb69592c7d5c3b2dd158cc5ef1c39e93b25 )
68 TelcoinSaleKYCEscrow.Rejected( participant=0xb206298b15885923c61018b1f268012c8eecd382 )
69 TelcoinSaleKYCEscrow.Rejected( participant=0xae09df06ddaa6ea05739bb2ec73f8ee690489a9e )
70 TelcoinSaleKYCEscrow.Rejected( participant=0xe9be00a73af16c25ea16b03bf5a30f4050fbd588 )
71 TelcoinSaleKYCEscrow.Rejected( participant=0x9bb4a00ee14e042fcabd0887459605992b43dc13 )
72 TelcoinSaleKYCEscrow.Rejected( participant=0x48cc2e043a030b6288b1c40ac9c518759bcc4ce8 )
73 TelcoinSaleKYCEscrow.Rejected( participant=0x5a39ab2c2d3da753ce124bbfd64b2ba0e66d6fe1 )
74 TelcoinSaleKYCEscrow.Rejected( participant=0x822a0f34715e02af55db2b2659c29e728825b297 )
75 TelcoinSaleKYCEscrow.Rejected( participant=0x006e963ec9496ef693d454ebc3973d8314d946be )
76 TelcoinSaleKYCEscrow.Rejected( participant=0xc07266200ab51f788ef1f3ad9cf8a0955b47e279 )
77 TelcoinSaleKYCEscrow.Rejected( participant=0x378803d1b0b2ceeb2bb83fa713be02f509b877ab )
78 TelcoinSaleKYCEscrow.Rejected( participant=0x021855a73ed2fc1ef650cae86f372d159f0334b9 )
79 TelcoinSaleKYCEscrow.Rejected( participant=0x9ff1240fc9c32822bfd07bfb71f40cbf5b040d9a )
80 TelcoinSaleKYCEscrow.Rejected( participant=0x7df43bef6987b94318340a49fada20451f78ccde )
81 TelcoinSaleKYCEscrow.Rejected( participant=0xb461f3a8fa6141defd6d5408262aa061dae23e69 )
82 TelcoinSaleKYCEscrow.Rejected( participant=0x1eadb4b9c47b484e5abf8ae7707fe9854d653369 )
83 TelcoinSaleKYCEscrow.Rejected( participant=0x6230148f24fde61b9c00c182b1fb71d572ef1893 )
84 TelcoinSaleKYCEscrow.Rejected( participant=0x89bb10974d6d76e545619055789e56a2fdafeb51 )
85 TelcoinSaleKYCEscrow.Rejected( participant=0x9aeda98370db8b2d44ab45f86518b7c734d42ceb )
86 TelcoinSaleKYCEscrow.Rejected( participant=0xc1af025c5fff49f4f0129d5770bbe9d94e40bbd9 )
87 TelcoinSaleKYCEscrow.Rejected( participant=0x9be07966f29f67b3e9483360edf7c90093c9fe7e )
88 TelcoinSaleKYCEscrow.Rejected( participant=0x6a753ace76771de6a90cd4dba83b84f09ed0635a )
89 TelcoinSaleKYCEscrow.Rejected( participant=0x11eea9c4aee58afc3b0edb892c5a98b09d282fe9 )
90 TelcoinSaleKYCEscrow.Rejected( participant=0x1d0dc3474a331d0be8ee3fb7706008cd56614ff0 )
91 TelcoinSaleKYCEscrow.Rejected( participant=0x2a8cde14bc58aef02a291e49ef22ee735258d79c )
92 TelcoinSaleKYCEscrow.Rejected( participant=0x0dfe0bc81515ca450c5fe0cf4bf3561f11b25caa )
93 TelcoinSaleKYCEscrow.Rejected( participant=0xadd2bbfb6e3afa8b2b6e5b0440ed0c238251461e )
94 TelcoinSaleKYCEscrow.Rejected( participant=0xc6dcb8d3ae559a309c4e8e2c034c4d07bcabcfc1 )
95 TelcoinSaleKYCEscrow.Rejected( participant=0xaf10d393d224f94903dcc267697307fa7bcd17fe )
96 TelcoinSaleKYCEscrow.Rejected( participant=0x32880cc2d775992f39ce34b05e2bb9d973e708b2 )
97 TelcoinSaleKYCEscrow.Rejected( participant=0xc25d2aaf89c210ea565146fbeab166872646f9a1 )
98 TelcoinSaleKYCEscrow.Rejected( participant=0xc57ea67750ded06a98763d5251f062785eabf8f6 )
99 TelcoinSaleKYCEscrow.Rejected( participant=0x8ba0caad13a0a8f02397b165473d69addfae8294 )
100 TelcoinSaleKYCEscrow.Rejected( participant=0x276afb07bc382ed1088522ac4d0db0a57cffb816 )
101 TelcoinSaleKYCEscrow.Rejected( participant=0x7f0e21b46b1109e05d149e107880039c60d191ec )
102 TelcoinSaleKYCEscrow.Rejected( participant=0x25814b6db3d4552a239ec916ba10ebe1d04053e7 )
103 TelcoinSaleKYCEscrow.Rejected( participant=0x3b9a70072b474b72a2373715f51b09105b1e81d9 )
104 TelcoinSaleKYCEscrow.Rejected( participant=0x896587c9a2e8dd1025449af611897923a7980c3f )
105 TelcoinSaleKYCEscrow.Rejected( participant=0x5ab33bb522fa2e77986d98f77a1a0103b46583a7 )
106 TelcoinSaleKYCEscrow.Rejected( participant=0x193bfa775654dc567b14a4329cf15f0ba1c71968 )
107 TelcoinSaleKYCEscrow.Rejected( participant=0xce66408c839d38057ab0b3082dd2da7c1d4bc272 )
108 TelcoinSaleKYCEscrow.Rejected( participant=0x4ae34dcdc9baf43527989c3948a0f7f6f021de1f )
109 TelcoinSaleKYCEscrow.Rejected( participant=0xe14986ed27fdca9aa5ae77c0a542a9450f378076 )
110 TelcoinSaleKYCEscrow.Rejected( participant=0x91267af311cfcf85e181e2bb97ef69bc5fed0453 )
111 TelcoinSaleKYCEscrow.Rejected( participant=0xbc30d3571b425a1b29ed23078f888712b9f12eb2 )
112 TelcoinSaleKYCEscrow.Rejected( participant=0x5c663978745c53346176d8a8b0326aa26275622f )
113 TelcoinSaleKYCEscrow.Rejected( participant=0x5511115789f204ac883ee1f7423c171948c25de2 )
114 TelcoinSaleKYCEscrow.Rejected( participant=0x6b7a7196fb879ab4e3d738eb72750d25bc66ba30 )
115 TelcoinSaleKYCEscrow.Rejected( participant=0x416299aade6443e6f6e8ab67126e65a7f606eef5 )
116 TelcoinSaleKYCEscrow.Rejected( participant=0x8d22bf695e7dd1d7b56968d5102f9a353aa214ef )
117 TelcoinSaleKYCEscrow.Rejected( participant=0x4976b32b1b9f3a1779815b9e6113468faabbfa94 )
118 TelcoinSaleKYCEscrow.Rejected( participant=0x794e25f2a2c64bf3a7c4f260328b68add6102f2c )
119 TelcoinSaleKYCEscrow.Rejected( participant=0xe8ad7492e766d7669673afac0915ef08e4a777c6 )
120 TelcoinSaleKYCEscrow.Rejected( participant=0x94be8c3aab8fdab5c1ab4c8301fa1ff661666541 )
121 TelcoinSaleKYCEscrow.Rejected( participant=0x637d6c49f6d40078e93c64c1833acb634567b1b2 )
122 TelcoinSaleKYCEscrow.Rejected( participant=0x0a44e08dac96a331136b4819cc5d84b4b44b55c2 )
123 TelcoinSaleKYCEscrow.Rejected( participant=0xc277eaeed9cb6b171878da2b6509e6b534e70443 )
124 TelcoinSaleKYCEscrow.Rejected( participant=0x35b312e4f3159f2321f56c2a363f5aa228b158de )
125 TelcoinSaleKYCEscrow.Rejected( participant=0xd86a69fe37dbadf311b804b5593df82a016b2928 )
126 TelcoinSaleKYCEscrow.Rejected( participant=0x10a6d5d31fb50bece269073c126e173c7703486e )
127 TelcoinSaleKYCEscrow.Rejected( participant=0xf49999b613c667c49b2a4930d79f2ef6a07e6f09 )
128 TelcoinSaleKYCEscrow.Rejected( participant=0xf9d174c651e922065a71e937981f3a48c5dc2d68 )
129 TelcoinSaleKYCEscrow.Rejected( participant=0x1037e13795dfcdc510a0da7385a242538c333677 )
130 TelcoinSaleKYCEscrow.Rejected( participant=0x932d44d96ca39c166d6b49036049d2a7c5530876 )
131 TelcoinSaleKYCEscrow.Rejected( participant=0xa762bdb88fbd7e79544b03557e46b71b1a4b669e )
132 TelcoinSaleKYCEscrow.Rejected( participant=0x6fa56bb128ca4418ec373568aca5d5dca01d8ee4 )
133 TelcoinSaleKYCEscrow.Rejected( participant=0xa082388595b81438f48fb07074b8baa960d0b28e )
134 TelcoinSaleKYCEscrow.Rejected( participant=0x75f3b9af577960002998dec5e45dd354c7ce5f14 )
135 TelcoinSaleKYCEscrow.Rejected( participant=0xd5b884babe44400ea1b616d059628d2d362d0ef9 )
136 TelcoinSaleKYCEscrow.Rejected( participant=0xcae79bec945ac12a605c00c272d5bbd2fc055795 )
137 TelcoinSaleKYCEscrow.Rejected( participant=0xc81e3dae7b56a137be4ea6cf6a66cd3bd3804fe0 )
138 TelcoinSaleKYCEscrow.Rejected( participant=0x8c1b8146f155b97a1cdc55fe22c3cdf0e5b79a5a )
139 TelcoinSaleKYCEscrow.Rejected( participant=0x3b1bf4b7c115d52e516fa06b6da55a724eccb7d6 )
140 TelcoinSaleKYCEscrow.Rejected( participant=0xbdc8d5db57ab5f4668a7e082d5d7c6a7fbeaa50b )
141 TelcoinSaleKYCEscrow.Rejected( participant=0xe841999e5fbf5b3c61072cd01fc098d3a447752f )
142 TelcoinSaleKYCEscrow.Rejected( participant=0xc57334a5dc819a5b9214d3567c45b3cdaeacd59f )
143 0x8322c7e7c14b57ff85947f28381421692a1cf267.0x33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed75( 0x33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed75, 0x0000000000000000000000000000000000000000000000000000000000000104 )

Account State Difference:

  Address   Before After State Difference Code
0x006E963E...314D946be 0.05518255 Eth0.55518255 Eth0.5
0x021855A7...59F0334b9 0.00642187 Eth0.30642187 Eth0.3
0x0387c94E...cCf734CEc 2.007952523 Eth2.307952523 Eth0.3
0x0A44E08D...4B44B55c2 0.538187503 Eth0.848187503 Eth0.31
0x0dfE0bc8...F11b25cAA 0.01555993 Eth0.46082366 Eth0.44526373
0x1037e137...38C333677 0.00815534 Eth0.31815534 Eth0.31
0x10a6D5D3...C7703486E 0.027591994 Eth0.927591994 Eth0.9
0x11eeA9c4...09d282Fe9 0.167547947869405131 Eth0.517547947869405131 Eth0.35
0x17821d20...492D3dbC8 0.01413542 Eth2.18413542 Eth2.17
0x193bFA77...bA1c71968 0.005985353 Eth1.005985353 Eth1
0x1d0dC347...D56614FF0 0.000079843 Eth1.075110773 Eth1.07503093
0x1eADb4B9...54d653369 1.54454016 Eth2.54454016 Eth1
0x25814B6d...1D04053E7 0.04812366 Eth0.63512366 Eth0.587
0x276afb07...57cFFB816 4.002887345819160604 Eth4.922887345819160604 Eth0.92
0x2a8cdE14...35258d79c 0 Eth1 Eth1
0x2b830731...30edEBd84 0.03432774 Eth0.33432774 Eth0.3
0x2b8Cf6d0...2c9eD40e7 0.048974843 Eth0.348974843 Eth0.3
0x2D09FF39...C1c12769E 0 Eth0.34912366 Eth0.34912366
0x30aCCa7d...b7c4E538B 0.043128011 Eth0.743128011 Eth0.7
0x32880Cc2...973e708b2 0.011277774296069364 Eth0.511277774296069364 Eth0.5
0x354Bf2C7...A0684dbcE 5,177.696203074594075475 Eth5,085.788219051193517205 Eth91.90798402340055827
0x35B312e4...228b158DE 0.09712366 Eth0.39712366 Eth0.3
0x378803D1...509B877aB 0.036742575495108 Eth0.536742575495108 Eth0.5
0x3b1Bf4b7...24ECCB7D6 0.02922475 Eth1.02922475 Eth1
0x3b9A7007...05B1e81d9 0.04624732 Eth2.100062044 Eth2.053814724
0x416299AA...7F606eeF5
(Luno 2)
6,106.911315165401366246 Eth6,108.072490165401366246 Eth1.161175
0x45991243...30dBf272D 0.42016048 Eth0.72016048 Eth0.3
0x48CC2e04...59bcc4Ce8 0.011847325 Eth0.978102875 Eth0.96625555
0x4976b32b...FAABbFA94 0.004362192 Eth1.004362192 Eth1
0x4Ae34dCD...6f021dE1F 0.49745672 Eth0.99745672 Eth0.5
0x55111157...948C25de2 0.00412366 Eth0.51412366 Eth0.51
0x55220dA4...687FF9686 0.5036635815 Eth1.0036635815 Eth0.5
0x5A39aB2C...0E66D6FE1 0.00397286 Eth2.03397286 Eth2.03
0x5Ab33BB5...3b46583a7 0.28666726 Eth0.98666726 Eth0.7
0x5C663978...26275622F 0.01424732 Eth0.51424732 Eth0.5
0x5Fe31BB6...C39E93b25 0 Eth1.03745973 Eth1.03745973
0x6230148F...572eF1893 0.00412366 Eth0.65412366 Eth0.65
0x637d6c49...34567b1B2 1.655826818 Eth2.155826818 Eth0.5
0x663DAe01...abC9b9B8C 0.7933986 Eth1.2933986 Eth0.5
0x6a753ACe...09eD0635A 0.00000119 Eth0.30000129 Eth0.3000001
0x6B7a7196...5bc66Ba30 0.02582266 Eth0.44582266 Eth0.42
0x6fa56bb1...Ca01d8eE4 8.85512119 Eth9.85512119 Eth1
0x75f3b9af...4C7cE5F14 0 Eth0.6 Eth0.6
0x794e25f2...Dd6102f2C 0.006819919 Eth0.306819919 Eth0.3
0x7DF43BEf...51f78ccDE 0.07624312 Eth0.37624312 Eth0.3
0x7f0E21B4...C60d191ec 3.34917609 Eth3.66917609 Eth0.32
0x822A0F34...28825b297 4.496180338 Eth6.496180338 Eth2
(F2Pool Old)
9,236.991799047191089653 Eth9,237.022804807191089653 Eth0.03100576
0x8322C7E7...92A1cF267
0x8364C8B3...9Cffbb2b2 3.48940354 Eth4.48940354 Eth1
0x896587C9...3a7980c3F 0 Eth1 Eth1
0x89bB1097...2FDAfEB51 0 Eth0.3 Eth0.3
0x8Ba0CaAd...Ddfae8294 0.19824732 Eth1.19824732 Eth1
0x8C1B8146...0e5B79a5a 1.2004894345 Eth1.5104894345 Eth0.31
0x8d22bF69...53AA214ef 0.68825044 Eth0.98825044 Eth0.3
0x91267af3...C5fED0453 0.001585553 Eth0.601585553 Eth0.6
0x932D44D9...7c5530876 0.014925362 Eth1.014925362 Eth1
0x94be8C3A...661666541 0.5827117015864969 Eth1.5827117015864969 Eth1
0x9aEDa983...734D42cEb 0.0142631 Eth0.37793216 Eth0.36366906
0x9b075E4f...C9c9397b1 0.020914354134 Eth2.020914354134 Eth2
0x9bb4a00e...92B43DC13 0.01912366 Eth0.99912366 Eth0.98
0x9BE07966...093C9fE7E 0.11085669689768 Eth0.61085669689768 Eth0.5
0x9fF1240f...f5b040D9A 3.98952594 Eth4.58952594 Eth0.6
0xA0823885...960d0b28E 0 Eth1 Eth1
0xA15C3d56...aa9c9494f 0 Eth0.6 Eth0.6
0xa1f83d98...Bc140DF91 0.134828384 Eth0.634828384 Eth0.5
0xA1ffBCcB...a780c465B 1.394238066000000096 Eth2.394238066000000096 Eth1
0xA762bdb8...B1a4b669e 0.2819576 Eth2.2819576 Eth2
0xAdD2bbfb...38251461E 2.071279596401057 Eth4.071279596401057 Eth2
0xAe09DF06...690489A9E 0.14828366 Eth1.24828366 Eth1.1
0xae0d6163...75C1482f5 0.75498366 Eth1.05498366 Eth0.3
0xAf10d393...A7BCD17FE 0.08912366 Eth1.08912366 Eth1
0xB206298b...c8eeCD382 5.98259867 Eth6.98259867 Eth1
0xB461f3A8...1dAE23E69 0.2436501725 Eth0.9936501725 Eth0.75
0xbAd6C7d5...ca1C321D1 0.02324732 Eth0.32324732 Eth0.3
0xbC30d357...2B9F12EB2 0 Eth0.50012366 Eth0.50012366
0xbDc8D5dB...7fbeAa50B 0.544165137 Eth0.844165137 Eth0.3
0xc0726620...55B47e279 0.00358 Eth0.32014339 Eth0.31656339
0xc1aE1fb1...b492b4b01 3.104751433567151831 Eth4.104751433567151831 Eth1
0xC1AF025c...94E40bbD9 0.063321258 Eth0.363321258 Eth0.3
0xC25D2AAf...72646F9A1 0.0669295644541 Eth0.3669295644541 Eth0.3
0xC277eAee...534e70443 4.877840031832580876 Eth5.877840031832580876 Eth1
0xC57334a5...DAEaCD59f 0.29824732 Eth0.79824732 Eth0.5
0xC57EA677...85eABf8F6 0.00072992694362025 Eth1.41072992694362025 Eth1.41
0xC6a8Be45...fD74BA6a6 0.02520915 Eth1.02520915 Eth1
0xC6DcB8d3...7bcaBcfC1 0 Eth0.3 Eth0.3
0xC81e3dae...Bd3804fE0 0.696638843 Eth0.996638843 Eth0.3
0xc85bD5Db...ae52c73D5 1.07011315 Eth2.07011315 Eth1
0xc9C6F102...C1BD2161a
15.855414519 Eth
Nonce: 106
15.824408759 Eth
Nonce: 107
0.03100576
0xCae79BEC...2fc055795 0.030944286136748655 Eth0.538048775537306925 Eth0.50710448940055827
0xCE66408C...C1D4bC272 0 Eth10 Eth10
0xd5B884bA...D362d0EF9 0.001820914 Eth0.351820914 Eth0.35
0xD64E9ca3...b6Add84A2 0 Eth0.5 Eth0.5
0xD86a69Fe...A016B2928 0.01106841 Eth0.41106841 Eth0.4
0xdd6685e9...2b0B65fCF 0.05799464 Eth0.65799464 Eth0.6
0xDFF16852...7277547cf 0.03912366 Eth0.34912366 Eth0.31
0xe14986Ed...50F378076 0.010567441 Eth0.360567441 Eth0.35
0xE841999E...3A447752f 0.017921836 Eth0.563321836 Eth0.5454
0xe8AD7492...8E4a777C6 0.02906344 Eth10.02906344 Eth10
0xE9be00a7...050fbD588 2.96879764 Eth4.96879764 Eth2
0xf00fBaC9...10c15882f 0.66470366 Eth1.66470366 Eth1
0xf49999B6...6a07E6F09 0.03504977027453142 Eth0.33504977027453142 Eth0.3
0xf84cB2A0...eE3781B4F 0.00087 Eth0.30087 Eth0.3
0xF9D174C6...8C5dC2d68 0.075708469315851 Eth0.825708469315851 Eth0.75

Execution Trace

0x8322c7e7c14b57ff85947f28381421692a1cf267.c01a8c84( )
  • TelcoinSaleKYCEscrow.rejectMany( _participants=[0xae0d6163E7B414cF185FB9af0E748D975C1482f5, 0x663DAe01D7251EAa333c12282BCAa6cabC9b9B8C, 0x2b8Cf6d0F39c260b6D023112964909b2c9eD40e7, 0x30aCCa7d93232b6249a43d25081F5f8b7c4E538B, 0xc1aE1fb188761683225F24469B74B2fb492b4b01, 0x45991243A97b3768dA975432250129f30dBf272D, 0x2b830731504812Ca2FfAd1c26cb0d3b30edEBd84, 0xDFF168521e01cf2C5D827ddC645AB7c7277547cf, 0xA1ffBCcB2e306007D7f801bc90d6000a780c465B, 0xbAd6C7d5e7e3Fd214AB08DB5F4F79c5ca1C321D1, 0x0387c94Efe8D28B79A5b3bd4c2EC0EfcCf734CEc, 0xA15C3d561afc43F7A1542342fEa3AA6aa9c9494f, 0x55220dA403BA8F6896006B6312efE37687FF9686, 0x9b075E4fB2E7a12AcCbb2Df0d835517C9c9397b1, 0x2D09FF39f0017077c41954ad01883BeC1c12769E, 0xc85bD5Db02aA5CAa667c3D91c86c842ae52c73D5, 0xdd6685e913C9A8e95c17091E03F0D642b0B65fCF, 0x8364C8B38f8A6412Fe101896f62A9749Cffbb2b2, 0xC6a8Be456D39abDb9C7D9c8A15D44f5fD74BA6a6, 0x17821d20c75a3AC2d36680f91e56D6a492D3dbC8, 0xD64E9ca3D291b7796a56E3aa48CC59Ab6Add84A2, 0xf00fBaC92465c3CF0473C12FE0Fcc4c10c15882f, 0xf84cB2A05992A9cb92681861570eDCEeE3781B4F, 0xa1f83d98c5611d2a5190541184054D1Bc140DF91, 0x5Fe31BB69592C7D5c3b2DD158cC5EF1C39E93b25, 0xB206298b15885923C61018B1F268012c8eeCD382, 0xAe09DF06DDaa6EA05739Bb2Ec73f8Ee690489A9E, 0xE9be00a73Af16C25eA16B03bf5a30F4050fbD588, 0x9bb4a00ee14e042fCabd0887459605992B43DC13, 0x48CC2e043A030B6288b1c40Ac9C518759bcc4Ce8, 0x5A39aB2C2D3dA753cE124bbfD64b2ba0E66D6FE1, 0x822A0F34715E02Af55Db2b2659C29e728825b297, 0x006E963EC9496EF693d454EBc3973D8314D946be, 0xc07266200aB51F788ef1f3AD9cf8a0955B47e279, 0x378803D1B0b2CeEB2bB83FA713bE02F509B877aB, 0x021855A73ed2FC1ef650cAE86F372D159F0334b9, 0x9fF1240fC9C32822BFd07bfB71f40cBf5b040D9A, 0x7DF43BEf6987B94318340a49FaDa20451f78ccDE, 0xB461f3A8fa6141dEfD6d5408262aA061dAE23E69, 0x1eADb4B9C47b484e5abf8Ae7707Fe9854d653369, 0x6230148F24fDE61B9c00C182b1fb71D572eF1893, 0x89bB10974d6D76e545619055789E56A2FDAfEB51, 0x9aEDa98370db8b2D44aB45f86518B7C734D42cEb, 0xC1AF025c5fff49f4f0129D5770bBe9D94E40bbD9, 0x9BE07966f29F67B3E9483360eDf7c90093C9fE7E, 0x6a753ACe76771DE6A90Cd4Dba83b84F09eD0635A, 0x11eeA9c4AEe58aFC3b0EdB892c5a98B09d282Fe9, 0x1d0dC3474a331D0bE8Ee3fB7706008CD56614FF0, 0x2a8cdE14bC58aEf02A291E49Ef22ee735258d79c, 0x0dfE0bc81515cA450c5fE0Cf4Bf3561F11b25cAA, 0xAdD2bbfb6E3aFa8b2b6E5B0440ED0c238251461E, 0xC6DcB8d3Ae559a309c4E8E2c034C4d07bcaBcfC1, 0xAf10d393D224f94903dcC267697307fA7BCD17FE, 0x32880Cc2D775992F39cE34b05e2bB9d973e708b2, 0xC25D2AAf89c210eA565146FbeAb166872646F9A1, 0xC57EA67750Ded06a98763d5251f062785eABf8F6, 0x8Ba0CaAd13A0a8f02397B165473D69aDdfae8294, 0x276afb07BC382Ed1088522AC4d0Db0a57cFFB816, 0x7f0E21B46B1109e05d149E107880039C60d191ec, 0x25814B6dB3D4552a239EC916BA10EbE1D04053E7, 0x3b9A70072b474b72A2373715F51b09105B1e81d9, 0x896587C9a2E8dD1025449Af611897923a7980c3F, 0x5Ab33BB522fa2e77986d98F77a1a0103b46583a7, 0x193bFA775654DC567b14a4329cF15F0bA1c71968, 0xCE66408C839D38057Ab0B3082dd2Da7C1D4bC272, 0x4Ae34dCDC9Baf43527989C3948A0F7f6f021dE1F, 0xe14986Ed27fdCA9AA5ae77c0A542A9450F378076, 0x91267af311CFCF85e181e2BB97Ef69BC5fED0453, 0xbC30d3571b425A1B29ed23078F888712B9F12EB2, 0x5C663978745c53346176d8a8b0326AA26275622F, 0x5511115789f204ac883eE1F7423C171948C25de2, 0x6B7a7196FB879aB4E3d738EB72750D25bc66Ba30, 0x416299AAde6443e6F6e8ab67126e65a7F606eeF5, 0x8d22bF695e7dD1D7B56968d5102F9A353AA214ef, 0x4976b32b1b9F3A1779815B9E6113468FAABbFA94, 0x794e25f2a2c64BF3A7C4F260328B68aDd6102f2C, 0xe8AD7492E766d7669673afac0915Ef08E4a777C6, 0x94be8C3AAb8fDAB5C1AB4c8301Fa1ff661666541, 0x637d6c49f6d40078E93c64C1833Acb634567b1B2, 0x0A44E08DAc96a331136b4819CC5d84b4B44B55c2, 0xC277eAeeD9cb6b171878DA2B6509E6B534e70443, 0x35B312e4F3159f2321f56c2A363f5aA228b158DE, 0xD86a69Fe37DbaDF311B804b5593dF82A016B2928, 0x10a6D5D31FB50BEcE269073C126E173C7703486E, 0xf49999B613C667c49b2A4930D79f2EF6a07E6F09, 0xF9D174C651E922065a71E937981f3a48C5dC2d68, 0x1037e13795dFCdc510a0Da7385A242538C333677, 0x932D44D96cA39c166D6B49036049d2A7c5530876, 0xA762bdb88Fbd7e79544b03557e46b71B1a4b669e, 0x6fa56bb128CA4418EC373568AcA5d5dCa01d8eE4, 0xA082388595b81438f48fb07074B8bAA960d0b28E, 0x75f3b9af577960002998Dec5e45Dd354C7cE5F14, 0xd5B884bAbe44400ea1B616D059628d2D362d0EF9, 0xCae79BEC945ac12A605c00c272D5BBD2fc055795, 0xC81e3dae7B56a137Be4ea6cF6A66CD3Bd3804fE0, 0x8C1B8146f155B97a1cdC55fe22c3cDf0e5B79a5a, 0x3b1Bf4b7c115D52E516fA06B6da55A724ECCB7D6, 0xbDc8D5dB57Ab5f4668A7E082D5D7c6a7fbeAa50B, 0xE841999E5fbf5b3C61072cD01Fc098D3A447752f, 0xC57334a5Dc819a5B9214D3567c45b3CDAEaCD59f] )
    • ETH 0.3 0xae0d6163e7b414cf185fb9af0e748d975c1482f5.CALL( )
    • ETH 0.5 0x663dae01d7251eaa333c12282bcaa6cabc9b9b8c.CALL( )
    • ETH 0.3 0x2b8cf6d0f39c260b6d023112964909b2c9ed40e7.CALL( )
    • ETH 0.7 0x30acca7d93232b6249a43d25081f5f8b7c4e538b.CALL( )
    • ETH 1 0xc1ae1fb188761683225f24469b74b2fb492b4b01.CALL( )
    • ETH 0.3 0x45991243a97b3768da975432250129f30dbf272d.CALL( )
    • ETH 0.3 0x2b830731504812ca2ffad1c26cb0d3b30edebd84.CALL( )
    • ETH 0.31 0xdff168521e01cf2c5d827ddc645ab7c7277547cf.CALL( )
    • ETH 1 0xa1ffbccb2e306007d7f801bc90d6000a780c465b.CALL( )
    • ETH 0.3 0xbad6c7d5e7e3fd214ab08db5f4f79c5ca1c321d1.CALL( )
    • ETH 0.3 0x0387c94efe8d28b79a5b3bd4c2ec0efccf734cec.CALL( )
    • ETH 0.6 0xa15c3d561afc43f7a1542342fea3aa6aa9c9494f.CALL( )
    • ETH 0.5 0x55220da403ba8f6896006b6312efe37687ff9686.CALL( )
    • ETH 2 0x9b075e4fb2e7a12accbb2df0d835517c9c9397b1.CALL( )
    • ETH 0.34912366 0x2d09ff39f0017077c41954ad01883bec1c12769e.CALL( )
    • ETH 1 0xc85bd5db02aa5caa667c3d91c86c842ae52c73d5.CALL( )
    • ETH 0.6 0xdd6685e913c9a8e95c17091e03f0d642b0b65fcf.CALL( )
    • ETH 1 0x8364c8b38f8a6412fe101896f62a9749cffbb2b2.CALL( )
    • ETH 1 0xc6a8be456d39abdb9c7d9c8a15d44f5fd74ba6a6.CALL( )
    • ETH 2.17 0x17821d20c75a3ac2d36680f91e56d6a492d3dbc8.CALL( )
    • ETH 0.5 0xd64e9ca3d291b7796a56e3aa48cc59ab6add84a2.CALL( )
    • ETH 1 0xf00fbac92465c3cf0473c12fe0fcc4c10c15882f.CALL( )
    • ETH 0.3 0xf84cb2a05992a9cb92681861570edceee3781b4f.CALL( )
    • ETH 0.5 0xa1f83d98c5611d2a5190541184054d1bc140df91.CALL( )
    • ETH 1.03745973 0x5fe31bb69592c7d5c3b2dd158cc5ef1c39e93b25.CALL( )
    • ETH 1 0xb206298b15885923c61018b1f268012c8eecd382.CALL( )
    • ETH 1.1 0xae09df06ddaa6ea05739bb2ec73f8ee690489a9e.CALL( )
    • ETH 2 0xe9be00a73af16c25ea16b03bf5a30f4050fbd588.CALL( )
    • ETH 0.98 0x9bb4a00ee14e042fcabd0887459605992b43dc13.CALL( )
    • ETH 0.96625555 0x48cc2e043a030b6288b1c40ac9c518759bcc4ce8.CALL( )
    • ETH 2.03 0x5a39ab2c2d3da753ce124bbfd64b2ba0e66d6fe1.CALL( )
    • ETH 2 0x822a0f34715e02af55db2b2659c29e728825b297.CALL( )
    • ETH 0.5 0x006e963ec9496ef693d454ebc3973d8314d946be.CALL( )
    • ETH 0.31656339 0xc07266200ab51f788ef1f3ad9cf8a0955b47e279.CALL( )
    • ETH 0.5 0x378803d1b0b2ceeb2bb83fa713be02f509b877ab.CALL( )
    • ETH 0.3 0x021855a73ed2fc1ef650cae86f372d159f0334b9.CALL( )
    • ETH 0.6 0x9ff1240fc9c32822bfd07bfb71f40cbf5b040d9a.CALL( )
    • ETH 0.3 0x7df43bef6987b94318340a49fada20451f78ccde.CALL( )
    • ETH 0.75 0xb461f3a8fa6141defd6d5408262aa061dae23e69.CALL( )
    • ETH 1 0x1eadb4b9c47b484e5abf8ae7707fe9854d653369.CALL( )
    • ETH 0.65 0x6230148f24fde61b9c00c182b1fb71d572ef1893.CALL( )
    • ETH 0.3 0x89bb10974d6d76e545619055789e56a2fdafeb51.CALL( )
    • ETH 0.36366906 0x9aeda98370db8b2d44ab45f86518b7c734d42ceb.CALL( )
    • ETH 0.3 0xc1af025c5fff49f4f0129d5770bbe9d94e40bbd9.CALL( )
    • ETH 0.5 0x9be07966f29f67b3e9483360edf7c90093c9fe7e.CALL( )
    • ETH 0.3000001 0x6a753ace76771de6a90cd4dba83b84f09ed0635a.CALL( )
    • ETH 0.35 0x11eea9c4aee58afc3b0edb892c5a98b09d282fe9.CALL( )
    • ETH 1.07503093 0x1d0dc3474a331d0be8ee3fb7706008cd56614ff0.CALL( )
    • ETH 1 0x2a8cde14bc58aef02a291e49ef22ee735258d79c.CALL( )
    • ETH 0.44526373 0x0dfe0bc81515ca450c5fe0cf4bf3561f11b25caa.CALL( )
    • ETH 2 0xadd2bbfb6e3afa8b2b6e5b0440ed0c238251461e.CALL( )
    • ETH 0.3 0xc6dcb8d3ae559a309c4e8e2c034c4d07bcabcfc1.CALL( )
    • ETH 1 0xaf10d393d224f94903dcc267697307fa7bcd17fe.CALL( )
    • ETH 0.5 0x32880cc2d775992f39ce34b05e2bb9d973e708b2.CALL( )
    • ETH 0.3 0xc25d2aaf89c210ea565146fbeab166872646f9a1.CALL( )
    • ETH 1.41 0xc57ea67750ded06a98763d5251f062785eabf8f6.CALL( )
    • ETH 1 0x8ba0caad13a0a8f02397b165473d69addfae8294.CALL( )
    • ETH 0.92 0x276afb07bc382ed1088522ac4d0db0a57cffb816.CALL( )
    • ETH 0.32 0x7f0e21b46b1109e05d149e107880039c60d191ec.CALL( )
    • ETH 0.587 0x25814b6db3d4552a239ec916ba10ebe1d04053e7.CALL( )
    • ETH 2.053814724 0x3b9a70072b474b72a2373715f51b09105b1e81d9.CALL( )
    • ETH 1 0x896587c9a2e8dd1025449af611897923a7980c3f.CALL( )
    • ETH 0.7 0x5ab33bb522fa2e77986d98f77a1a0103b46583a7.CALL( )
    • ETH 1 0x193bfa775654dc567b14a4329cf15f0ba1c71968.CALL( )
    • ETH 10 0xce66408c839d38057ab0b3082dd2da7c1d4bc272.CALL( )
    • ETH 0.5 0x4ae34dcdc9baf43527989c3948a0f7f6f021de1f.CALL( )
    • ETH 0.35 0xe14986ed27fdca9aa5ae77c0a542a9450f378076.CALL( )
    • ETH 0.6 0x91267af311cfcf85e181e2bb97ef69bc5fed0453.CALL( )
    • ETH 0.50012366 0xbc30d3571b425a1b29ed23078f888712b9f12eb2.CALL( )
    • ETH 0.5 0x5c663978745c53346176d8a8b0326aa26275622f.CALL( )
    • ETH 0.51 0x5511115789f204ac883ee1f7423c171948c25de2.CALL( )
    • ETH 0.42 0x6b7a7196fb879ab4e3d738eb72750d25bc66ba30.CALL( )
    • ETH 1.161175 Luno 2.CALL( )
    • ETH 0.3 0x8d22bf695e7dd1d7b56968d5102f9a353aa214ef.CALL( )
    • ETH 1 0x4976b32b1b9f3a1779815b9e6113468faabbfa94.CALL( )
    • ETH 0.3 0x794e25f2a2c64bf3a7c4f260328b68add6102f2c.CALL( )
    • ETH 10 0xe8ad7492e766d7669673afac0915ef08e4a777c6.CALL( )
    • ETH 1 0x94be8c3aab8fdab5c1ab4c8301fa1ff661666541.CALL( )
    • ETH 0.5 0x637d6c49f6d40078e93c64c1833acb634567b1b2.CALL( )
    • ETH 0.31 0x0a44e08dac96a331136b4819cc5d84b4b44b55c2.CALL( )
    • ETH 1 0xc277eaeed9cb6b171878da2b6509e6b534e70443.CALL( )
    • ETH 0.3 0x35b312e4f3159f2321f56c2a363f5aa228b158de.CALL( )
    • ETH 0.4 0xd86a69fe37dbadf311b804b5593df82a016b2928.CALL( )
    • ETH 0.9 0x10a6d5d31fb50bece269073c126e173c7703486e.CALL( )
    • ETH 0.3 0xf49999b613c667c49b2a4930d79f2ef6a07e6f09.CALL( )
    • ETH 0.75 0xf9d174c651e922065a71e937981f3a48c5dc2d68.CALL( )
    • ETH 0.31 0x1037e13795dfcdc510a0da7385a242538c333677.CALL( )
    • ETH 1 0x932d44d96ca39c166d6b49036049d2a7c5530876.CALL( )
    • ETH 2 0xa762bdb88fbd7e79544b03557e46b71b1a4b669e.CALL( )
    • ETH 1 0x6fa56bb128ca4418ec373568aca5d5dca01d8ee4.CALL( )
    • ETH 1 0xa082388595b81438f48fb07074b8baa960d0b28e.CALL( )
    • ETH 0.6 0x75f3b9af577960002998dec5e45dd354c7ce5f14.CALL( )
    • ETH 0.35 0xd5b884babe44400ea1b616d059628d2d362d0ef9.CALL( )
    • ETH 0.50710448940055827 0xcae79bec945ac12a605c00c272d5bbd2fc055795.CALL( )
    • ETH 0.3 0xc81e3dae7b56a137be4ea6cf6a66cd3bd3804fe0.CALL( )
    • ETH 0.31 0x8c1b8146f155b97a1cdc55fe22c3cdf0e5b79a5a.CALL( )
    • ETH 1 0x3b1bf4b7c115d52e516fa06b6da55a724eccb7d6.CALL( )
    • ETH 0.3 0xbdc8d5db57ab5f4668a7e082d5d7c6a7fbeaa50b.CALL( )
    • ETH 0.5454 0xe841999e5fbf5b3c61072cd01fc098d3a447752f.CALL( )
    • ETH 0.5 0xc57334a5dc819a5b9214d3567c45b3cdaeacd59f.CALL( )
      pragma solidity 0.4.18;
      
      
      /**
       * @title SafeMath
       * @dev Math operations with safety checks that throw on error
       */
      library SafeMath {
          function mul(uint256 a, uint256 b) internal pure returns (uint256) {
              uint256 c = a * b;
              assert(a == 0 || c / a == b);
              return c;
          }
      
          function div(uint256 a, uint256 b) internal pure returns (uint256) {
              // assert(b > 0); // Solidity automatically throws when dividing by 0
              uint256 c = a / b;
              // assert(a == b * c + a % b); // There is no case in which this doesn't hold
              return c;
          }
      
          function sub(uint256 a, uint256 b) internal pure returns (uint256) {
              assert(b <= a);
              return a - b;
          }
      
          function add(uint256 a, uint256 b) internal pure returns (uint256) {
              uint256 c = a + b;
              assert(c >= a);
              return c;
          }
      }
      
      
      contract Telcoin {
          using SafeMath for uint256;
      
          event Transfer(address indexed _from, address indexed _to, uint _value);
          event Approval(address indexed _owner, address indexed _spender, uint _value);
      
          string public constant name = "Telcoin";
          string public constant symbol = "TEL";
          uint8 public constant decimals = 2;
      
          /// The ERC20 total fixed supply of tokens.
          uint256 public constant totalSupply = 100000000000 * (10 ** uint256(decimals));
      
          /// Account balances.
          mapping(address => uint256) balances;
      
          /// The transfer allowances.
          mapping (address => mapping (address => uint256)) internal allowed;
      
          /// The initial distributor is responsible for allocating the supply
          /// into the various pools described in the whitepaper. This can be
          /// verified later from the event log.
          function Telcoin(address _distributor) public {
              balances[_distributor] = totalSupply;
              Transfer(0x0, _distributor, totalSupply);
          }
      
          /// ERC20 balanceOf().
          function balanceOf(address _owner) public view returns (uint256) {
              return balances[_owner];
          }
      
          /// ERC20 transfer().
          function transfer(address _to, uint256 _value) public returns (bool) {
              require(_to != address(0));
              require(_value <= balances[msg.sender]);
      
              // SafeMath.sub will throw if there is not enough balance.
              balances[msg.sender] = balances[msg.sender].sub(_value);
              balances[_to] = balances[_to].add(_value);
              Transfer(msg.sender, _to, _value);
              return true;
          }
      
          /// ERC20 transferFrom().
          function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
              require(_to != address(0));
              require(_value <= balances[_from]);
              require(_value <= allowed[_from][msg.sender]);
      
              balances[_from] = balances[_from].sub(_value);
              balances[_to] = balances[_to].add(_value);
              allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
              Transfer(_from, _to, _value);
              return true;
          }
      
          /// ERC20 approve(). Comes with the standard caveat that an approval
          /// meant to limit spending may actually allow more to be spent due to
          /// unfortunate ordering of transactions. For safety, this method
          /// should only be called if the current allowance is 0. Alternatively,
          /// non-ERC20 increaseApproval() and decreaseApproval() can be used.
          function approve(address _spender, uint256 _value) public returns (bool) {
              allowed[msg.sender][_spender] = _value;
              Approval(msg.sender, _spender, _value);
              return true;
          }
      
          /// ERC20 allowance().
          function allowance(address _owner, address _spender) public view returns (uint256) {
              return allowed[_owner][_spender];
          }
      
          /// Not officially ERC20. Allows an allowance to be increased safely.
          function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
              allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
              Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
              return true;
          }
      
          /// Not officially ERC20. Allows an allowance to be decreased safely.
          function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
              uint oldValue = allowed[msg.sender][_spender];
              if (_subtractedValue > oldValue) {
                  allowed[msg.sender][_spender] = 0;
              } else {
                  allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
              }
              Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
              return true;
          }
      }
      
      
      contract TelcoinSaleToken {
          using SafeMath for uint256;
      
          event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
          event Mint(address indexed to, uint256 amount);
          event MintFinished();
          event Redeem(address indexed beneficiary, uint256 sacrificedValue, uint256 grantedValue);
          event Transfer(address indexed from, address indexed to, uint256 value);
      
          /// The owner of the contract.
          address public owner;
      
          /// The total number of minted tokens, excluding destroyed tokens.
          uint256 public totalSupply;
      
          /// The token balance and released amount of each address.
          mapping(address => uint256) balances;
          mapping(address => uint256) redeemed;
      
          /// Whether the token is still mintable.
          bool public mintingFinished = false;
      
          /// Redeemable telcoin.
          Telcoin telcoin;
          uint256 public totalRedeemed;
      
          /// Vesting period.
          uint256 vestingStart;
          uint256 vestingDuration;
      
          modifier onlyOwner() {
              require(msg.sender == owner);
              _;
          }
      
          function TelcoinSaleToken(
              Telcoin _telcoin,
              uint256 _vestingStart,
              uint256 _vestingDuration
          )
              public
          {
              owner = msg.sender;
              telcoin = _telcoin;
              vestingStart = _vestingStart;
              vestingDuration = _vestingDuration;
          }
      
          function finishMinting() onlyOwner public returns (bool) {
              require(!mintingFinished);
      
              mintingFinished = true;
              MintFinished();
      
              return true;
          }
      
          function mint(address _to, uint256 _amount) onlyOwner public returns (bool) {
              require(_to != 0x0);
              require(!mintingFinished);
              require(_amount > 0);
      
              totalSupply = totalSupply.add(_amount);
              balances[_to] = balances[_to].add(_amount);
              Mint(_to, _amount);
              Transfer(0x0, _to, _amount);
      
              return true;
          }
      
          function redeemMany(address[] _beneficiaries) public {
              for (uint256 i = 0; i < _beneficiaries.length; i++) {
                  redeem(_beneficiaries[i]);
              }
          }
      
          function redeem(address _beneficiary) public returns (uint256) {
              require(mintingFinished);
              require(_beneficiary != 0x0);
      
              uint256 balance = redeemableBalance(_beneficiary);
              if (balance == 0) {
                  return 0;
              }
      
              uint256 totalDistributable = telcoin.balanceOf(this).add(totalRedeemed);
      
              // Avoid loss of precision by multiplying and later dividing by
              // a large value.
              uint256 amount = balance.mul(10 ** 18).div(totalSupply).mul(totalDistributable).div(10 ** 18);
      
              balances[_beneficiary] = balances[_beneficiary].sub(balance);
              redeemed[_beneficiary] = redeemed[_beneficiary].add(balance);
              balances[telcoin] = balances[telcoin].add(balance);
              totalRedeemed = totalRedeemed.add(amount);
      
              Transfer(_beneficiary, telcoin, balance);
              Redeem(_beneficiary, balance, amount);
      
              telcoin.transfer(_beneficiary, amount);
      
              return amount;
          }
      
          function transferOwnership(address _to) onlyOwner public {
              require(_to != address(0));
              OwnershipTransferred(owner, _to);
              owner = _to;
          }
      
          function balanceOf(address _owner) public constant returns (uint256) {
              return balances[_owner];
          }
      
          function redeemableBalance(address _beneficiary) public constant returns (uint256) {
              return vestedBalance(_beneficiary).sub(redeemed[_beneficiary]);
          }
      
          function vestedBalance(address _beneficiary) public constant returns (uint256) {
              uint256 currentBalance = balances[_beneficiary];
              uint256 totalBalance = currentBalance.add(redeemed[_beneficiary]);
      
              if (now < vestingStart) {
                  return 0;
              }
      
              if (now >= vestingStart.add(vestingDuration)) {
                  return totalBalance;
              }
      
              return totalBalance.mul(now.sub(vestingStart)).div(vestingDuration);
          }
      }
      
      
      contract TelcoinSale {
          using SafeMath for uint256;
      
          event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
          event WalletChanged(address indexed previousWallet, address indexed newWallet);
          event TokenPurchase(
              address indexed purchaser,
              address indexed beneficiary,
              uint256 value,
              uint256 amount,
              uint256 bonusAmount
          );
          event TokenAltPurchase(
              address indexed purchaser,
              address indexed beneficiary,
              uint256 value,
              uint256 amount,
              uint256 bonusAmount,
              string symbol,
              string transactionId
          );
          event Pause();
          event Unpause();
          event Withdrawal(address indexed wallet, uint256 weiAmount);
          event Extended(uint256 until);
          event Finalized();
          event Refunding();
          event Refunded(address indexed beneficiary, uint256 weiAmount);
          event Whitelisted(
              address indexed participant,
              uint256 minWeiAmount,
              uint256 maxWeiAmount,
              uint32 bonusRate
          );
          event CapFlexed(uint32 flex);
      
          /// The owner of the contract.
          address public owner;
      
          /// The temporary token we're selling. Sale tokens can be converted
          /// immediately upon successful completion of the sale. Bonus tokens
          /// are on a separate vesting schedule.
          TelcoinSaleToken public saleToken;
          TelcoinSaleToken public bonusToken;
      
          /// The token we'll convert to after the sale ends.
          Telcoin public telcoin;
      
          /// The minimum and maximum goals to reach. If the soft cap is not reached
          /// by the end of the sale, the contract will enter refund mode. If the
          /// hard cap is reached, the contract can be finished early.
          ///
          /// Due to our actual soft cap being tied to USD and the assumption that
          /// the value of Ether will continue to increase during the ICO, we
          /// implement a fixed minimum softcap that accounts for a 2.5x value
          /// increase. The capFlex is a scale factor that allows us to scale the
          /// caps above the fixed minimum values. Initially the scale factor will
          /// be set so that our effective soft cap is ~10M USD.
          uint256 public softCap;
          uint256 public hardCap;
          uint32 public capFlex;
      
          /// The sale period.
          uint256 public startTime;
          uint256 public endTime;
          uint256 public timeExtension;
      
          /// The numnber of tokens to mint per wei.
          uint256 public rate;
      
          /// The total number of wei raised. Note that the contract's balance may
          /// differ from this value if someone has decided to forcefully send us
          /// ether.
          uint256 public weiRaised;
      
          /// The wallet that will receive the contract's balance once the sale
          /// finishes and the soft cap is reached.
          address public wallet;
      
          /// The list of addresses that are allowed to participate in the sale,
          /// up to what amount, and any special rate they may have, provided
          /// that they do in fact participate with at least the minimum value
          /// they agreed to.
          mapping(address => uint256) public whitelistedMin;
          mapping(address => uint256) public whitelistedMax;
          mapping(address => uint32) public bonusRates;
      
          /// The amount of wei and wei equivalents invested by each investor.
          mapping(address => uint256) public deposited;
          mapping(address => uint256) public altDeposited;
      
          /// An enumerable list of investors.
          address[] public investors;
      
          /// Whether the sale is paused.
          bool public paused = false;
      
          /// Whether the sale has finished, and when.
          bool public finished = false;
          uint256 public finishedAt;
      
          /// Whether we're accepting refunds.
          bool public refunding = false;
      
          /// The total number of wei refunded.
          uint256 public weiRefunded;
      
          modifier onlyOwner() {
              require(msg.sender == owner);
              _;
          }
      
          modifier saleOpen() {
              require(!finished);
              require(!paused);
              require(now >= startTime);
              require(now <= endTime + timeExtension);
              _;
          }
      
          function TelcoinSale(
              uint256 _softCap,
              uint256 _hardCap,
              uint32 _capFlex,
              uint256 _startTime,
              uint256 _endTime,
              uint256 _rate,
              address _wallet,
              Telcoin _telcoin,
              uint256 _bonusVestingStart,
              uint256 _bonusVestingDuration
          )
              public
              payable
          {
              require(msg.value > 0);
              require(_softCap > 0);
              require(_hardCap >= _softCap);
              require(_startTime >= now);
              require(_endTime >= _startTime);
              require(_rate > 0);
              require(_wallet != 0x0);
      
              owner = msg.sender;
              softCap = _softCap;
              hardCap = _hardCap;
              capFlex = _capFlex;
              startTime = _startTime;
              endTime = _endTime;
              rate = _rate;
              wallet = _wallet;
              telcoin = _telcoin;
      
              saleToken = new TelcoinSaleToken(telcoin, 0, 0);
              bonusToken = new TelcoinSaleToken(
                  telcoin,
                  _bonusVestingStart,
                  _bonusVestingDuration
              );
      
              wallet.transfer(msg.value);
          }
      
          function () public payable {
              buyTokens(msg.sender);
          }
      
          function buyTokens(address _beneficiary) saleOpen public payable {
              require(_beneficiary != address(0));
      
              uint256 weiAmount = msg.value;
              require(weiAmount > 0);
              require(weiRaised.add(weiAmount) <= hardCap);
      
              uint256 totalPrior = totalDeposited(_beneficiary);
              uint256 totalAfter = totalPrior.add(weiAmount);
              require(totalAfter <= whitelistedMax[_beneficiary]);
      
              uint256 saleTokens;
              uint256 bonusTokens;
      
              (saleTokens, bonusTokens) = tokensForPurchase(_beneficiary, weiAmount);
      
              uint256 newDeposited = deposited[_beneficiary].add(weiAmount);
              deposited[_beneficiary] = newDeposited;
              investors.push(_beneficiary);
      
              weiRaised = weiRaised.add(weiAmount);
      
              saleToken.mint(_beneficiary, saleTokens);
              if (bonusTokens > 0) {
                  bonusToken.mint(_beneficiary, bonusTokens);
              }
      
              TokenPurchase(
                  msg.sender,
                  _beneficiary,
                  weiAmount,
                  saleTokens,
                  bonusTokens
              );
          }
      
          function changeWallet(address _wallet) onlyOwner public payable {
              require(_wallet != 0x0);
              require(msg.value > 0);
      
              WalletChanged(wallet, _wallet);
              wallet = _wallet;
      
              wallet.transfer(msg.value);
          }
      
          function extendTime(uint256 _timeExtension) onlyOwner public {
              require(!finished);
              require(now < endTime + timeExtension);
              require(_timeExtension > 0);
      
              timeExtension = timeExtension.add(_timeExtension);
              require(timeExtension <= 7 days);
      
              Extended(endTime.add(timeExtension));
          }
      
          function finish() onlyOwner public {
              require(!finished);
              require(hardCapReached() || now > endTime + timeExtension);
      
              finished = true;
              finishedAt = now;
              saleToken.finishMinting();
              bonusToken.finishMinting();
      
              uint256 distributableCoins = telcoin.balanceOf(this);
      
              if (softCapReached()) {
                  uint256 saleTokens = saleToken.totalSupply();
                  uint256 bonusTokens = bonusToken.totalSupply();
                  uint256 totalTokens = saleTokens.add(bonusTokens);
      
                  // Avoid loss of precision by multiplying and later dividing by
                  // a large value.
                  uint256 bonusPortion = bonusTokens.mul(10 ** 18).div(totalTokens).mul(distributableCoins).div(10 ** 18);
                  uint256 salePortion = distributableCoins.sub(bonusPortion);
      
                  saleToken.transferOwnership(owner);
                  bonusToken.transferOwnership(owner);
      
                  telcoin.transfer(saleToken, salePortion);
                  telcoin.transfer(bonusToken, bonusPortion);
      
                  withdraw();
              } else {
                  refunding = true;
                  telcoin.transfer(wallet, distributableCoins);
                  Refunding();
              }
      
              Finalized();
          }
      
          function pause() onlyOwner public {
              require(!paused);
              paused = true;
              Pause();
          }
      
          function refundMany(address[] _investors) public {
              for (uint256 i = 0; i < _investors.length; i++) {
                  refund(_investors[i]);
              }
          }
      
          function refund(address _investor) public {
              require(finished);
              require(refunding);
              require(deposited[_investor] > 0);
      
              uint256 weiAmount = deposited[_investor];
              deposited[_investor] = 0;
              weiRefunded = weiRefunded.add(weiAmount);
              Refunded(_investor, weiAmount);
      
              _investor.transfer(weiAmount);
          }
      
          function registerAltPurchase(
              address _beneficiary,
              string _symbol,
              string _transactionId,
              uint256 _weiAmount
          )
              saleOpen
              onlyOwner
              public
          {
              require(_beneficiary != address(0));
              require(totalDeposited(_beneficiary).add(_weiAmount) <= whitelistedMax[_beneficiary]);
      
              uint256 saleTokens;
              uint256 bonusTokens;
      
              (saleTokens, bonusTokens) = tokensForPurchase(_beneficiary, _weiAmount);
      
              uint256 newAltDeposited = altDeposited[_beneficiary].add(_weiAmount);
              altDeposited[_beneficiary] = newAltDeposited;
              investors.push(_beneficiary);
      
              weiRaised = weiRaised.add(_weiAmount);
      
              saleToken.mint(_beneficiary, saleTokens);
              if (bonusTokens > 0) {
                  bonusToken.mint(_beneficiary, bonusTokens);
              }
      
              TokenAltPurchase(
                  msg.sender,
                  _beneficiary,
                  _weiAmount,
                  saleTokens,
                  bonusTokens,
                  _symbol,
                  _transactionId
              );
          }
      
          function transferOwnership(address _to) onlyOwner public {
              require(_to != address(0));
              OwnershipTransferred(owner, _to);
              owner = _to;
          }
      
          function unpause() onlyOwner public {
              require(paused);
              paused = false;
              Unpause();
          }
      
          function updateCapFlex(uint32 _capFlex) onlyOwner public {
              require(!finished);
              capFlex = _capFlex;
              CapFlexed(capFlex);
          }
      
          function whitelistMany(
              address[] _participants,
              uint256 _minWeiAmount,
              uint256 _maxWeiAmount,
              uint32 _bonusRate
          )
              onlyOwner
              public
          {
              for (uint256 i = 0; i < _participants.length; i++) {
                  whitelist(
                      _participants[i],
                      _minWeiAmount,
                      _maxWeiAmount,
                      _bonusRate
                  );
              }
          }
      
          function whitelist(
              address _participant,
              uint256 _minWeiAmount,
              uint256 _maxWeiAmount,
              uint32 _bonusRate
          )
              onlyOwner
              public
          {
              require(_participant != 0x0);
              require(_bonusRate <= 400);
      
              whitelistedMin[_participant] = _minWeiAmount;
              whitelistedMax[_participant] = _maxWeiAmount;
              bonusRates[_participant] = _bonusRate;
              Whitelisted(
                  _participant,
                  _minWeiAmount,
                  _maxWeiAmount,
                  _bonusRate
              );
          }
      
          function withdraw() onlyOwner public {
              require(softCapReached() || (finished && now > finishedAt + 14 days));
      
              uint256 weiAmount = this.balance;
      
              if (weiAmount > 0) {
                  wallet.transfer(weiAmount);
                  Withdrawal(wallet, weiAmount);
              }
          }
      
          function hardCapReached() public constant returns (bool) {
              return weiRaised >= hardCap.mul(1000 + capFlex).div(1000);
          }
      
          function tokensForPurchase(
              address _beneficiary,
              uint256 _weiAmount
          )
              public
              constant
              returns (uint256, uint256)
          {
              uint256 baseTokens = _weiAmount.mul(rate);
              uint256 totalPrior = totalDeposited(_beneficiary);
              uint256 totalAfter = totalPrior.add(_weiAmount);
      
              // Has the beneficiary passed the assigned minimum purchase level?
              if (totalAfter < whitelistedMin[_beneficiary]) {
                  return (baseTokens, 0);
              }
      
              uint32 bonusRate = bonusRates[_beneficiary];
              uint256 baseBonus = baseTokens.mul(1000 + bonusRate).div(1000).sub(baseTokens);
      
              // Do we pass the minimum purchase level with this purchase?
              if (totalPrior < whitelistedMin[_beneficiary]) {
                  uint256 balancePrior = totalPrior.mul(rate);
                  uint256 accumulatedBonus = balancePrior.mul(1000 + bonusRate).div(1000).sub(balancePrior);
                  return (baseTokens, accumulatedBonus.add(baseBonus));
              }
      
              return (baseTokens, baseBonus);
          }
      
          function totalDeposited(address _investor) public constant returns (uint256) {
              return deposited[_investor].add(altDeposited[_investor]);
          }
      
          function softCapReached() public constant returns (bool) {
              return weiRaised >= softCap.mul(1000 + capFlex).div(1000);
          }
      }
      
      
      contract TelcoinSaleKYCEscrow {
          using SafeMath for uint256;
      
          event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
          event ValuePlaced(address indexed purchaser, address indexed beneficiary, uint256 amount);
          event Approved(address indexed participant);
          event Rejected(address indexed participant);
          event Closed();
      
          /// The owner of the contract.
          address public owner;
      
          /// The actual sale.
          TelcoinSale public sale;
      
          /// Whether the escrow has closed.
          bool public closed = false;
      
          /// The amount of wei and wei equivalents invested by each investor.
          mapping(address => uint256) public deposited;
      
          modifier onlyOwner() {
              require(msg.sender == owner);
              _;
          }
      
          modifier escrowOpen() {
              require(!closed);
              _;
          }
      
          function TelcoinSaleKYCEscrow(TelcoinSale _sale) public {
              require(_sale != address(0));
      
              owner = msg.sender;
              sale = _sale;
          }
      
          function () public payable {
              placeValue(msg.sender);
          }
      
          function approve(address _participant) onlyOwner public {
              uint256 weiAmount = deposited[_participant];
              require(weiAmount > 0);
      
              deposited[_participant] = 0;
              Approved(_participant);
              sale.buyTokens.value(weiAmount)(_participant);
          }
      
          function approveMany(address[] _participants) onlyOwner public {
              for (uint256 i = 0; i < _participants.length; i++) {
                  approve(_participants[i]);
              }
          }
      
          function close() onlyOwner public {
              require(!closed);
      
              closed = true;
              Closed();
          }
      
          function placeValue(address _beneficiary) escrowOpen public payable {
              require(_beneficiary != address(0));
      
              uint256 weiAmount = msg.value;
              require(weiAmount > 0);
      
              uint256 newDeposited = deposited[_beneficiary].add(weiAmount);
              deposited[_beneficiary] = newDeposited;
      
              ValuePlaced(
                  msg.sender,
                  _beneficiary,
                  weiAmount
              );
          }
      
          function reject(address _participant) onlyOwner public {
              uint256 weiAmount = deposited[_participant];
              require(weiAmount > 0);
      
              deposited[_participant] = 0;
              Rejected(_participant);
              require(_participant.call.value(weiAmount)());
          }
      
          function rejectMany(address[] _participants) onlyOwner public {
              for (uint256 i = 0; i < _participants.length; i++) {
                  reject(_participants[i]);
              }
          }
      
          function transferOwnership(address _to) onlyOwner public {
              require(_to != address(0));
              OwnershipTransferred(owner, _to);
              owner = _to;
          }
      }