Contract 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b 16

 
Txn Hash Method
Block
From
To
Value
0x7aaaebb90c28f2f0d4e48314a06d54a07e03e815f299545f2331e79c69dbfef4Vote_for_gauge_w...703855272023-01-25 17:00:26396 days 5 hrs ago0x6fe797a05359c9d91b1f85d418e2ed4ea6c65a8f IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0001297629090.001
0x2583f0445346b46cd8fa43bcb85cc480e1da21786299ec9f464f6148bbbee619Vote_for_gauge_w...703038302023-01-25 11:18:48396 days 10 hrs ago0x98076110c0d195b468d5776ad89004c5864ffc6d IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000549435060.001
0x7262a7a90bd5b2d07a9fea9a8b2ba49d5bfca0599962cb87a076c753d1b5846cVote_for_gauge_w...659045742023-01-13 15:48:43408 days 6 hrs ago0x6fe797a05359c9d91b1f85d418e2ed4ea6c65a8f IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0001781282650.001
0xb7c1d2114c9554246843a6649bf4ba711cafea02bb8eb9967684f84982082958Vote_for_gauge_w...659044062023-01-13 15:48:28408 days 6 hrs ago0x6fe797a05359c9d91b1f85d418e2ed4ea6c65a8f IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0001771356080.001
0x783df7f6f36fff1f46f6cd8df17689b290bdd81ae9cb3cb61f59f523563356c4Vote_for_gauge_w...602396012023-01-04 20:24:44417 days 1 hr ago0xa9903bda477b9a57bd795adff9922cb98db65f04 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000915523240.001
0x0b9ae6d9a671c45b49f5b5edf28659f1663f4818c52b0cf7c3be524a4cd00679Vote_for_gauge_w...602383352023-01-04 20:18:58417 days 1 hr ago0xa9903bda477b9a57bd795adff9922cb98db65f04 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000849415350.001
0xfa424008e2924b68b84af095acc8648adbbf680a9ae352c799f80aeeda09eaeaVote_for_gauge_w...602378122023-01-04 20:16:13417 days 1 hr ago0xa9903bda477b9a57bd795adff9922cb98db65f04 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000915884970.001
0x7086dcd48a3b1e8706982fe93fb5911eb1fe5bac4cd42c192edc7a5762a2770cVote_for_gauge_w...602376902023-01-04 20:15:43417 days 1 hr ago0xa9903bda477b9a57bd795adff9922cb98db65f04 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000907408420.001
0x7f14c7fe60ba12707046bcf06f39a962dc3946f354d716b8f2d168ea77c4f3d6Vote_for_gauge_w...597502932023-01-04 0:27:42417 days 21 hrs ago0x73bb129019992794002af6f53a86d671a4887901 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000694284890.001
0x6350a871e9664a5254e4a83cbd9543a079e454ace81bfcf0ae8499d30a2c12bbVote_for_gauge_w...580571042022-12-31 3:53:16421 days 18 hrs ago0x266a9ec6801a30096e08563ba2e7630617f1912b IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000597054220.001
0xec4268d8fc130a80980893699f664aee4aa55ad708034b2588c29c61f28297bcVote_for_gauge_w...572576232022-12-29 13:00:45423 days 9 hrs ago0xa9903bda477b9a57bd795adff9922cb98db65f04 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000645021770.001
0x3911ca01267f7431144fd937e8126fadbd7210d99d0d6f5087c906125aa47a66Vote_for_gauge_w...572557532022-12-29 12:56:30423 days 9 hrs ago0xa9903bda477b9a57bd795adff9922cb98db65f04 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000637802170.001
0x39a0b9b74b97a9bd730aad7589c9c29dee4cb49741c4b7cabf3bb1943fcc033aVote_for_gauge_w...532845932022-12-22 4:55:31430 days 17 hrs ago0x6fe797a05359c9d91b1f85d418e2ed4ea6c65a8f IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000510344060.001
0x2d42b879b4b72d6472625042668799803712fcea505ed8ba1c717e960106ef1fVote_for_gauge_w...531950662022-12-22 0:25:42430 days 21 hrs ago0x6fe797a05359c9d91b1f85d418e2ed4ea6c65a8f IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.000045002440.001
0x1ba275196511d30d5858cf35acfa90be03a9e2ded043b2cea4e838e726415f68Vote_for_gauge_w...506275032022-12-16 21:23:51436 days 48 mins ago0x3523481702186c04740e50396d0e1c807ce36c57 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000584549850.001029969
0x7701c2fab003cad175d5e931195106719e76d7c1000118bd2210a3d8efbc06afVote_for_gauge_w...492469522022-12-14 5:28:14438 days 16 hrs ago0x73bb129019992794002af6f53a86d671a4887901 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000577161820.001
0x3922c82df1e23e4ebbe6a35007858e5e2ce79f7aeba2422a45bc52b3fc78cb5dVote_for_gauge_w...491242222022-12-13 23:14:36438 days 22 hrs ago0x1395de9daec52ad405e945603ea0a9346d00d01c IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000735015370.001
0x2a644fd3e33fe6e4b6e759dd9e237bedaee722c4d89dd56efe99db196799491fVote_for_gauge_w...490706812022-12-13 18:16:53439 days 3 hrs ago0x9d6949cfb82266da146daf32c52994e2224a8b38 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0001147740330.001
0x46223a1e602eb861406b7d09e06abebf754c4c3ce9f25c2322896acaf5c4fc60Vote_for_gauge_w...490706402022-12-13 18:16:37439 days 3 hrs ago0x9d6949cfb82266da146daf32c52994e2224a8b38 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0001135300110.001
0xf5c5854f1defda4c87ca73ef37d1fe205448d3539b32809cfcdb5e8914db52a4Vote_for_gauge_w...464614102022-12-07 17:17:25445 days 4 hrs ago0xbdb21e816e455e1642dbe8cef6668a62e180657b IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000715512760.001
0xc6347c72f20d6b0788b601ec6ad7aa80c36745c29b3ed3e6b0f4b99cfbe27b61Vote_for_gauge_w...461310092022-12-06 18:47:41446 days 3 hrs ago0xd3f85ade70adf48ed17c8cb182b8b1aff542e51f IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000916118220.001
0x8183636c7edd45c161f3769b3fa9aee05da08b0f087ca8f864ea171f3fff72e4Vote_for_gauge_w...452935662022-12-04 13:16:57448 days 8 hrs ago0x47a76df5f20b7116a33b9715bc73092fb3690b36 IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000532041820.001
0x23622e0d4f3b821d409c69edb81dd43d661a7a43d40365f7703a16a0d36ed7e6Vote_for_gauge_w...451153712022-12-04 1:26:57448 days 20 hrs ago0x303f2d38ab911296deca9dc19968a854d9cbcadc IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000442718130.001
0xc4f77815cb5b4b77e775959173326bffeff312728b04c78e7fb18b2d93c34eebVote_for_gauge_w...444122542022-12-02 0:53:20450 days 21 hrs ago0xd131f1bcdd547e067af447dd3c36c99d6be9fdeb IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000406369880.001
0x9ee93df53bf1c62fada5325fedd62d8693cb96b65e945b9e93461ca33d348c4bVote_for_gauge_w...443563272022-12-01 18:19:15451 days 3 hrs ago0x6fe797a05359c9d91b1f85d418e2ed4ea6c65a8f IN  0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH0.0000598880670.001
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3d4256058651892f6dc8d9895d093605d036f3210873388212b8565551fca3751066665892023-07-09 19:45:55231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x3d4256058651892f6dc8d9895d093605d036f3210873388212b8565551fca3751066665892023-07-09 19:45:55231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x5734bb74cfac69f1c34ba66ea6608ccdee6b81f2 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x998b61372921ebd9a83cb046b299cbb8e1fc8d2b98cc2375fd6309ff7cdfccf11066665482023-07-09 19:44:33231 days 2 hrs ago 0x4adf575dbe0e6f1c5909ae9c7119927b4faabbbd 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x124865b1ec3ff70989d2262b6eba67e6822701b3835bcfee0ed3c0990f6390171057759152023-06-19 4:56:47251 days 17 hrs ago 0x73280c390da5c6fe05ad2d1e6837e8e8c05e4b32 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0x124865b1ec3ff70989d2262b6eba67e6822701b3835bcfee0ed3c0990f6390171057759152023-06-19 4:56:47251 days 17 hrs ago 0x73280c390da5c6fe05ad2d1e6837e8e8c05e4b32 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0xbdded457a5f77f2f2adeeaaf1f39f189fb8e8e3faff8db5f5aeee5c760d0815b1057758092023-06-19 4:53:15251 days 17 hrs ago 0x73280c390da5c6fe05ad2d1e6837e8e8c05e4b32 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0xbdded457a5f77f2f2adeeaaf1f39f189fb8e8e3faff8db5f5aeee5c760d0815b1057758092023-06-19 4:53:15251 days 17 hrs ago 0x73280c390da5c6fe05ad2d1e6837e8e8c05e4b32 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0xbdded457a5f77f2f2adeeaaf1f39f189fb8e8e3faff8db5f5aeee5c760d0815b1057758092023-06-19 4:53:15251 days 17 hrs ago 0x73280c390da5c6fe05ad2d1e6837e8e8c05e4b32 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0xbdded457a5f77f2f2adeeaaf1f39f189fb8e8e3faff8db5f5aeee5c760d0815b1057758092023-06-19 4:53:15251 days 17 hrs ago 0x73280c390da5c6fe05ad2d1e6837e8e8c05e4b32 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
0xbdded457a5f77f2f2adeeaaf1f39f189fb8e8e3faff8db5f5aeee5c760d0815b1057758092023-06-19 4:53:15251 days 17 hrs ago 0x73280c390da5c6fe05ad2d1e6837e8e8c05e4b32 0xba57440fa35fdb671e58f6f56c1a4447ab1f6c2b0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.15

Optimization Enabled:
N/A

Other Settings:
MIT license

Contract Source Code (Vyper language format)

# @version 0.2.15

"""
@title Gauge Controller
@author Curve Finance
@license MIT
@notice Controls liquidity gauges and the issuance of coins through the gauges
"""

# 7 * 86400 seconds - all future times are rounded by week
WEEK: constant(uint256) = 604800


struct Point:
    bias: uint256
    slope: uint256

struct VotedSlope:
    slope: uint256
    power: uint256
    end: uint256

struct MirroredChain:
    chain_id: uint256
    escrow_count: uint256


interface MirroredVotingEscrow:
    def get_last_user_slope(_addr: address, _chain: uint256, _escrow_id: uint256) -> int128: view
    def locked__end(_addr: address, _chain: uint256, _escrow_id: uint256) -> uint256: view
    def mirrored_chains_count() -> uint256: view
    def mirrored_chains(_idx: uint256) -> MirroredChain: view
    def voting_escrow_count() -> uint256: view


event CommitOwnership:
    admin: address

event ApplyOwnership:
    admin: address

event AddType:
    name: String[64]
    type_id: int128

event NewTypeWeight:
    type_id: int128
    time: uint256
    weight: uint256
    total_weight: uint256

event NewGaugeWeight:
    gauge_address: address
    time: uint256
    weight: uint256
    total_weight: uint256

event VoteForGauge:
    time: uint256
    user: address
    gauge_addr: address
    weight: uint256

event NewGauge:
    addr: address
    gauge_type: int128
    weight: uint256


MULTIPLIER: constant(uint256) = 10 ** 18

admin: public(address)  # Can and will be a smart contract
future_admin: public(address)  # Can and will be a smart contract

voting_escrow: public(address)  # Mirrored Voting escrow

# Gauge parameters
# All numbers are "fixed point" on the basis of 1e18
n_gauge_types: public(int128)
n_gauges: public(int128)
gauge_type_names: public(HashMap[int128, String[64]])

# Needed for enumeration
gauges: public(address[1000000000])

# we increment values by 1 prior to storing them here so we can rely on a value
# of zero as meaning the gauge has not been set
gauge_types_: HashMap[address, int128]

vote_user_slopes: public(HashMap[address, HashMap[address, HashMap[uint256, HashMap[uint256, VotedSlope]]]])  # user -> gauge_addr -> chain -> escrow_id -> VotedSlope
vote_user_power: public(HashMap[address, HashMap[uint256, HashMap[uint256, uint256]]])  # Total vote power used by user and chain
last_user_vote: public(HashMap[address, HashMap[address, uint256]])  # Last user vote's timestamp for each gauge address

# Past and scheduled points for gauge weight, sum of weights per type, total weight
# Point is for bias+slope
# changes_* are for changes in slope
# time_* are for the last change timestamp
# timestamps are rounded to whole weeks

points_weight: public(HashMap[address, HashMap[uint256, Point]])  # gauge_addr -> time -> Point
changes_weight: HashMap[address, HashMap[uint256, uint256]]  # gauge_addr -> time -> slope
time_weight: public(HashMap[address, uint256])  # gauge_addr -> last scheduled time (next week)

points_sum: public(HashMap[int128, HashMap[uint256, Point]])  # type_id -> time -> Point
changes_sum: HashMap[int128, HashMap[uint256, uint256]]  # type_id -> time -> slope
time_sum: public(uint256[1000000000])  # type_id -> last scheduled time (next week)

points_total: public(HashMap[uint256, uint256])  # time -> total weight
time_total: public(uint256)  # last scheduled time

points_type_weight: public(HashMap[int128, HashMap[uint256, uint256]])  # type_id -> time -> type weight
time_type_weight: public(uint256[1000000000])  # type_id -> last scheduled time (next week)


@external
def __init__(_mirrored_voting_escrow: address, _admin: address):
    """
    @notice Contract constructor
    @param _mirrored_voting_escrow `MirroredVotingEscrow` contract address
    """
    assert _mirrored_voting_escrow != ZERO_ADDRESS

    self.admin = _admin
    self.voting_escrow = _mirrored_voting_escrow
    self.time_total = block.timestamp / WEEK * WEEK


@external
def commit_transfer_ownership(addr: address):
    """
    @notice Transfer ownership of GaugeController to `addr`
    @param addr Address to have ownership transferred to
    """
    assert msg.sender == self.admin  # dev: admin only
    self.future_admin = addr
    log CommitOwnership(addr)


@external
def apply_transfer_ownership():
    """
    @notice Apply pending ownership transfer
    """
    assert msg.sender == self.admin  # dev: admin only
    _admin: address = self.future_admin
    assert _admin != ZERO_ADDRESS  # dev: admin not set
    self.admin = _admin
    log ApplyOwnership(_admin)


@external
@view
def gauge_types(_addr: address) -> int128:
    """
    @notice Get gauge type for address
    @param _addr Gauge address
    @return Gauge type id
    """
    gauge_type: int128 = self.gauge_types_[_addr]
    assert gauge_type != 0

    return gauge_type - 1


@internal
def _get_type_weight(gauge_type: int128) -> uint256:
    """
    @notice Fill historic type weights week-over-week for missed checkins
            and return the type weight for the future week
    @param gauge_type Gauge type id
    @return Type weight
    """
    t: uint256 = self.time_type_weight[gauge_type]
    if t > 0:
        w: uint256 = self.points_type_weight[gauge_type][t]
        for i in range(500):
            if t > block.timestamp:
                break
            t += WEEK
            self.points_type_weight[gauge_type][t] = w
            if t > block.timestamp:
                self.time_type_weight[gauge_type] = t
        return w
    else:
        return 0


@internal
def _get_sum(gauge_type: int128) -> uint256:
    """
    @notice Fill sum of gauge weights for the same type week-over-week for
            missed checkins and return the sum for the future week
    @param gauge_type Gauge type id
    @return Sum of weights
    """
    t: uint256 = self.time_sum[gauge_type]
    if t > 0:
        pt: Point = self.points_sum[gauge_type][t]
        for i in range(500):
            if t > block.timestamp:
                break
            t += WEEK
            d_bias: uint256 = pt.slope * WEEK
            if pt.bias > d_bias:
                pt.bias -= d_bias
                d_slope: uint256 = self.changes_sum[gauge_type][t]
                pt.slope -= d_slope
            else:
                pt.bias = 0
                pt.slope = 0
            self.points_sum[gauge_type][t] = pt
            if t > block.timestamp:
                self.time_sum[gauge_type] = t
        return pt.bias
    else:
        return 0


@internal
def _get_total() -> uint256:
    """
    @notice Fill historic total weights week-over-week for missed checkins
            and return the total for the future week
    @return Total weight
    """
    t: uint256 = self.time_total
    _n_gauge_types: int128 = self.n_gauge_types
    if t > block.timestamp:
        # If we have already checkpointed - still need to change the value
        t -= WEEK
    pt: uint256 = self.points_total[t]

    for gauge_type in range(100):
        if gauge_type == _n_gauge_types:
            break
        self._get_sum(gauge_type)
        self._get_type_weight(gauge_type)

    for i in range(500):
        if t > block.timestamp:
            break
        t += WEEK
        pt = 0
        # Scales as n_types * n_unchecked_weeks (hopefully 1 at most)
        for gauge_type in range(100):
            if gauge_type == _n_gauge_types:
                break
            type_sum: uint256 = self.points_sum[gauge_type][t].bias
            type_weight: uint256 = self.points_type_weight[gauge_type][t]
            pt += type_sum * type_weight
        self.points_total[t] = pt

        if t > block.timestamp:
            self.time_total = t
    return pt


@internal
def _get_weight(gauge_addr: address) -> uint256:
    """
    @notice Fill historic gauge weights week-over-week for missed checkins
            and return the total for the future week
    @param gauge_addr Address of the gauge
    @return Gauge weight
    """
    t: uint256 = self.time_weight[gauge_addr]
    if t > 0:
        pt: Point = self.points_weight[gauge_addr][t]
        for i in range(500):
            if t > block.timestamp:
                break
            t += WEEK
            d_bias: uint256 = pt.slope * WEEK
            if pt.bias > d_bias:
                pt.bias -= d_bias
                d_slope: uint256 = self.changes_weight[gauge_addr][t]
                pt.slope -= d_slope
            else:
                pt.bias = 0
                pt.slope = 0
            self.points_weight[gauge_addr][t] = pt
            if t > block.timestamp:
                self.time_weight[gauge_addr] = t
        return pt.bias
    else:
        return 0


@external
def add_gauge(addr: address, gauge_type: int128, weight: uint256 = 0):
    """
    @notice Add gauge `addr` of type `gauge_type` with weight `weight`
    @param addr Gauge address
    @param gauge_type Gauge type
    @param weight Gauge weight
    """
    assert msg.sender == self.admin
    assert (gauge_type >= 0) and (gauge_type < self.n_gauge_types)
    assert self.gauge_types_[addr] == 0  # dev: cannot add the same gauge twice

    n: int128 = self.n_gauges
    self.n_gauges = n + 1
    self.gauges[n] = addr

    self.gauge_types_[addr] = gauge_type + 1
    next_time: uint256 = (block.timestamp + WEEK) / WEEK * WEEK

    if weight > 0:
        _type_weight: uint256 = self._get_type_weight(gauge_type)
        _old_sum: uint256 = self._get_sum(gauge_type)
        _old_total: uint256 = self._get_total()

        self.points_sum[gauge_type][next_time].bias = weight + _old_sum
        self.time_sum[gauge_type] = next_time
        self.points_total[next_time] = _old_total + _type_weight * weight
        self.time_total = next_time

        self.points_weight[addr][next_time].bias = weight

    if self.time_sum[gauge_type] == 0:
        self.time_sum[gauge_type] = next_time
    self.time_weight[addr] = next_time

    log NewGauge(addr, gauge_type, weight)


@external
def checkpoint():
    """
    @notice Checkpoint to fill data common for all gauges
    """
    self._get_total()


@external
def checkpoint_gauge(addr: address):
    """
    @notice Checkpoint to fill data for both a specific gauge and common for all gauges
    @param addr Gauge address
    """
    self._get_weight(addr)
    self._get_total()


@internal
@view
def _gauge_relative_weight(addr: address, time: uint256) -> uint256:
    """
    @notice Get Gauge relative weight (not more than 1.0) normalized to 1e18
            (e.g. 1.0 == 1e18). Inflation which will be received by it is
            inflation_rate * relative_weight / 1e18
    @param addr Gauge address
    @param time Relative weight at the specified timestamp in the past or present
    @return Value of relative weight normalized to 1e18
    """
    t: uint256 = time / WEEK * WEEK
    _total_weight: uint256 = self.points_total[t]

    if _total_weight > 0:
        gauge_type: int128 = self.gauge_types_[addr] - 1
        _type_weight: uint256 = self.points_type_weight[gauge_type][t]
        _gauge_weight: uint256 = self.points_weight[addr][t].bias
        return MULTIPLIER * _type_weight * _gauge_weight / _total_weight

    else:
        return 0


@external
@view
def gauge_relative_weight(addr: address, time: uint256 = block.timestamp) -> uint256:
    """
    @notice Get Gauge relative weight (not more than 1.0) normalized to 1e18
            (e.g. 1.0 == 1e18). Inflation which will be received by it is
            inflation_rate * relative_weight / 1e18
    @param addr Gauge address
    @param time Relative weight at the specified timestamp in the past or present
    @return Value of relative weight normalized to 1e18
    """
    return self._gauge_relative_weight(addr, time)


@external
def gauge_relative_weight_write(addr: address, time: uint256 = block.timestamp) -> uint256:
    """
    @notice Get gauge weight normalized to 1e18 and also fill all the unfilled
            values for type and gauge records
    @dev Any address can call, however nothing is recorded if the values are filled already
    @param addr Gauge address
    @param time Relative weight at the specified timestamp in the past or present
    @return Value of relative weight normalized to 1e18
    """
    self._get_weight(addr)
    self._get_total()  # Also calculates get_sum
    return self._gauge_relative_weight(addr, time)




@internal
def _change_type_weight(type_id: int128, weight: uint256):
    """
    @notice Change type weight
    @param type_id Type id
    @param weight New type weight
    """
    old_weight: uint256 = self._get_type_weight(type_id)
    old_sum: uint256 = self._get_sum(type_id)
    _total_weight: uint256 = self._get_total()
    next_time: uint256 = (block.timestamp + WEEK) / WEEK * WEEK

    _total_weight = _total_weight + old_sum * weight - old_sum * old_weight
    self.points_total[next_time] = _total_weight
    self.points_type_weight[type_id][next_time] = weight
    self.time_total = next_time
    self.time_type_weight[type_id] = next_time

    log NewTypeWeight(type_id, next_time, weight, _total_weight)


@external
def add_type(_name: String[64], weight: uint256 = 0):
    """
    @notice Add gauge type with name `_name` and weight `weight`
    @param _name Name of gauge type
    @param weight Weight of gauge type
    """
    assert msg.sender == self.admin
    type_id: int128 = self.n_gauge_types
    self.gauge_type_names[type_id] = _name
    self.n_gauge_types = type_id + 1
    if weight != 0:
        self._change_type_weight(type_id, weight)
        log AddType(_name, type_id)


@external
def change_type_weight(type_id: int128, weight: uint256):
    """
    @notice Change gauge type `type_id` weight to `weight`
    @param type_id Gauge type id
    @param weight New Gauge weight
    """
    assert msg.sender == self.admin
    self._change_type_weight(type_id, weight)


@internal
def _change_gauge_weight(addr: address, weight: uint256):
    # Change gauge weight
    # Only needed when testing in reality
    gauge_type: int128 = self.gauge_types_[addr] - 1
    old_gauge_weight: uint256 = self._get_weight(addr)
    type_weight: uint256 = self._get_type_weight(gauge_type)
    old_sum: uint256 = self._get_sum(gauge_type)
    _total_weight: uint256 = self._get_total()
    next_time: uint256 = (block.timestamp + WEEK) / WEEK * WEEK

    self.points_weight[addr][next_time].bias = weight
    self.time_weight[addr] = next_time

    new_sum: uint256 = old_sum + weight - old_gauge_weight
    self.points_sum[gauge_type][next_time].bias = new_sum
    self.time_sum[gauge_type] = next_time

    _total_weight = _total_weight + new_sum * type_weight - old_sum * type_weight
    self.points_total[next_time] = _total_weight
    self.time_total = next_time

    log NewGaugeWeight(addr, block.timestamp, weight, _total_weight)


@external
def change_gauge_weight(addr: address, weight: uint256):
    """
    @notice Change weight of gauge `addr` to `weight`
    @param addr `GaugeController` contract address
    @param weight New Gauge weight
    """
    assert msg.sender == self.admin
    self._change_gauge_weight(addr, weight)


@internal
def _vote_for_chain_gauge_weights(_user: address, _chain: uint256, _escrow_id: uint256, _gauge_addr: address, _user_weight: uint256):
    escrow: address = self.voting_escrow
    slope: uint256 = convert(MirroredVotingEscrow(escrow).get_last_user_slope(_user, _chain, _escrow_id), uint256)
    lock_end: uint256 = MirroredVotingEscrow(escrow).locked__end(_user, _chain, _escrow_id)
    next_time: uint256 = (block.timestamp + WEEK) / WEEK * WEEK
    
    # skip if lock is expired on a given chain
    if lock_end <= next_time:
        return

    gauge_type: int128 = self.gauge_types_[_gauge_addr] - 1
    assert gauge_type >= 0, "Gauge not added"
    # Prepare slopes and biases in memory
    old_slope: VotedSlope = self.vote_user_slopes[_user][_gauge_addr][_chain][_escrow_id]
    old_dt: uint256 = 0
    if old_slope.end > next_time:
        old_dt = old_slope.end - next_time
    old_bias: uint256 = old_slope.slope * old_dt
    new_slope: VotedSlope = VotedSlope({
        slope: slope * _user_weight / 10000,
        end: lock_end,
        power: _user_weight
    })
    new_dt: uint256 = lock_end - next_time  # dev: raises when expired
    new_bias: uint256 = new_slope.slope * new_dt

    # Check and update powers (weights) used
    power_used: uint256 = self.vote_user_power[_user][_chain][_escrow_id]
    power_used = power_used + new_slope.power - old_slope.power
    self.vote_user_power[_user][_chain][_escrow_id] = power_used
    assert power_used <= 10000, 'Used too much power'

    ## Remove old and schedule new slope changes
    # Remove slope changes for old slopes
    # Schedule recording of initial slope for next_time
    old_weight_bias: uint256 = self._get_weight(_gauge_addr)
    old_weight_slope: uint256 = self.points_weight[_gauge_addr][next_time].slope
    old_sum_bias: uint256 = self._get_sum(gauge_type)
    old_sum_slope: uint256 = self.points_sum[gauge_type][next_time].slope

    self.points_weight[_gauge_addr][next_time].bias = max(old_weight_bias + new_bias, old_bias) - old_bias
    self.points_sum[gauge_type][next_time].bias = max(old_sum_bias + new_bias, old_bias) - old_bias
    if old_slope.end > next_time:
        self.points_weight[_gauge_addr][next_time].slope = max(old_weight_slope + new_slope.slope, old_slope.slope) - old_slope.slope
        self.points_sum[gauge_type][next_time].slope = max(old_sum_slope + new_slope.slope, old_slope.slope) - old_slope.slope
    else:
        self.points_weight[_gauge_addr][next_time].slope += new_slope.slope
        self.points_sum[gauge_type][next_time].slope += new_slope.slope
    if old_slope.end > block.timestamp:
        # Cancel old slope changes if they still didn't happen
        self.changes_weight[_gauge_addr][old_slope.end] -= old_slope.slope
        self.changes_sum[gauge_type][old_slope.end] -= old_slope.slope
    # Add slope changes for new slopes
    self.changes_weight[_gauge_addr][new_slope.end] += new_slope.slope
    self.changes_sum[gauge_type][new_slope.end] += new_slope.slope

    self._get_total()

    self.vote_user_slopes[_user][_gauge_addr][_chain][_escrow_id] = new_slope

    # Record last action time
    self.last_user_vote[_user][_gauge_addr] = block.timestamp


@internal
def _vote_for_gauge_weights(_sender: address, _gauge_addr: address, _user_weight: uint256):
    """
    @notice Allocate voting power for changing pool weights
    @param _sender voter address
    @param _gauge_addr Gauge which `msg.sender` votes for
    @param _user_weight Weight for a gauge in bps (units of 0.01%). Minimal is 0.01%. Ignored if 0
    """
    assert (_user_weight >= 0) and (_user_weight <= 10000), "You used all your voting power"

    _escrow_count: uint256 = MirroredVotingEscrow(self.voting_escrow).voting_escrow_count()
    for i in range(99):
        if i >= _escrow_count:
            break
        self._vote_for_chain_gauge_weights(_sender, 0, i, _gauge_addr, _user_weight)
    
    _chain_count: uint256 = MirroredVotingEscrow(self.voting_escrow).mirrored_chains_count()
    for i in range(99):
        if i >= _chain_count:
            break
        
        _chain: MirroredChain = MirroredVotingEscrow(self.voting_escrow).mirrored_chains(i)
        for j in range(99):
            if j >= _chain.escrow_count:
                break
            self._vote_for_chain_gauge_weights(_sender, _chain.chain_id, j, _gauge_addr, _user_weight)

    log VoteForGauge(block.timestamp, _sender, _gauge_addr, _user_weight)


@external
def vote_for_gauge_weights(_gauge_addr: address, _user_weight: uint256):
    self._vote_for_gauge_weights(msg.sender, _gauge_addr, _user_weight)


@external
def vote_for_many_gauge_weights(_gauge_addr: address[10], _user_weight: uint256[10]):
    for i in range(9):
        if _gauge_addr[i] == ZERO_ADDRESS:
            break

        self._vote_for_gauge_weights(msg.sender, _gauge_addr[i], _user_weight[i])


@external
@view
def user_vote_power(addr: address) -> uint256:
    _used_power: uint256 = 0

    _escrow_count: uint256 = MirroredVotingEscrow(self.voting_escrow).voting_escrow_count()
    for i in range(99):
        if i >= _escrow_count:
            break

        _used_power = self.vote_user_power[addr][0][i]
        if _used_power > 0:
            return _used_power

    _chain_count: uint256 = MirroredVotingEscrow(self.voting_escrow).mirrored_chains_count()
    for i in range(99):
        if i >= _chain_count:
            break

        _chain: MirroredChain = MirroredVotingEscrow(self.voting_escrow).mirrored_chains(i)
        for j in range(99):
            if j >= _chain.escrow_count:
                break

            _used_power = self.vote_user_power[addr][_chain.chain_id][j]

            if _used_power > 0:
                break

    return _used_power


@external
@view
def vote_user_power_for_gauge(addr: address, gauge: address) -> uint256:
    _used_power: uint256 = 0

    _escrow_count: uint256 = MirroredVotingEscrow(self.voting_escrow).voting_escrow_count()
    for i in range(99):
        if i >= _escrow_count:
            break

        _used_power = self.vote_user_slopes[addr][gauge][0][i].power
        if _used_power > 0:
            return _used_power

    _chain_count: uint256 = MirroredVotingEscrow(self.voting_escrow).mirrored_chains_count()
    for i in range(99):
        if i >= _chain_count:
            break

        _chain: MirroredChain = MirroredVotingEscrow(self.voting_escrow).mirrored_chains(i)
        for j in range(99):
            if j >= _chain.escrow_count:
                break

            if _used_power == 0:
                _used_power = self.vote_user_slopes[addr][gauge][_chain.chain_id][j].power

            if _used_power > 0:
                break

    return _used_power


@external
@view
def get_gauge_weight(addr: address) -> uint256:
    """
    @notice Get current gauge weight
    @param addr Gauge address
    @return Gauge weight
    """
    return self.points_weight[addr][self.time_weight[addr]].bias


@external
@view
def get_type_weight(type_id: int128) -> uint256:
    """
    @notice Get current type weight
    @param type_id Type id
    @return Type weight
    """
    return self.points_type_weight[type_id][self.time_type_weight[type_id]]


@external
@view
def get_total_weight() -> uint256:
    """
    @notice Get current total (type-weighted) weight
    @return Total weight
    """
    return self.points_total[self.time_total]


@external
@view
def get_weights_sum_per_type(type_id: int128) -> uint256:
    """
    @notice Get sum of gauge weights per type
    @param type_id Type id
    @return Sum of gauge weights
    """
    return self.points_sum[type_id][self.time_sum[type_id]].bias

Contract Security Audit

Contract ABI

[{"name":"CommitOwnership","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyOwnership","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddType","inputs":[{"name":"name","type":"string","indexed":false},{"name":"type_id","type":"int128","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewTypeWeight","inputs":[{"name":"type_id","type":"int128","indexed":false},{"name":"time","type":"uint256","indexed":false},{"name":"weight","type":"uint256","indexed":false},{"name":"total_weight","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewGaugeWeight","inputs":[{"name":"gauge_address","type":"address","indexed":false},{"name":"time","type":"uint256","indexed":false},{"name":"weight","type":"uint256","indexed":false},{"name":"total_weight","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"VoteForGauge","inputs":[{"name":"time","type":"uint256","indexed":false},{"name":"user","type":"address","indexed":false},{"name":"gauge_addr","type":"address","indexed":false},{"name":"weight","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewGauge","inputs":[{"name":"addr","type":"address","indexed":false},{"name":"gauge_type","type":"int128","indexed":false},{"name":"weight","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_mirrored_voting_escrow","type":"address"},{"name":"_admin","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":38895},{"stateMutability":"nonpayable","type":"function","name":"apply_transfer_ownership","inputs":[],"outputs":[],"gas":41034},{"stateMutability":"view","type":"function","name":"gauge_types","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"int128"}],"gas":3014},{"stateMutability":"nonpayable","type":"function","name":"add_gauge","inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"add_gauge","inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"checkpoint","inputs":[],"outputs":[],"gas":18271410417},{"stateMutability":"nonpayable","type":"function","name":"checkpoint_gauge","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":18325922441},{"stateMutability":"view","type":"function","name":"gauge_relative_weight","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_relative_weight","inputs":[{"name":"addr","type":"address"},{"name":"time","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"gauge_relative_weight_write","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"gauge_relative_weight_write","inputs":[{"name":"addr","type":"address"},{"name":"time","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"add_type","inputs":[{"name":"_name","type":"string"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"add_type","inputs":[{"name":"_name","type":"string"},{"name":"weight","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"change_type_weight","inputs":[{"name":"type_id","type":"int128"},{"name":"weight","type":"uint256"}],"outputs":[],"gas":36722675398},{"stateMutability":"nonpayable","type":"function","name":"change_gauge_weight","inputs":[{"name":"addr","type":"address"},{"name":"weight","type":"uint256"}],"outputs":[],"gas":36831772473},{"stateMutability":"nonpayable","type":"function","name":"vote_for_gauge_weights","inputs":[{"name":"_gauge_addr","type":"address"},{"name":"_user_weight","type":"uint256"}],"outputs":[],"gas":727873652557724},{"stateMutability":"nonpayable","type":"function","name":"vote_for_many_gauge_weights","inputs":[{"name":"_gauge_addr","type":"address[10]"},{"name":"_user_weight","type":"uint256[10]"}],"outputs":[],"gas":6550862873016902},{"stateMutability":"view","type":"function","name":"user_vote_power","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":27298116},{"stateMutability":"view","type":"function","name":"vote_user_power_for_gauge","inputs":[{"name":"addr","type":"address"},{"name":"gauge","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":29064604},{"stateMutability":"view","type":"function","name":"get_gauge_weight","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":5380},{"stateMutability":"view","type":"function","name":"get_type_weight","inputs":[{"name":"type_id","type":"int128"}],"outputs":[{"name":"","type":"uint256"}],"gas":5421},{"stateMutability":"view","type":"function","name":"get_total_weight","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":5110},{"stateMutability":"view","type":"function","name":"get_weights_sum_per_type","inputs":[{"name":"type_id","type":"int128"}],"outputs":[{"name":"","type":"uint256"}],"gas":5481},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2958},{"stateMutability":"view","type":"function","name":"future_admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2988},{"stateMutability":"view","type":"function","name":"voting_escrow","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3018},{"stateMutability":"view","type":"function","name":"n_gauge_types","inputs":[],"outputs":[{"name":"","type":"int128"}],"gas":3048},{"stateMutability":"view","type":"function","name":"n_gauges","inputs":[],"outputs":[{"name":"","type":"int128"}],"gas":3078},{"stateMutability":"view","type":"function","name":"gauge_type_names","inputs":[{"name":"arg0","type":"int128"}],"outputs":[{"name":"","type":"string"}],"gas":13634},{"stateMutability":"view","type":"function","name":"gauges","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3183},{"stateMutability":"view","type":"function","name":"vote_user_slopes","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"},{"name":"arg2","type":"uint256"},{"name":"arg3","type":"uint256"}],"outputs":[{"name":"slope","type":"uint256"},{"name":"power","type":"uint256"},{"name":"end","type":"uint256"}],"gas":8428},{"stateMutability":"view","type":"function","name":"vote_user_power","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"},{"name":"arg2","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3643},{"stateMutability":"view","type":"function","name":"last_user_vote","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3658},{"stateMutability":"view","type":"function","name":"points_weight","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"bias","type":"uint256"},{"name":"slope","type":"uint256"}],"gas":5978},{"stateMutability":"view","type":"function","name":"time_weight","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3503},{"stateMutability":"view","type":"function","name":"points_sum","inputs":[{"name":"arg0","type":"int128"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"bias","type":"uint256"},{"name":"slope","type":"uint256"}],"gas":6119},{"stateMutability":"view","type":"function","name":"time_sum","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3393},{"stateMutability":"view","type":"function","name":"points_total","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3493},{"stateMutability":"view","type":"function","name":"time_total","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3408},{"stateMutability":"view","type":"function","name":"points_type_weight","inputs":[{"name":"arg0","type":"int128"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3849},{"stateMutability":"view","type":"function","name":"time_type_weight","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3513}]

6040612f1c610140396020612f1c60c03960c05160a01c612f175760206020612f1c0160c03960c05160a01c612f17576000610140511815612f175761016051600055610140516002554262093a808082049050905062093a80808202821582848304141715612f175780905090509050637735941055612eff56600436101561000d57611456565b600035601c5260005134612e7f57636b441a408114156100715760043560a01c612e7f57600054331415612e7f57600435600155600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b636a1c05ae8114156100d257600054331415612e7f57600154610140526000610140511815612e7f576101405160005561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b633f9095b78114156101385760043560a01c612e7f57633b9aca0660043560e05260c052604060c02054610140526000610140511815612e7f576101405160018082038080600081121561012257195b607f1c612e7f5790509050905060005260206000f35b633a04f90081141561014f57600061014052610170565b6318dfe92181141561016b576020604461014037600050610170565b6104c7565b60043560a01c612e7f576024358080600081121561018a57195b607f1c612e7f57905050600054331415612e7f576000602435126101b457600354602435126101b7565b60005b15612e7f57633b9aca0660043560e05260c052604060c02054612e7f5760045461016052610160516001808201808060008112156101f157195b607f1c612e7f57905090509050600455600435600161016051633b9aca00811015612e7f57026006015560243560018082018080600081121561023057195b607f1c612e7f57905090509050633b9aca0660043560e05260c052604060c020554262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f578090509050905061018052600061014051111561043b576101405161016051610180516101a0516024356101c0526101c0516006580161145c565b610220526101a052610180526101605261014052610220516101a0526101405161016051610180516101a0516101c0516024356101e0526101e05160065801611578565b610240526101c0526101a052610180526101605261014052610240516101c0526101405161016051610180516101a0516101c0516101e0516006580161174f565b610200526101e0526101c0526101a052610180526101605261014052610200516101e052610140516101c0518181830110612e7f5780820190509050633b9aca0d60243560e05260c052604060c0206101805160e05260c052604060c02055610180516001602435633b9aca00811015612e7f5702633b9aca0f01556101e0516101a05161014051808202821582848304141715612e7f57809050905090508181830110612e7f5780820190509050637735940f6101805160e05260c052604060c020556101805163773594105561014051633b9aca0a60043560e05260c052604060c0206101805160e05260c052604060c020555b6001602435633b9aca00811015612e7f5702633b9aca0f015461047657610180516001602435633b9aca00811015612e7f5702633b9aca0f01555b61018051633b9aca0c60043560e05260c052604060c02055604060046101a037610140516101e0527ffd55b3191f9c9dd92f4f134dd700e7d76f6a0c836a08687023d6d38f03ebd87760606101a0a1005b63c2c4c5c18114156104e6576006580161174f565b6101405261014050005b63615e523781141561052b5760043560a01c612e7f576004356101405261014051600658016119a9565b6101a0526101a0506006580161174f565b6101405261014050005b636207d866811415610541574261014052610562565b63d3078c9481141561055d576020602461014037600050610562565b6105a5565b60043560a01c612e7f5761014051600435610160526101405161018052610180516101605160065801611b76565b6101e052610140526101e05160005260206000f35b6395cfcec38114156105bb5742610140526105dc565b636472eee18114156105d75760206024610140376000506105dc565b61065c565b60043560a01c612e7f57610140516004356101605261016051600658016119a9565b6101c052610140526101c050610140516006580161174f565b61016052610140526101605061014051600435610160526101405161018052610180516101605160065801611b76565b6101e052610140526101e05160005260206000f35b6326e56d5e8114156106735760006101c052610694565b6392d0d23281141561068f57602060246101c037600050610694565b610857565b60606004356004016101403760406004356004013511612e7f57600054331415612e7f576003546101e0526101408060056101e05160e05260c052604060c020602082510161012060006003818352015b826101205160200211156106f85761071a565b61012051602002850151610120518501555b81516001018083528114156106e5575b5050505050506101e05160018082018080600081121561073657195b607f1c612e7f5790509050905060035560006101c0511815610855576101405161016051610180516101a0516101c0516101e0516101e051610200526101c05161022052610220516102005160065801611ccd565b6101e0526101c0526101a0526101805261016052610140526000506101e05161026052604061020052610200516102405261014080516020018061020051610240018284600060045af115612e7f57505061020051610240015180602061020051610240010101818260206001820306601f8201039050033682375050602061020051610240015160206001820306601f8201039050610200510101610200527f6fbe76157c712f16b5a3c44ed48baa04e3450bc3fab0c020e848aca72bbccc8461020051610240a15b005b63db1ca2608114156108ab576004358080600081121561087357195b607f1c612e7f57905050600054331415612e7f576004356101405260243561016052610160516101405160065801611ccd565b600050005b63d4d2646e8114156108ef5760043560a01c612e7f57600054331415612e7f576004356101405260243561016052610160516101405160065801611f00565b600050005b63d71363288114156109325760043560a01c612e7f573361014052600435610160526024356101805261018051610160516101405160065801612b56565b600050005b6381237fbf811415610a05576000610120525b610120516004013560a01c612e7f57602061012051016101205261014061012051101561097157610945565b61014060006009818352015b600461014051600a811015612e7f57602002013561099a57610a01565b610140513361016052600461014051600a811015612e7f5760200201356101805261014461014051600a811015612e7f5760200201356101a0526101a051610180516101605160065801612b56565b610140526000505b815160010180835281141561097d575b5050005b63f782f0ea811415610c1e5760043560a01c612e7f5760006101405260206101e0600463730762b86101805261019c6002545afa15612e7f57601f3d1115612e7f576000506101e0516101605261018060006063818352015b610160516101805110610a7057610ace565b633b9aca0860043560e05260c052604060c020600060e05260c052604060c0206101805160e05260c052604060c02054610140526000610140511115610abd576101405160005260206000f35b5b8151600101808352811415610a5e575b50506020610200600463f1d90a156101a0526101bc6002545afa15612e7f57601f3d1115612e7f5760005061020051610180526101a060006063818352015b610180516101a05110610b1f57610c0f565b6101c0604061028060246327294447610200526101a0516102205261021c6002545afa15612e7f57603f3d1115612e7f5761028080808080516102c0525050602081019050808080516102e052505050506000506102c08051825280602001518260200152505061020060006063818352015b6101e0516102005110610ba457610bfc565b633b9aca0860043560e05260c052604060c0206101c05160e05260c052604060c0206102005160e05260c052604060c02054610140526000610140511115610beb57610bfc565b5b8151600101808352811415610b92575b50505b8151600101808352811415610b0d575b50506101405160005260206000f35b6355dd6788811415610e6c5760043560a01c612e7f5760243560a01c612e7f5760006101405260206101e0600463730762b86101805261019c6002545afa15612e7f57601f3d1115612e7f576000506101e0516101605261018060006063818352015b610160516101805110610c9357610d02565b6001633b9aca0760043560e05260c052604060c02060243560e05260c052604060c020600060e05260c052604060c0206101805160e05260c052604060c0200154610140526000610140511115610cf1576101405160005260206000f35b5b8151600101808352811415610c81575b50506020610200600463f1d90a156101a0526101bc6002545afa15612e7f57601f3d1115612e7f5760005061020051610180526101a060006063818352015b610180516101a05110610d5357610e5d565b6101c0604061028060246327294447610200526101a0516102205261021c6002545afa15612e7f57603f3d1115612e7f5761028080808080516102c0525050602081019050808080516102e052505050506000506102c08051825280602001518260200152505061020060006063818352015b6101e0516102005110610dd857610e4a565b61014051610e28576001633b9aca0760043560e05260c052604060c02060243560e05260c052604060c0206101c05160e05260c052604060c0206102005160e05260c052604060c0200154610140525b6000610140511115610e3957610e4a565b5b8151600101808352811415610dc6575b50505b8151600101808352811415610d41575b50506101405160005260206000f35b634e791a3a811415610ebe5760043560a01c612e7f57633b9aca0a60043560e05260c052604060c020633b9aca0c60043560e05260c052604060c0205460e05260c052604060c0205460005260206000f35b6372fdccfa811415610f255760043580806000811215610eda57195b607f1c612e7f57905050637735941160043560e05260c052604060c0206001600435633b9aca00811015612e7f57026377359412015460e05260c052604060c0205460005260206000f35b636977ff92811415610f5157637735940f63773594105460e05260c052604060c0205460005260206000f35b636f214a6a811415610fb85760043580806000811215610f6d57195b607f1c612e7f57905050633b9aca0d60043560e05260c052604060c0206001600435633b9aca00811015612e7f5702633b9aca0f015460e05260c052604060c0205460005260206000f35b63f851a440811415610fd05760005460005260206000f35b6317f7182a811415610fe85760015460005260206000f35b63dfe050318114156110005760025460005260206000f35b639fba03a18114156110185760035460005260206000f35b63e93841d08114156110305760045460005260206000f35b63d958a8fc8114156110f5576004358080600081121561104c57195b607f1c612e7f57905050600560043560e05260c052604060c02080610180602082540161012060006003818352015b8261012051602002111561108e576110b0565b61012051850154610120516020028501525b815160010180835281141561107b575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b63b0539187811415611120576001600435633b9aca00811015612e7f57026006015460005260206000f35b634ac3b2768114156111bc5760043560a01c612e7f5760243560a01c612e7f57633b9aca0760043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c02060643560e05260c052604060c0206101408080808454815250506020810190508080600185015481525050602081019050808060028501548152505060609050905060c05260c051610140f35b6382cec59181141561120b5760043560a01c612e7f57633b9aca0860043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0205460005260206000f35b637e418fa08114156112565760043560a01c612e7f5760243560a01c612e7f57633b9aca0960043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b63edba52738114156112bb5760043560a01c612e7f57633b9aca0a60043560e05260c052604060c02060243560e05260c052604060c020610140808080845481525050602081019050808060018501548152505060409050905060c05260c051610140f35b63a4d7a2508114156112ee5760043560a01c612e7f57633b9aca0c60043560e05260c052604060c0205460005260206000f35b63a9b48c01811415611363576004358080600081121561130a57195b607f1c612e7f57905050633b9aca0d60043560e05260c052604060c02060243560e05260c052604060c020610140808080845481525050602081019050808060018501548152505060409050905060c05260c051610140f35b635a549158811415611391576001600435633b9aca00811015612e7f5702633b9aca0f015460005260206000f35b631142916b8114156113ba57637735940f60043560e05260c052604060c0205460005260206000f35b63513872bd8114156113d55763773594105460005260206000f35b63afd2bb4981141561142657600435808060008112156113f157195b607f1c612e7f57905050637735941160043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b6351ce6b59811415611454576001600435633b9aca00811015612e7f57026377359412015460005260206000f35b505b60006000fd5b6101605261014052600161014051633b9aca00811015612e7f5702637735941201546101805260006101805111156115685763773594116101405160e05260c052604060c0206101805160e05260c052604060c020546101a0526101c060006101f4818352015b426101805111156114d357611552565b610180805162093a808181830110612e7f57808201905090508152506101a05163773594116101405160e05260c052604060c0206101805160e05260c052604060c02055426101805111156115415761018051600161014051633b9aca00811015612e7f5702637735941201555b5b81516001018083528114156114c3575b50506101a0516000526000516101605156611576565b600060005260005161016051565b005b6101605261014052600161014051633b9aca00811015612e7f5702633b9aca0f015461018052600061018051111561173f576101a0633b9aca0d6101405160e05260c052604060c0206101805160e05260c052604060c020805482526001810154826020015250506101e060006101f4818352015b426101805111156115fd57611729565b610180805162093a808181830110612e7f57808201905090508152506101c05162093a80808202821582848304141715612e7f578090509050905061020052610200516101a05111156116ab576101a0805161020051808210612e7f5780820390509050815250633b9aca0e6101405160e05260c052604060c0206101805160e05260c052604060c02054610220526101c0805161022051808210612e7f57808203905090508152506116b8565b60006101a05260006101c0525b633b9aca0d6101405160e05260c052604060c0206101805160e05260c052604060c0206101a080518255806020015160018301555050426101805111156117185761018051600161014051633b9aca00811015612e7f5702633b9aca0f01555b5b81516001018083528114156115ed575b50506101a051600052600051610160515661174d565b600060005260005161016051565b005b6101405263773594105461016052600354610180524261016051111561178a57610160805162093a80808210612e7f57808203905090508152505b637735940f6101605160e05260c052604060c020546101a0526101c060006064818352015b610180516101c05114156117c25761185d565b6101405161016051610180516101a0516101c0516101c0516101e0526101e05160065801611578565b610240526101c0526101a052610180526101605261014052610240506101405161016051610180516101a0516101c0516101c0516101e0526101e0516006580161145c565b610240526101c0526101a052610180526101605261014052610240505b81516001018083528114156117af575b50506101c060006101f4818352015b4261016051111561187c57611997565b610160805162093a808181830110612e7f578082019050905081525060006101a0526101e060006064818352015b610180516101e05114156118bd57611955565b633b9aca0d6101e05160e05260c052604060c0206101605160e05260c052604060c020546102005263773594116101e05160e05260c052604060c0206101605160e05260c052604060c02054610220526101a080516102005161022051808202821582848304141715612e7f57809050905090508181830110612e7f57808201905090508152505b81516001018083528114156118aa575b50506101a051637735940f6101605160e05260c052604060c020554261016051111561198657610160516377359410555b5b815160010180835281141561186c575b50506101a05160005260005161014051565b6101605261014052633b9aca0c6101405160e05260c052604060c02054610180526000610180511115611b66576101a0633b9aca0a6101405160e05260c052604060c0206101805160e05260c052604060c020805482526001810154826020015250506101e060006101f4818352015b42610180511115611a2957611b50565b610180805162093a808181830110612e7f57808201905090508152506101c05162093a80808202821582848304141715612e7f578090509050905061020052610200516101a0511115611ad7576101a0805161020051808210612e7f5780820390509050815250633b9aca0b6101405160e05260c052604060c0206101805160e05260c052604060c02054610220526101c0805161022051808210612e7f5780820390509050815250611ae4565b60006101a05260006101c0525b633b9aca0a6101405160e05260c052604060c0206101805160e05260c052604060c0206101a08051825580602001516001830155505042610180511115611b3f5761018051633b9aca0c6101405160e05260c052604060c020555b5b8151600101808352811415611a19575b50506101a0516000526000516101605156611b74565b600060005260005161016051565b005b6101805261014052610160526101605162093a808082049050905062093a80808202821582848304141715612e7f57809050905090506101a052637735940f6101a05160e05260c052604060c020546101c05260006101c0511115611cbd57633b9aca066101405160e05260c052604060c02054600180820380806000811215611bfc57195b607f1c612e7f579050905090506101e05263773594116101e05160e05260c052604060c0206101a05160e05260c052604060c0205461020052633b9aca0a6101405160e05260c052604060c0206101a05160e05260c052604060c0205461022052670de0b6b3a764000061020051808202821582848304141715612e7f578090509050905061022051808202821582848304141715612e7f57809050905090506101c051808015612e7f578204905090506000526000516101805156611ccb565b600060005260005161018051565b005b6101805261014052610160526101405161016051610180516101a051610140516101c0526101c0516006580161145c565b610220526101a052610180526101605261014052610220516101a0526101405161016051610180516101a0516101c051610140516101e0526101e05160065801611578565b610240526101c0526101a052610180526101605261014052610240516101c0526101405161016051610180516101a0516101c0516101e0516006580161174f565b610200526101e0526101c0526101a052610180526101605261014052610200516101e0524262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f5780905090509050610200526101e0516101c05161016051808202821582848304141715612e7f57809050905090508181830110612e7f57808201905090506101c0516101a051808202821582848304141715612e7f5780905090509050808210612e7f57808203905090506101e0526101e051637735940f6102005160e05260c052604060c020556101605163773594116101405160e05260c052604060c0206102005160e05260c052604060c020556102005163773594105561020051600161014051633b9aca00811015612e7f5702637735941201556101405161022052610200516102405261016051610260526101e051610280527e170bcdc909b6ac6e12d020fe8942256312cdcd555fb6d712899eba56d2f9016080610220a161018051565b610180526101405261016052633b9aca066101405160e05260c052604060c02054600180820380806000811215611f3357195b607f1c612e7f579050905090506101a0526101405161016051610180516101a0516101c051610140516101e0526101e051600658016119a9565b610240526101c0526101a052610180526101605261014052610240516101c0526101405161016051610180516101a0516101c0516101e0516101a05161020052610200516006580161145c565b610260526101e0526101c0526101a052610180526101605261014052610260516101e0526101405161016051610180516101a0516101c0516101e051610200516101a051610220526102205160065801611578565b61028052610200526101e0526101c0526101a05261018052610160526101405261028051610200526101405161016051610180516101a0516101c0516101e05161020051610220516006580161174f565b6102405261022052610200526101e0526101c0526101a05261018052610160526101405261024051610220524262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f57809050905090506102405261016051633b9aca0a6101405160e05260c052604060c0206102405160e05260c052604060c0205561024051633b9aca0c6101405160e05260c052604060c0205561020051610160518181830110612e7f57808201905090506101c051808210612e7f57808203905090506102605261026051633b9aca0d6101a05160e05260c052604060c0206102405160e05260c052604060c020556102405160016101a051633b9aca00811015612e7f5702633b9aca0f015561022051610260516101e051808202821582848304141715612e7f57809050905090508181830110612e7f5780820190509050610200516101e051808202821582848304141715612e7f5780905090509050808210612e7f57808203905090506102205261022051637735940f6102405160e05260c052604060c02055610240516377359410556101405161028052426102a052610160516102c052610220516102e0527f54c0cf3647e6cdb2fc0a7876e60ba77563fceedf2e06c01c597f8dccb9e6bd726080610280a161018051565b6101e0526101405261016052610180526101a0526101c0526002546102005260206103006064633e7e92cf6102405261014051610260526101605161028052610180516102a05261025c610200515afa15612e7f57601f3d1115612e7f576000506103005160008112612e7f57610220526020610320606463cca604d2610260526101405161028052610160516102a052610180516102c05261027c610200515afa15612e7f57601f3d1115612e7f5760005061032051610240524262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f57809050905090506102605261026051610240511161235e576101e051565b633b9aca066101a05160e05260c052604060c0205460018082038080600081121561238557195b607f1c612e7f579050905090506102805260006102805112156123e7576308c379a06102a05260206102c052600f6102e0527f4761756765206e6f742061646465640000000000000000000000000000000000610300526102e05060646102bcfd5b6102a0633b9aca076101405160e05260c052604060c0206101a05160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c0208054825260018101548260200152600281015482604001525050600061030052610260516102e0511115612474576102e05161026051808210612e7f5780820390509050610300525b6102a05161030051808202821582848304141715612e7f578090509050905061032052610340610220516101c051808202821582848304141715612e7f57809050905090506127108082049050905081526101c0518160200152610240518160400152506102405161026051808210612e7f57808203905090506103a052610340516103a051808202821582848304141715612e7f57809050905090506103c052633b9aca086101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020546103e0526103e051610360518181830110612e7f57808201905090506102c051808210612e7f57808203905090506103e0526103e051633b9aca086101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020556127106103e0511115612603576308c379a0610400526020610420526013610440527f5573656420746f6f206d75636820706f776572000000000000000000000000006104605261044050606461041cfd5b610140610420525b6104205151602061042051016104205261042061042051101561262d5761260b565b6101a0516104405261044051600658016119a9565b6104a052610400610420525b61042051526020610420510361042052610140610420511061266f5761264e565b6104a051610400526001633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c020015461042052610140610460525b610460515160206104605101610460526104606104605110156126cc576126aa565b61028051610480526104805160065801611578565b6104e052610440610460525b61046051526020610460510361046052610140610460511061270e576126ed565b6104e051610440526001633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c020015461046052610400516103c0518181830110612e7f5780820190509050610320518082101561276b578061276d565b815b9050905061032051808210612e7f5780820390509050633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c02055610440516103c0518181830110612e7f578082019050905061032051808210156127d157806127d3565b815b9050905061032051808210612e7f5780820390509050633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c02055610260516102e05111156128f25761042051610340518181830110612e7f57808201905090506102a051808210156128455780612847565b815b905090506102a051808210612e7f57808203905090506001633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c020015561046051610340518181830110612e7f57808201905090506102a051808210156128ae57806128b0565b815b905090506102a051808210612e7f57808203905090506001633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c0200155612971565b6001633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c020018054610340518181830110612e7f57808201905090508155506001633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c020018054610340518181830110612e7f57808201905090508155505b426102e05111156129f157633b9aca0b6101a05160e05260c052604060c0206102e05160e05260c052604060c02080546102a051808210612e7f5780820390509050815550633b9aca0e6102805160e05260c052604060c0206102e05160e05260c052604060c02080546102a051808210612e7f57808203905090508155505b633b9aca0b6101a05160e05260c052604060c0206103805160e05260c052604060c0208054610340518181830110612e7f5780820190509050815550633b9aca0e6102805160e05260c052604060c0206103805160e05260c052604060c0208054610340518181830110612e7f5780820190509050815550610140610480525b61048051516020610480510161048052610480610480511015612a9357612a71565b6006580161174f565b6104a052610460610480525b610480515260206104805103610480526101406104805110612ac957612aa8565b6104a050633b9aca076101405160e05260c052604060c0206101a05160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020610340805182558060200151600183015580604001516002830155505042633b9aca096101405160e05260c052604060c0206101a05160e05260c052604060c020556101e051565b6101a05261014052610160526101805260006101805110612b7f57612710610180511115612b82565b60005b612bcb576308c379a06101c05260206101e052601e610200527f596f75207573656420616c6c20796f757220766f74696e6720706f7765720000610220526102005060646101dcfd5b6020610240600463730762b86101e0526101fc6002545afa15612e7f57601f3d1115612e7f57600050610240516101c0526101e060006063818352015b6101c0516101e05110612c1a57612ca1565b6101405161016051610180516101a0516101c0516101e05161014051610200526000610220526101e0516102405261016051610260526101805161028052610280516102605161024051610220516102005160065801612251565b6101e0526101c0526101a0526101805261016052610140526000505b8151600101808352811415612c08575b50506020610260600463f1d90a156102005261021c6002545afa15612e7f57601f3d1115612e7f57600050610260516101e05261020060006063818352015b6101e0516102005110612cf257612e33565b61022060406102e06024632729444761026052610200516102805261027c6002545afa15612e7f57603f3d1115612e7f576102e080808080516103205250506020810190508080805161034052505050506000506103208051825280602001518260200152505061026060006063818352015b610240516102605110612d7757612e20565b6101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516101405161028052610220516102a052610260516102c052610160516102e0526101805161030052610300516102e0516102c0516102a0516102805160065801612251565b610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526000505b8151600101808352811415612d65575b50505b8151600101808352811415612ce0575b505042610200526101405161022052610160516102405261018051610260527f45ca9a4c8d0119eb329e580d28fe689e484e1be230da8037ade9547d2d25cc916080610200a16101a051565b600080fd5b61007b612eff0361007b60003961007b612eff036000f35b600080fd000000000000000000000000ac8204a9d79ca87d192ea98a9381600642a66a5f000000000000000000000000641f26c67a5d0829ae61019131093b6a7c7d18a3

Deployed Bytecode

0x600436101561000d57611456565b600035601c5260005134612e7f57636b441a408114156100715760043560a01c612e7f57600054331415612e7f57600435600155600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b636a1c05ae8114156100d257600054331415612e7f57600154610140526000610140511815612e7f576101405160005561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b633f9095b78114156101385760043560a01c612e7f57633b9aca0660043560e05260c052604060c02054610140526000610140511815612e7f576101405160018082038080600081121561012257195b607f1c612e7f5790509050905060005260206000f35b633a04f90081141561014f57600061014052610170565b6318dfe92181141561016b576020604461014037600050610170565b6104c7565b60043560a01c612e7f576024358080600081121561018a57195b607f1c612e7f57905050600054331415612e7f576000602435126101b457600354602435126101b7565b60005b15612e7f57633b9aca0660043560e05260c052604060c02054612e7f5760045461016052610160516001808201808060008112156101f157195b607f1c612e7f57905090509050600455600435600161016051633b9aca00811015612e7f57026006015560243560018082018080600081121561023057195b607f1c612e7f57905090509050633b9aca0660043560e05260c052604060c020554262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f578090509050905061018052600061014051111561043b576101405161016051610180516101a0516024356101c0526101c0516006580161145c565b610220526101a052610180526101605261014052610220516101a0526101405161016051610180516101a0516101c0516024356101e0526101e05160065801611578565b610240526101c0526101a052610180526101605261014052610240516101c0526101405161016051610180516101a0516101c0516101e0516006580161174f565b610200526101e0526101c0526101a052610180526101605261014052610200516101e052610140516101c0518181830110612e7f5780820190509050633b9aca0d60243560e05260c052604060c0206101805160e05260c052604060c02055610180516001602435633b9aca00811015612e7f5702633b9aca0f01556101e0516101a05161014051808202821582848304141715612e7f57809050905090508181830110612e7f5780820190509050637735940f6101805160e05260c052604060c020556101805163773594105561014051633b9aca0a60043560e05260c052604060c0206101805160e05260c052604060c020555b6001602435633b9aca00811015612e7f5702633b9aca0f015461047657610180516001602435633b9aca00811015612e7f5702633b9aca0f01555b61018051633b9aca0c60043560e05260c052604060c02055604060046101a037610140516101e0527ffd55b3191f9c9dd92f4f134dd700e7d76f6a0c836a08687023d6d38f03ebd87760606101a0a1005b63c2c4c5c18114156104e6576006580161174f565b6101405261014050005b63615e523781141561052b5760043560a01c612e7f576004356101405261014051600658016119a9565b6101a0526101a0506006580161174f565b6101405261014050005b636207d866811415610541574261014052610562565b63d3078c9481141561055d576020602461014037600050610562565b6105a5565b60043560a01c612e7f5761014051600435610160526101405161018052610180516101605160065801611b76565b6101e052610140526101e05160005260206000f35b6395cfcec38114156105bb5742610140526105dc565b636472eee18114156105d75760206024610140376000506105dc565b61065c565b60043560a01c612e7f57610140516004356101605261016051600658016119a9565b6101c052610140526101c050610140516006580161174f565b61016052610140526101605061014051600435610160526101405161018052610180516101605160065801611b76565b6101e052610140526101e05160005260206000f35b6326e56d5e8114156106735760006101c052610694565b6392d0d23281141561068f57602060246101c037600050610694565b610857565b60606004356004016101403760406004356004013511612e7f57600054331415612e7f576003546101e0526101408060056101e05160e05260c052604060c020602082510161012060006003818352015b826101205160200211156106f85761071a565b61012051602002850151610120518501555b81516001018083528114156106e5575b5050505050506101e05160018082018080600081121561073657195b607f1c612e7f5790509050905060035560006101c0511815610855576101405161016051610180516101a0516101c0516101e0516101e051610200526101c05161022052610220516102005160065801611ccd565b6101e0526101c0526101a0526101805261016052610140526000506101e05161026052604061020052610200516102405261014080516020018061020051610240018284600060045af115612e7f57505061020051610240015180602061020051610240010101818260206001820306601f8201039050033682375050602061020051610240015160206001820306601f8201039050610200510101610200527f6fbe76157c712f16b5a3c44ed48baa04e3450bc3fab0c020e848aca72bbccc8461020051610240a15b005b63db1ca2608114156108ab576004358080600081121561087357195b607f1c612e7f57905050600054331415612e7f576004356101405260243561016052610160516101405160065801611ccd565b600050005b63d4d2646e8114156108ef5760043560a01c612e7f57600054331415612e7f576004356101405260243561016052610160516101405160065801611f00565b600050005b63d71363288114156109325760043560a01c612e7f573361014052600435610160526024356101805261018051610160516101405160065801612b56565b600050005b6381237fbf811415610a05576000610120525b610120516004013560a01c612e7f57602061012051016101205261014061012051101561097157610945565b61014060006009818352015b600461014051600a811015612e7f57602002013561099a57610a01565b610140513361016052600461014051600a811015612e7f5760200201356101805261014461014051600a811015612e7f5760200201356101a0526101a051610180516101605160065801612b56565b610140526000505b815160010180835281141561097d575b5050005b63f782f0ea811415610c1e5760043560a01c612e7f5760006101405260206101e0600463730762b86101805261019c6002545afa15612e7f57601f3d1115612e7f576000506101e0516101605261018060006063818352015b610160516101805110610a7057610ace565b633b9aca0860043560e05260c052604060c020600060e05260c052604060c0206101805160e05260c052604060c02054610140526000610140511115610abd576101405160005260206000f35b5b8151600101808352811415610a5e575b50506020610200600463f1d90a156101a0526101bc6002545afa15612e7f57601f3d1115612e7f5760005061020051610180526101a060006063818352015b610180516101a05110610b1f57610c0f565b6101c0604061028060246327294447610200526101a0516102205261021c6002545afa15612e7f57603f3d1115612e7f5761028080808080516102c0525050602081019050808080516102e052505050506000506102c08051825280602001518260200152505061020060006063818352015b6101e0516102005110610ba457610bfc565b633b9aca0860043560e05260c052604060c0206101c05160e05260c052604060c0206102005160e05260c052604060c02054610140526000610140511115610beb57610bfc565b5b8151600101808352811415610b92575b50505b8151600101808352811415610b0d575b50506101405160005260206000f35b6355dd6788811415610e6c5760043560a01c612e7f5760243560a01c612e7f5760006101405260206101e0600463730762b86101805261019c6002545afa15612e7f57601f3d1115612e7f576000506101e0516101605261018060006063818352015b610160516101805110610c9357610d02565b6001633b9aca0760043560e05260c052604060c02060243560e05260c052604060c020600060e05260c052604060c0206101805160e05260c052604060c0200154610140526000610140511115610cf1576101405160005260206000f35b5b8151600101808352811415610c81575b50506020610200600463f1d90a156101a0526101bc6002545afa15612e7f57601f3d1115612e7f5760005061020051610180526101a060006063818352015b610180516101a05110610d5357610e5d565b6101c0604061028060246327294447610200526101a0516102205261021c6002545afa15612e7f57603f3d1115612e7f5761028080808080516102c0525050602081019050808080516102e052505050506000506102c08051825280602001518260200152505061020060006063818352015b6101e0516102005110610dd857610e4a565b61014051610e28576001633b9aca0760043560e05260c052604060c02060243560e05260c052604060c0206101c05160e05260c052604060c0206102005160e05260c052604060c0200154610140525b6000610140511115610e3957610e4a565b5b8151600101808352811415610dc6575b50505b8151600101808352811415610d41575b50506101405160005260206000f35b634e791a3a811415610ebe5760043560a01c612e7f57633b9aca0a60043560e05260c052604060c020633b9aca0c60043560e05260c052604060c0205460e05260c052604060c0205460005260206000f35b6372fdccfa811415610f255760043580806000811215610eda57195b607f1c612e7f57905050637735941160043560e05260c052604060c0206001600435633b9aca00811015612e7f57026377359412015460e05260c052604060c0205460005260206000f35b636977ff92811415610f5157637735940f63773594105460e05260c052604060c0205460005260206000f35b636f214a6a811415610fb85760043580806000811215610f6d57195b607f1c612e7f57905050633b9aca0d60043560e05260c052604060c0206001600435633b9aca00811015612e7f5702633b9aca0f015460e05260c052604060c0205460005260206000f35b63f851a440811415610fd05760005460005260206000f35b6317f7182a811415610fe85760015460005260206000f35b63dfe050318114156110005760025460005260206000f35b639fba03a18114156110185760035460005260206000f35b63e93841d08114156110305760045460005260206000f35b63d958a8fc8114156110f5576004358080600081121561104c57195b607f1c612e7f57905050600560043560e05260c052604060c02080610180602082540161012060006003818352015b8261012051602002111561108e576110b0565b61012051850154610120516020028501525b815160010180835281141561107b575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b63b0539187811415611120576001600435633b9aca00811015612e7f57026006015460005260206000f35b634ac3b2768114156111bc5760043560a01c612e7f5760243560a01c612e7f57633b9aca0760043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c02060643560e05260c052604060c0206101408080808454815250506020810190508080600185015481525050602081019050808060028501548152505060609050905060c05260c051610140f35b6382cec59181141561120b5760043560a01c612e7f57633b9aca0860043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0205460005260206000f35b637e418fa08114156112565760043560a01c612e7f5760243560a01c612e7f57633b9aca0960043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b63edba52738114156112bb5760043560a01c612e7f57633b9aca0a60043560e05260c052604060c02060243560e05260c052604060c020610140808080845481525050602081019050808060018501548152505060409050905060c05260c051610140f35b63a4d7a2508114156112ee5760043560a01c612e7f57633b9aca0c60043560e05260c052604060c0205460005260206000f35b63a9b48c01811415611363576004358080600081121561130a57195b607f1c612e7f57905050633b9aca0d60043560e05260c052604060c02060243560e05260c052604060c020610140808080845481525050602081019050808060018501548152505060409050905060c05260c051610140f35b635a549158811415611391576001600435633b9aca00811015612e7f5702633b9aca0f015460005260206000f35b631142916b8114156113ba57637735940f60043560e05260c052604060c0205460005260206000f35b63513872bd8114156113d55763773594105460005260206000f35b63afd2bb4981141561142657600435808060008112156113f157195b607f1c612e7f57905050637735941160043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b6351ce6b59811415611454576001600435633b9aca00811015612e7f57026377359412015460005260206000f35b505b60006000fd5b6101605261014052600161014051633b9aca00811015612e7f5702637735941201546101805260006101805111156115685763773594116101405160e05260c052604060c0206101805160e05260c052604060c020546101a0526101c060006101f4818352015b426101805111156114d357611552565b610180805162093a808181830110612e7f57808201905090508152506101a05163773594116101405160e05260c052604060c0206101805160e05260c052604060c02055426101805111156115415761018051600161014051633b9aca00811015612e7f5702637735941201555b5b81516001018083528114156114c3575b50506101a0516000526000516101605156611576565b600060005260005161016051565b005b6101605261014052600161014051633b9aca00811015612e7f5702633b9aca0f015461018052600061018051111561173f576101a0633b9aca0d6101405160e05260c052604060c0206101805160e05260c052604060c020805482526001810154826020015250506101e060006101f4818352015b426101805111156115fd57611729565b610180805162093a808181830110612e7f57808201905090508152506101c05162093a80808202821582848304141715612e7f578090509050905061020052610200516101a05111156116ab576101a0805161020051808210612e7f5780820390509050815250633b9aca0e6101405160e05260c052604060c0206101805160e05260c052604060c02054610220526101c0805161022051808210612e7f57808203905090508152506116b8565b60006101a05260006101c0525b633b9aca0d6101405160e05260c052604060c0206101805160e05260c052604060c0206101a080518255806020015160018301555050426101805111156117185761018051600161014051633b9aca00811015612e7f5702633b9aca0f01555b5b81516001018083528114156115ed575b50506101a051600052600051610160515661174d565b600060005260005161016051565b005b6101405263773594105461016052600354610180524261016051111561178a57610160805162093a80808210612e7f57808203905090508152505b637735940f6101605160e05260c052604060c020546101a0526101c060006064818352015b610180516101c05114156117c25761185d565b6101405161016051610180516101a0516101c0516101c0516101e0526101e05160065801611578565b610240526101c0526101a052610180526101605261014052610240506101405161016051610180516101a0516101c0516101c0516101e0526101e0516006580161145c565b610240526101c0526101a052610180526101605261014052610240505b81516001018083528114156117af575b50506101c060006101f4818352015b4261016051111561187c57611997565b610160805162093a808181830110612e7f578082019050905081525060006101a0526101e060006064818352015b610180516101e05114156118bd57611955565b633b9aca0d6101e05160e05260c052604060c0206101605160e05260c052604060c020546102005263773594116101e05160e05260c052604060c0206101605160e05260c052604060c02054610220526101a080516102005161022051808202821582848304141715612e7f57809050905090508181830110612e7f57808201905090508152505b81516001018083528114156118aa575b50506101a051637735940f6101605160e05260c052604060c020554261016051111561198657610160516377359410555b5b815160010180835281141561186c575b50506101a05160005260005161014051565b6101605261014052633b9aca0c6101405160e05260c052604060c02054610180526000610180511115611b66576101a0633b9aca0a6101405160e05260c052604060c0206101805160e05260c052604060c020805482526001810154826020015250506101e060006101f4818352015b42610180511115611a2957611b50565b610180805162093a808181830110612e7f57808201905090508152506101c05162093a80808202821582848304141715612e7f578090509050905061020052610200516101a0511115611ad7576101a0805161020051808210612e7f5780820390509050815250633b9aca0b6101405160e05260c052604060c0206101805160e05260c052604060c02054610220526101c0805161022051808210612e7f5780820390509050815250611ae4565b60006101a05260006101c0525b633b9aca0a6101405160e05260c052604060c0206101805160e05260c052604060c0206101a08051825580602001516001830155505042610180511115611b3f5761018051633b9aca0c6101405160e05260c052604060c020555b5b8151600101808352811415611a19575b50506101a0516000526000516101605156611b74565b600060005260005161016051565b005b6101805261014052610160526101605162093a808082049050905062093a80808202821582848304141715612e7f57809050905090506101a052637735940f6101a05160e05260c052604060c020546101c05260006101c0511115611cbd57633b9aca066101405160e05260c052604060c02054600180820380806000811215611bfc57195b607f1c612e7f579050905090506101e05263773594116101e05160e05260c052604060c0206101a05160e05260c052604060c0205461020052633b9aca0a6101405160e05260c052604060c0206101a05160e05260c052604060c0205461022052670de0b6b3a764000061020051808202821582848304141715612e7f578090509050905061022051808202821582848304141715612e7f57809050905090506101c051808015612e7f578204905090506000526000516101805156611ccb565b600060005260005161018051565b005b6101805261014052610160526101405161016051610180516101a051610140516101c0526101c0516006580161145c565b610220526101a052610180526101605261014052610220516101a0526101405161016051610180516101a0516101c051610140516101e0526101e05160065801611578565b610240526101c0526101a052610180526101605261014052610240516101c0526101405161016051610180516101a0516101c0516101e0516006580161174f565b610200526101e0526101c0526101a052610180526101605261014052610200516101e0524262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f5780905090509050610200526101e0516101c05161016051808202821582848304141715612e7f57809050905090508181830110612e7f57808201905090506101c0516101a051808202821582848304141715612e7f5780905090509050808210612e7f57808203905090506101e0526101e051637735940f6102005160e05260c052604060c020556101605163773594116101405160e05260c052604060c0206102005160e05260c052604060c020556102005163773594105561020051600161014051633b9aca00811015612e7f5702637735941201556101405161022052610200516102405261016051610260526101e051610280527e170bcdc909b6ac6e12d020fe8942256312cdcd555fb6d712899eba56d2f9016080610220a161018051565b610180526101405261016052633b9aca066101405160e05260c052604060c02054600180820380806000811215611f3357195b607f1c612e7f579050905090506101a0526101405161016051610180516101a0516101c051610140516101e0526101e051600658016119a9565b610240526101c0526101a052610180526101605261014052610240516101c0526101405161016051610180516101a0516101c0516101e0516101a05161020052610200516006580161145c565b610260526101e0526101c0526101a052610180526101605261014052610260516101e0526101405161016051610180516101a0516101c0516101e051610200516101a051610220526102205160065801611578565b61028052610200526101e0526101c0526101a05261018052610160526101405261028051610200526101405161016051610180516101a0516101c0516101e05161020051610220516006580161174f565b6102405261022052610200526101e0526101c0526101a05261018052610160526101405261024051610220524262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f57809050905090506102405261016051633b9aca0a6101405160e05260c052604060c0206102405160e05260c052604060c0205561024051633b9aca0c6101405160e05260c052604060c0205561020051610160518181830110612e7f57808201905090506101c051808210612e7f57808203905090506102605261026051633b9aca0d6101a05160e05260c052604060c0206102405160e05260c052604060c020556102405160016101a051633b9aca00811015612e7f5702633b9aca0f015561022051610260516101e051808202821582848304141715612e7f57809050905090508181830110612e7f5780820190509050610200516101e051808202821582848304141715612e7f5780905090509050808210612e7f57808203905090506102205261022051637735940f6102405160e05260c052604060c02055610240516377359410556101405161028052426102a052610160516102c052610220516102e0527f54c0cf3647e6cdb2fc0a7876e60ba77563fceedf2e06c01c597f8dccb9e6bd726080610280a161018051565b6101e0526101405261016052610180526101a0526101c0526002546102005260206103006064633e7e92cf6102405261014051610260526101605161028052610180516102a05261025c610200515afa15612e7f57601f3d1115612e7f576000506103005160008112612e7f57610220526020610320606463cca604d2610260526101405161028052610160516102a052610180516102c05261027c610200515afa15612e7f57601f3d1115612e7f5760005061032051610240524262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f57809050905090506102605261026051610240511161235e576101e051565b633b9aca066101a05160e05260c052604060c0205460018082038080600081121561238557195b607f1c612e7f579050905090506102805260006102805112156123e7576308c379a06102a05260206102c052600f6102e0527f4761756765206e6f742061646465640000000000000000000000000000000000610300526102e05060646102bcfd5b6102a0633b9aca076101405160e05260c052604060c0206101a05160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c0208054825260018101548260200152600281015482604001525050600061030052610260516102e0511115612474576102e05161026051808210612e7f5780820390509050610300525b6102a05161030051808202821582848304141715612e7f578090509050905061032052610340610220516101c051808202821582848304141715612e7f57809050905090506127108082049050905081526101c0518160200152610240518160400152506102405161026051808210612e7f57808203905090506103a052610340516103a051808202821582848304141715612e7f57809050905090506103c052633b9aca086101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020546103e0526103e051610360518181830110612e7f57808201905090506102c051808210612e7f57808203905090506103e0526103e051633b9aca086101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020556127106103e0511115612603576308c379a0610400526020610420526013610440527f5573656420746f6f206d75636820706f776572000000000000000000000000006104605261044050606461041cfd5b610140610420525b6104205151602061042051016104205261042061042051101561262d5761260b565b6101a0516104405261044051600658016119a9565b6104a052610400610420525b61042051526020610420510361042052610140610420511061266f5761264e565b6104a051610400526001633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c020015461042052610140610460525b610460515160206104605101610460526104606104605110156126cc576126aa565b61028051610480526104805160065801611578565b6104e052610440610460525b61046051526020610460510361046052610140610460511061270e576126ed565b6104e051610440526001633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c020015461046052610400516103c0518181830110612e7f5780820190509050610320518082101561276b578061276d565b815b9050905061032051808210612e7f5780820390509050633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c02055610440516103c0518181830110612e7f578082019050905061032051808210156127d157806127d3565b815b9050905061032051808210612e7f5780820390509050633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c02055610260516102e05111156128f25761042051610340518181830110612e7f57808201905090506102a051808210156128455780612847565b815b905090506102a051808210612e7f57808203905090506001633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c020015561046051610340518181830110612e7f57808201905090506102a051808210156128ae57806128b0565b815b905090506102a051808210612e7f57808203905090506001633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c0200155612971565b6001633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c020018054610340518181830110612e7f57808201905090508155506001633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c020018054610340518181830110612e7f57808201905090508155505b426102e05111156129f157633b9aca0b6101a05160e05260c052604060c0206102e05160e05260c052604060c02080546102a051808210612e7f5780820390509050815550633b9aca0e6102805160e05260c052604060c0206102e05160e05260c052604060c02080546102a051808210612e7f57808203905090508155505b633b9aca0b6101a05160e05260c052604060c0206103805160e05260c052604060c0208054610340518181830110612e7f5780820190509050815550633b9aca0e6102805160e05260c052604060c0206103805160e05260c052604060c0208054610340518181830110612e7f5780820190509050815550610140610480525b61048051516020610480510161048052610480610480511015612a9357612a71565b6006580161174f565b6104a052610460610480525b610480515260206104805103610480526101406104805110612ac957612aa8565b6104a050633b9aca076101405160e05260c052604060c0206101a05160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020610340805182558060200151600183015580604001516002830155505042633b9aca096101405160e05260c052604060c0206101a05160e05260c052604060c020556101e051565b6101a05261014052610160526101805260006101805110612b7f57612710610180511115612b82565b60005b612bcb576308c379a06101c05260206101e052601e610200527f596f75207573656420616c6c20796f757220766f74696e6720706f7765720000610220526102005060646101dcfd5b6020610240600463730762b86101e0526101fc6002545afa15612e7f57601f3d1115612e7f57600050610240516101c0526101e060006063818352015b6101c0516101e05110612c1a57612ca1565b6101405161016051610180516101a0516101c0516101e05161014051610200526000610220526101e0516102405261016051610260526101805161028052610280516102605161024051610220516102005160065801612251565b6101e0526101c0526101a0526101805261016052610140526000505b8151600101808352811415612c08575b50506020610260600463f1d90a156102005261021c6002545afa15612e7f57601f3d1115612e7f57600050610260516101e05261020060006063818352015b6101e0516102005110612cf257612e33565b61022060406102e06024632729444761026052610200516102805261027c6002545afa15612e7f57603f3d1115612e7f576102e080808080516103205250506020810190508080805161034052505050506000506103208051825280602001518260200152505061026060006063818352015b610240516102605110612d7757612e20565b6101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516101405161028052610220516102a052610260516102c052610160516102e0526101805161030052610300516102e0516102c0516102a0516102805160065801612251565b610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526000505b8151600101808352811415612d65575b50505b8151600101808352811415612ce0575b505042610200526101405161022052610160516102405261018051610260527f45ca9a4c8d0119eb329e580d28fe689e484e1be230da8037ade9547d2d25cc916080610200a16101a051565b600080fd

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ac8204a9d79ca87d192ea98a9381600642a66a5f000000000000000000000000641f26c67a5d0829ae61019131093b6a7c7d18a3

-----Decoded View---------------
Arg [0] : _mirrored_voting_escrow (address): 0xAc8204a9d79CA87D192ea98A9381600642A66a5F
Arg [1] : _admin (address): 0x641f26c67A5D0829Ae61019131093B6a7c7d18a3

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ac8204a9d79ca87d192ea98a9381600642a66a5f
Arg [1] : 000000000000000000000000641f26c67a5d0829ae61019131093b6a7c7d18a3


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.