ETH Price: $2,556.22 (-17.18%)
Sponsored:   Gate.io : Claim Up to $6,666 in Welcome Bonus!  

Overview

Max Total Supply

10,000,000,000 REZ

Holders

55,045 ( 0.011%)
Created with Highcharts 10.2.1

Market

Price

$0.02 @ 0.000006 ETH (-25.35%)

Onchain Market Cap

$163,779,900.00

Circulating Supply Market Cap

$32,831,815.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
586.72 REZ

Value
$9.61 ( ~0.00375946049498344 Eth) [0.0000%]
0x2c3568fbefe0a1a75b6d94bcf540dd7c3686bd43
Loading...
Loading
Loading...
Loading

OVERVIEW

Renzo is a Liquid Restaking Token and Strategy Manager for EigenLayer. It is the interface to the EigenLayer ecosystem securing Actively Validated Services and offering a higher yield than ETH staking. REZ is the Governance Token for the Renzo Protocol that is backed by Liquid Restaking Token ezETH.

Market

Volume (24H):$24,969,594.00
Market Capitalization:$32,831,815.00
Circulating Supply:2,003,822,900.00 REZ
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume
1
Binance
REZ-USDT$0.0163
0.0000063 Eth
$7,375,570.00
437,570,893.100 REZ
29.1263%
2
LBank
REZ-USDT$0.0163
0.0000063 Eth
$3,666,053.00
224,405,578.900 REZ
14.9372%
3
Hotcoin
REZ-USDT$0.0163
0.0000063 Eth
$2,836,655.00
173,743,118.500 REZ
11.5650%
4
BTCC
REZ-USDT$0.0162
0.0000063 Eth
$2,709,130.00
152,766,248.900 REZ
10.1687%
5
XT.COM
REZ-USDT$0.0163
0.0000063 Eth
$1,253,808.00
74,425,025.700 REZ
4.9540%
6
WhiteBIT
REZ-USDT$0.0161
0.0000063 Eth
$1,084,973.00
67,307,358.200 REZ
4.4802%
7
Bitrue
REZ-USDT$0.0163
0.0000063 Eth
$816,076.00
50,000,329.000 REZ
3.3282%
8
Gate.io
REZ-USDT$0.0163
0.0000063 Eth
$497,543.00
29,594,227.840 REZ
1.9699%
9
Bitunix
REZ-USDT$0.0162
0.0000063 Eth
$462,211.00
28,499,934.900 REZ
1.8971%
10
Ourbit
REZ-USDT$0.0164
0.0000063 Eth
$457,164.00
27,027,436.860 REZ
1.7990%
11
Binance
REZ-TRY$0.0167
0.0000064 Eth
$387,262.00
21,805,400.300 REZ
1.4514%
12
OrangeX
REZ-USDT$0.0162
0.0000063 Eth
$368,354.00
22,094,244.300 REZ
1.4707%
13
Bitget
REZ-USDT$0.0162
0.0000063 Eth
$307,035.00
17,383,207.940 REZ
1.1571%
14
Hibt
REZ-USDT$0.0162
0.0000063 Eth
$276,343.00
16,393,852.800 REZ
1.0912%
15
MEXC
REZ-USDT$0.0162
0.0000063 Eth
$240,705.00
14,832,711.500 REZ
0.9873%
16
Binance
REZ-BTC$0.0171
0.0000066 Eth
$180,414.00
11,480,814.300 REZ
0.7642%
17
Binance
REZ-USDC$0.0164
0.0000063 Eth
$161,129.00
9,432,378.400 REZ
0.6279%
18
Bitvavo
REZ-EUR$0.0164
0.0000064 Eth
$159,719.00
9,748,689.227 REZ
0.6489%
19
Toobit
REZ-USDT$0.0163
0.0000063 Eth
$157,952.00
9,506,566.950 REZ
0.6328%
20
BitMart
REZ-USDT$0.0163
0.0000063 Eth
$156,679.00
9,603,125.800 REZ
0.6392%
21
BVOX
REZ-USDT$0.0167
0.0000064 Eth
$154,736.00
8,904,972.300 REZ
0.5927%
22
CoinTR
REZ-USDT$0.0165
0.0000064 Eth
$152,796.00
8,623,346.600 REZ
0.5740%
23
Phemex
REZ-USDT$0.0164
0.0000064 Eth
$142,257.00
8,698,319.260 REZ
0.5790%
24
BingX
REZ-USDT$0.0162
0.0000063 Eth
$133,240.00
7,834,142.903 REZ
0.5215%
25
DeGate
0X3B50805453023A91A8BF641E279401A0B23FA6F9-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48$0.0164
0.0000064 Eth
$124,622.00
7,101,696.400 0X3B50805453023A91A8BF641E279401A0B23FA6F9
0.4727%
26
KuCoin
REZ-USDT$0.0163
0.0000063 Eth
$115,403.00
7,072,101.710 REZ
0.4707%
27
CoinTR
REZ-TRY$0.0163
0.0000064 Eth
$105,906.00
5,889,605.000 REZ
0.3920%
28
WhiteBIT
REZ-BTC$0.0163
0.0000063 Eth
$93,603.00
5,745,517.000 REZ
0.3824%
29
PointPay
REZ-USDT$0.0164
0.0000064 Eth
$80,698.00
4,795,564.822 REZ
0.3192%
30
Bitkub
REZ-THB$0.0165
0.0000064 Eth
$70,521.00
4,276,215.858 REZ
0.2846%
31
Uniswap V3 (Ethereum)
0X3B50805453023A91A8BF641E279401A0B23FA6F9-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48$0.0164
0.0000064 Eth
$66,201.00
3,729,345.740 0X3B50805453023A91A8BF641E279401A0B23FA6F9
0.2482%
32
CoinEx
REZ-USDT$0.0163
0.0000063 Eth
$61,649.00
3,529,320.244 REZ
0.2349%
33
HTX
REZ-USDT$0.0162
0.0000063 Eth
$58,861.00
3,315,409.583 REZ
0.2207%
34
AscendEX (BitMax)
REZ-USDT$0.0162
0.0000063 Eth
$55,895.00
3,446,934.000 REZ
0.2294%
35
Bilaxy
REZ-ETH$0.0169
0.0000065 Eth
$38,549.00
2,283,687.000 REZ
0.1520%
36
BloFin
REZ-USDT$0.0162
0.0000063 Eth
$36,822.00
2,101,144.300 REZ
0.1399%
37
Tapbit
REZ-USDT$0.0162
0.0000063 Eth
$22,869.00
1,246,536.200 REZ
0.0830%
38
WhiteBIT
REZ-TRY$0.0165
0.0000064 Eth
$21,363.00
1,294,232.200 REZ
0.0861%
39
Kraken
REZ-USD$0.0163
0.0000063 Eth
$18,645.48
1,145,299.775 REZ
0.0762%
40
TokoCrypto
REZ-USDT$0.0164
0.0000063 Eth
$17,573.41
1,074,578.691 REZ
0.0715%
41
Indodax
REZ-IDR$0.0165
0.0000064 Eth
$14,588.50
882,624.294 REZ
0.0588%
42
Orca
3DK98MXPZ8TRUIM7RFQNEBSLPA7VSOC79BGIEE1M4ZW5-EPJFWDD5AUFQSSQEM2QN1XZYBAPC8G4WEGGKZWYTDT1V$0.0163
0.0000063 Eth
$8,728.37
526,944.630 3DK98MXPZ8TRUIM7RFQNEBSLPA7VSOC79BGIEE1M4ZW5
0.0351%
43
Orca
3DK98MXPZ8TRUIM7RFQNEBSLPA7VSOC79BGIEE1M4ZW5-EPJFWDD5AUFQSSQEM2QN1XZYBAPC8G4WEGGKZWYTDT1V$0.02
0.0000078 Eth
$8,149.57
387,278.998 3DK98MXPZ8TRUIM7RFQNEBSLPA7VSOC79BGIEE1M4ZW5
0.0258%
44
CoinDCX
REZ-INR$0.0179
0.0000069 Eth
$5,861.89
0.000 REZ
0.0000%
45
Coinone
REZ-KRW$0.0184
0.0000072 Eth
$5,710.15
310,679.024 REZ
0.0207%
46
Nami.Exchange
REZ-USDT$0.0164
0.0000064 Eth
$3,835.79
233,694.849 REZ
0.0156%
47
HitBTC
REZ-USDT$0.0165
0.0000064 Eth
$3,512.00
221,853.100 REZ
0.0148%
48
Kraken
REZ-EUR$0.0169
0.0000066 Eth
$2,890.21
171,204.913 REZ
0.0114%
49
Coins.ph
REZ-PHP$0.0165
0.0000064 Eth
$2,773.24
174,331.800 REZ
0.0116%
50
Nami.Exchange
REZ-VNST$0.0164
0.0000064 Eth
$2,536.78
154,626.693 REZ
0.0103%
51
Bitlo
REZ-TRY$0.0169
0.0000064 Eth
$2,403.19
119,009.856 REZ
0.0079%
52
Korbit
REZ-KRW$0.0184
0.0000072 Eth
$1,618.03
90,502.671 REZ
0.0060%
53
Gate.io
REZ-USDC$0.019
0.0000074 Eth
$1,135.61
59,271.180 REZ
0.0039%
54
TokoCrypto
REZ-BTC$0.0171
0.0000066 Eth
$924.34
54,182.944 REZ
0.0036%
55
Bittime
REZ-IDR$0.0165
0.0000064 Eth
$335.26
17,665.570 REZ
0.0012%
56
Uniswap V3 (Ethereum)
0X77B1183E730275F6A8024CE53D54BCC12B368F60-0X3B50805453023A91A8BF641E279401A0B23FA6F9$0.0193
0.0000066 Eth
$313.03
14,665.683 0X77B1183E730275F6A8024CE53D54BCC12B368F60
0.0010%
57
WEEX
REZ-USDT$0.0163
0.0000063 Eth
$266.83
15,330.000 REZ
0.0010%
58
Mercado Bitcoin
REZ-BRL$0.0218
0.0000085 Eth
$195.97
8,999.618 REZ
0.0006%
59
WOO X
REZ-USDT$0.0164
0.0000064 Eth
$115.86
7,078.000 REZ
0.0005%
60
Icrypex
REZ-ICPX$0.0265
0.0000084 Eth
$45.22
1,706.100 REZ
0.0001%
61
Uniswap V3 (Ethereum)
0X3B50805453023A91A8BF641E279401A0B23FA6F9-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.0276
0.0000085 Eth
$10.29
372.919 0X3B50805453023A91A8BF641E279401A0B23FA6F9
0.0000%
62
NovaDAX
REZ-BRL$0.0226
0.0000091 Eth
$9.30
411.200 REZ
0.0000%
63
Tothemoon
REZ-USDT$0.0166
0.0000065 Eth
$5.27
317.200 REZ
0.0000%

Contract Source Code Verified (Exact Match)

Contract Name:
Renzo

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 26 : contract-40735d62d1.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity ^0.8.20;
import "@openzeppelin/contracts@5.0.2/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts@5.0.2/token/ERC20/extensions/ERC20Permit.sol";
import "@openzeppelin/contracts@5.0.2/token/ERC20/extensions/ERC20Votes.sol";
contract Renzo is ERC20, ERC20Permit, ERC20Votes {
constructor() ERC20("Renzo", "REZ") ERC20Permit("Renzo") {
_mint(0xc1d9178C600B15151Ec366C008993a87C1216C38, 10_000_000_000 * 10 ** decimals());
}
// The following functions are overrides required by Solidity.
function _update(address from, address to, uint256 value)
internal
override(ERC20, ERC20Votes)
{
super._update(from, to, value);
}
function nonces(address owner)
public
view
override(ERC20Permit, Nonces)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 26 : ERC20Votes.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Votes.sol)
pragma solidity ^0.8.20;
import {ERC20} from "../ERC20.sol";
import {Votes} from "../../../governance/utils/Votes.sol";
import {Checkpoints} from "../../../utils/structs/Checkpoints.sol";
/**
* @dev Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's,
* and supports token supply up to 2^208^ - 1, while COMP is limited to 2^96^ - 1.
*
* NOTE: This contract does not provide interface compatibility with Compound's COMP token.
*
* This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either
* by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting
* power can be queried through the public accessors {getVotes} and {getPastVotes}.
*
* By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it
* requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.
*/
abstract contract ERC20Votes is ERC20, Votes {
/**
* @dev Total supply cap has been exceeded, introducing a risk of votes overflowing.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 26 : ERC20Permit.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Permit.sol)
pragma solidity ^0.8.20;
import {IERC20Permit} from "./IERC20Permit.sol";
import {ERC20} from "../ERC20.sol";
import {ECDSA} from "../../../utils/cryptography/ECDSA.sol";
import {EIP712} from "../../../utils/cryptography/EIP712.sol";
import {Nonces} from "../../../utils/Nonces.sol";
/**
* @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712, Nonces {
bytes32 private constant PERMIT_TYPEHASH =
keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
/**
* @dev Permit deadline has expired.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 26 : ERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 26 : Checkpoints.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/Checkpoints.sol)
// This file was procedurally generated from scripts/generate/templates/Checkpoints.js.
pragma solidity ^0.8.20;
import {Math} from "../math/Math.sol";
/**
* @dev This library defines the `Trace*` struct, for checkpointing values as they change at different points in
* time, and later looking up past values by block number. See {Votes} as an example.
*
* To create a history of checkpoints define a variable type `Checkpoints.Trace*` in your contract, and store a new
* checkpoint for the current transaction block using the {push} function.
*/
library Checkpoints {
/**
* @dev A value was attempted to be inserted on a past checkpoint.
*/
error CheckpointUnorderedInsertion();
struct Trace224 {
Checkpoint224[] _checkpoints;
}
struct Checkpoint224 {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 26 : Votes.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (governance/utils/Votes.sol)
pragma solidity ^0.8.20;
import {IERC5805} from "../../interfaces/IERC5805.sol";
import {Context} from "../../utils/Context.sol";
import {Nonces} from "../../utils/Nonces.sol";
import {EIP712} from "../../utils/cryptography/EIP712.sol";
import {Checkpoints} from "../../utils/structs/Checkpoints.sol";
import {SafeCast} from "../../utils/math/SafeCast.sol";
import {ECDSA} from "../../utils/cryptography/ECDSA.sol";
import {Time} from "../../utils/types/Time.sol";
/**
* @dev This is a base abstract contract that tracks voting units, which are a measure of voting power that can be
* transferred, and provides a system of vote delegation, where an account can delegate its voting units to a sort of
* "representative" that will pool delegated voting units from different accounts and can then use it to vote in
* decisions. In fact, voting units _must_ be delegated in order to count as actual votes, and an account has to
* delegate those votes to itself if it wishes to participate in decisions and does not have a trusted representative.
*
* This contract is often combined with a token contract such that voting units correspond to token units. For an
* example, see {ERC721Votes}.
*
* The full history of delegate votes is tracked on-chain so that governance protocols can consider votes as distributed
* at a particular block number to protect against flash loans and double voting. The opt-in delegate system makes the
* cost of this history tracking optional.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 7 of 26 : Nonces.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Nonces.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides tracking nonces for addresses. Nonces will only increment.
*/
abstract contract Nonces {
/**
* @dev The nonce used for an `account` is not the expected current nonce.
*/
error InvalidAccountNonce(address account, uint256 currentNonce);
mapping(address account => uint256) private _nonces;
/**
* @dev Returns the next unused nonce for an address.
*/
function nonces(address owner) public view virtual returns (uint256) {
return _nonces[owner];
}
/**
* @dev Consumes a nonce.
*
* Returns the current value and increments nonce.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 8 of 26 : EIP712.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)
pragma solidity ^0.8.20;
import {MessageHashUtils} from "./MessageHashUtils.sol";
import {ShortStrings, ShortString} from "../ShortStrings.sol";
import {IERC5267} from "../../interfaces/IERC5267.sol";
/**
* @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.
*
* The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose
* encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract
* does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to
* produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.
*
* This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding
* scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA
* ({_hashTypedDataV4}).
*
* The implementation of the domain separator was designed to be as efficient as possible while still properly updating
* the chain id to protect against replay attacks on an eventual fork of the chain.
*
* NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method
* https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 9 of 26 : ECDSA.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)
pragma solidity ^0.8.20;
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
enum RecoverError {
NoError,
InvalidSignature,
InvalidSignatureLength,
InvalidSignatureS
}
/**
* @dev The signature derives the `address(0)`.
*/
error ECDSAInvalidSignature();
/**
* @dev The signature has an invalid length.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 10 of 26 : IERC20Permit.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*
* ==== Security Considerations
*
* There are two important considerations concerning the use of `permit`. The first is that a valid permit signature
* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be
* considered as an intention to spend the allowance in any specific way. The second is that because permits have
* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should
* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be
* generally recommended is:
*
* ```solidity
* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {
* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}
* doThing(..., value);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 11 of 26 : draft-IERC6093.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 12 of 26 : Context.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 13 of 26 : IERC20Metadata.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 14 of 26 : IERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 26 : Math.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Muldiv operation overflow.
*/
error MathOverflowedMulDiv();
enum Rounding {
Floor, // Toward negative infinity
Ceil, // Toward positive infinity
Trunc, // Toward zero
Expand // Away from zero
}
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 26 : IERC5267.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)
pragma solidity ^0.8.20;
interface IERC5267 {
/**
* @dev MAY be emitted to signal that the domain could have changed.
*/
event EIP712DomainChanged();
/**
* @dev returns the fields and values that describe the domain separator used by this contract for EIP-712
* signature.
*/
function eip712Domain()
external
view
returns (
bytes1 fields,
string memory name,
string memory version,
uint256 chainId,
address verifyingContract,
bytes32 salt,
uint256[] memory extensions
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 17 of 26 : ShortStrings.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)
pragma solidity ^0.8.20;
import {StorageSlot} from "./StorageSlot.sol";
// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
// | length | 0x BB |
type ShortString is bytes32;
/**
* @dev This library provides functions to convert short memory strings
* into a `ShortString` type that can be used as an immutable variable.
*
* Strings of arbitrary length can be optimized using this library if
* they are short enough (up to 31 bytes) by packing them with their
* length (1 byte) in a single EVM word (32 bytes). Additionally, a
* fallback mechanism can be used for every other case.
*
* Usage example:
*
* ```solidity
* contract Named {
* using ShortStrings for *;
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 18 of 26 : MessageHashUtils.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)
pragma solidity ^0.8.20;
import {Strings} from "../Strings.sol";
/**
* @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.
*
* The library provides methods for generating a hash of a message that conforms to the
* https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]
* specifications.
*/
library MessageHashUtils {
/**
* @dev Returns the keccak256 digest of an EIP-191 signed data with version
* `0x45` (`personal_sign` messages).
*
* The digest is calculated by prefixing a bytes32 `messageHash` with
* `"\x19Ethereum Signed Message:\n32"` and hashing the result. It corresponds with the
* hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.
*
* NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with
* keccak256, although any bytes32 value can be safely used because the final digest will
* be re-hashed.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 19 of 26 : Time.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/types/Time.sol)
pragma solidity ^0.8.20;
import {Math} from "../math/Math.sol";
import {SafeCast} from "../math/SafeCast.sol";
/**
* @dev This library provides helpers for manipulating time-related objects.
*
* It uses the following types:
* - `uint48` for timepoints
* - `uint32` for durations
*
* While the library doesn't provide specific types for timepoints and duration, it does provide:
* - a `Delay` type to represent duration that can be programmed to change value automatically at a given point
* - additional helper functions
*/
library Time {
using Time for *;
/**
* @dev Get the block timestamp as a Timepoint.
*/
function timestamp() internal view returns (uint48) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 20 of 26 : SafeCast.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)
// This file was procedurally generated from scripts/generate/templates/SafeCast.js.
pragma solidity ^0.8.20;
/**
* @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
* checks.
*
* Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
* easily result in undesired exploitation or bugs, since developers usually
* assume that overflows raise errors. `SafeCast` restores this intuition by
* reverting the transaction when such an operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeCast {
/**
* @dev Value doesn't fit in an uint of `bits` size.
*/
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);
/**
* @dev An int value doesn't fit in an uint of `bits` size.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 21 of 26 : IERC5805.sol
1
2
3
4
5
6
7
8
9
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5805.sol)
pragma solidity ^0.8.20;
import {IVotes} from "../governance/utils/IVotes.sol";
import {IERC6372} from "./IERC6372.sol";
interface IERC5805 is IERC6372, IVotes {}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 22 of 26 : Strings.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)
pragma solidity ^0.8.20;
import {Math} from "./math/Math.sol";
import {SignedMath} from "./math/SignedMath.sol";
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant HEX_DIGITS = "0123456789abcdef";
uint8 private constant ADDRESS_LENGTH = 20;
/**
* @dev The `value` string doesn't fit in the specified `length`.
*/
error StringsInsufficientHexLength(uint256 value, uint256 length);
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 23 of 26 : StorageSlot.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)
// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.
pragma solidity ^0.8.20;
/**
* @dev Library for reading and writing primitive types to specific storage slots.
*
* Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
* This library helps with reading and writing to such slots without the need for inline assembly.
*
* The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
*
* Example usage to set ERC1967 implementation slot:
* ```solidity
* contract ERC1967 {
* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
*
* function _getImplementation() internal view returns (address) {
* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
* }
*
* function _setImplementation(address newImplementation) internal {
* require(newImplementation.code.length > 0);
* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 24 of 26 : IERC6372.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC6372.sol)
pragma solidity ^0.8.20;
interface IERC6372 {
/**
* @dev Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting).
*/
function clock() external view returns (uint48);
/**
* @dev Description of the clock
*/
// solhint-disable-next-line func-name-mixedcase
function CLOCK_MODE() external view returns (string memory);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 25 of 26 : IVotes.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (governance/utils/IVotes.sol)
pragma solidity ^0.8.20;
/**
* @dev Common interface for {ERC20Votes}, {ERC721Votes}, and other {Votes}-enabled contracts.
*/
interface IVotes {
/**
* @dev The signature used has expired.
*/
error VotesExpiredSignature(uint256 expiry);
/**
* @dev Emitted when an account changes their delegate.
*/
event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);
/**
* @dev Emitted when a token transfer or delegate change results in changes to a delegate's number of voting units.
*/
event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes);
/**
* @dev Returns the current amount of votes that `account` has.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 26 of 26 : SignedMath.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard signed math utilities missing in the Solidity language.
*/
library SignedMath {
/**
* @dev Returns the largest of two signed numbers.
*/
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two signed numbers.
*/
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two signed numbers without overflow.
* The result is rounded towards zero.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CheckpointUnorderedInsertion","type":"error"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"increasedSupply","type":"uint256"},{"internalType":"uint256","name":"cap","type":"uint256"}],"name":"ERC20ExceededSafeSupply","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"timepoint","type":"uint256"},{"internalType":"uint48","name":"clock","type":"uint48"}],"name":"ERC5805FutureLookup","type":"error"},{"inputs":[],"name":"ERC6372InconsistentClock","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"inputs":[{"internalType":"uint256","name":"expiry","type":"uint256"}],"name":"VotesExpiredSignature","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousVotes","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotes","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CLOCK_MODE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint32","name":"pos","type":"uint32"}],"name":"checkpoints","outputs":[{"components":[{"internalType":"uint48","name":"_key","type":"uint48"},{"internalType":"uint208","name":"_value","type":"uint208"}],"internalType":"struct Checkpoints.Checkpoint208","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clock","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timepoint","type":"uint256"}],"name":"getPastTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timepoint","type":"uint256"}],"name":"getPastVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

610160604052348015610010575f80fd5b506040518060400160405280600581526020017f52656e7a6f000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f52656e7a6f0000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455a000000000000000000000000000000000000000000000000000000000081525081600390816100f99190611261565b5080600490816101099190611261565b50505061012060058361020960201b90919060201c565b610120818152505061013c60068261020960201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a0818152505061017961025660201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505050505061020473c1d9178c600b15151ec366c008993a87c1216c386101dd6102b060201b60201c565b600a6101e99190611498565b6402540be4006101f991906114e2565b6102b860201b60201c565b611966565b5f60208351101561022a576102238361033d60201b60201c565b9050610250565b8261023a836103a260201b60201c565b5f0190816102489190611261565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001610295959493929190611589565b60405160208183030381529060405280519060200120905090565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610328575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161031f91906115da565b60405180910390fd5b6103395f83836103ab60201b60201c565b5050565b5f80829050601f8151111561038957826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016103809190611659565b60405180910390fd5b805181610395906116a6565b5f1c175f1b915050919050565b5f819050919050565b6103bc8383836103c160201b60201c565b505050565b6103d283838361048760201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610471575f6104146106a060201b60201c565b90505f6104256106a960201b60201c565b90508082111561046e5781816040517f1cb15d2600000000000000000000000000000000000000000000000000000000815260040161046592919061170c565b60405180910390fd5b50505b6104828383836106cc60201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104d7578060025f8282546104cb9190611733565b925050819055506105a5565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610560578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161055793929190611766565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105ec578060025f8282540392505081905550610636565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610693919061179b565b60405180910390a3505050565b5f600254905090565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361072b57610728600a6107bc60201b610d351761071d846107d160201b60201c565b61083e60201b60201c565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361078a57610787600a61088660201b610d4a1761077c846107d160201b60201c565b61083e60201b60201c565b50505b6107b761079c8461089b60201b60201c565b6107ab8461089b60201b60201c565b8361090060201b60201c565b505050565b5f81836107c991906117d9565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156108365760d0826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161082d92919061185f565b60405180910390fd5b819050919050565b5f8061087a610851610b9660201b60201c565b61086a61086388610baa60201b60201c565b868860201c565b87610c1260201b9092919060201c565b91509150935093915050565b5f81836108939190611886565b905092915050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561093b57505f81115b15610b91575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a68575f806109d960095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061088660201b610d4a176109ce866107d160201b60201c565b61083e60201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051610a5d92919061170c565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610b90575f80610b0160095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206107bc60201b610d3517610af6866107d160201b60201c565b61083e60201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051610b8592919061170c565b60405180910390a250505b5b505050565b5f610ba5610c3360201b60201c565b905090565b5f80825f018054905090505f8114610c0857610bda835f01600183610bcf91906118d3565b610c4860201b60201c565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16610c0a565b5f5b915050919050565b5f80610c27855f018585610c5a60201b60201c565b91509150935093915050565b5f610c4343610fce60201b60201c565b905090565b5f825f528160205f2001905092915050565b5f805f858054905090505f811115610ee6575f610c8987600184610c7e91906118d3565b610c4860201b60201c565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115610d74576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff1603610dfc5784610dab88600185610da091906118d3565b610c4860201b60201c565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550610ed5565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050610fc6565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b5f65ffffffffffff801682111561101f576030826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161101692919061193f565b60405180910390fd5b819050919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806110a257607f821691505b6020821081036110b5576110b461105e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026111177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826110dc565b61112186836110dc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61116561116061115b84611139565b611142565b611139565b9050919050565b5f819050919050565b61117e8361114b565b61119261118a8261116c565b8484546110e8565b825550505050565b5f90565b6111a661119a565b6111b1818484611175565b505050565b5b818110156111d4576111c95f8261119e565b6001810190506111b7565b5050565b601f821115611219576111ea816110bb565b6111f3846110cd565b81016020851015611202578190505b61121661120e856110cd565b8301826111b6565b50505b505050565b5f82821c905092915050565b5f6112395f198460080261121e565b1980831691505092915050565b5f611251838361122a565b9150826002028217905092915050565b61126a82611027565b67ffffffffffffffff81111561128357611282611031565b5b61128d825461108b565b6112988282856111d8565b5f60209050601f8311600181146112c9575f84156112b7578287015190505b6112c18582611246565b865550611328565b601f1984166112d7866110bb565b5f5b828110156112fe578489015182556001820191506020850194506020810190506112d9565b8683101561131b5784890151611317601f89168261122a565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156113b25780860481111561138e5761138d611330565b5b600185161561139d5780820291505b80810290506113ab8561135d565b9450611372565b94509492505050565b5f826113ca5760019050611485565b816113d7575f9050611485565b81600181146113ed57600281146113f757611426565b6001915050611485565b60ff84111561140957611408611330565b5b8360020a9150848211156114205761141f611330565b5b50611485565b5060208310610133831016604e8410600b841016171561145b5782820a90508381111561145657611455611330565b5b611485565b6114688484846001611369565b9250905081840481111561147f5761147e611330565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6114a282611139565b91506114ad8361148c565b92506114da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846113bb565b905092915050565b5f6114ec82611139565b91506114f783611139565b925082820261150581611139565b9150828204841483151761151c5761151b611330565b5b5092915050565b5f819050919050565b61153581611523565b82525050565b61154481611139565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6115738261154a565b9050919050565b61158381611569565b82525050565b5f60a08201905061159c5f83018861152c565b6115a9602083018761152c565b6115b6604083018661152c565b6115c3606083018561153b565b6115d0608083018461157a565b9695505050505050565b5f6020820190506115ed5f83018461157a565b92915050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61162b82611027565b61163581856115f3565b9350611645818560208601611603565b61164e81611611565b840191505092915050565b5f6020820190508181035f8301526116718184611621565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f61169d8251611523565b80915050919050565b5f6116b082611679565b826116ba84611683565b90506116c581611692565b92506020821015611705576117007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026110dc565b831692505b5050919050565b5f60408201905061171f5f83018561153b565b61172c602083018461153b565b9392505050565b5f61173d82611139565b915061174883611139565b92508282019050808211156117605761175f611330565b5b92915050565b5f6060820190506117795f83018661157a565b611786602083018561153b565b611793604083018461153b565b949350505050565b5f6020820190506117ae5f83018461153b565b92915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117e3826117b4565b91506117ee836117b4565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff8111156118205761181f611330565b5b92915050565b5f819050919050565b5f61184961184461183f84611826565b611142565b61148c565b9050919050565b6118598161182f565b82525050565b5f6040820190506118725f830185611850565b61187f602083018461153b565b9392505050565b5f611890826117b4565b915061189b836117b4565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff8111156118cd576118cc611330565b5b92915050565b5f6118dd82611139565b91506118e883611139565b9250828203905081811115611900576118ff611330565b5b92915050565b5f819050919050565b5f61192961192461191f84611906565b611142565b61148c565b9050919050565b6119398161190f565b82525050565b5f6040820190506119525f830185611930565b61195f602083018461153b565b9392505050565b60805160a05160c05160e0516101005161012051610140516136f46119b75f395f6112bf01525f61128401525f6116c701525f6116a601525f610efd01525f610f5301525f610f7c01526136f45ff3fe608060405234801561000f575f80fd5b506004361061014b575f3560e01c806370a08231116100c15780639ab24eb01161007a5780639ab24eb0146103e1578063a9059cbb14610411578063c3cda52014610441578063d505accf1461045d578063dd62ed3e14610479578063f1127ed8146104a95761014b565b806370a08231146102f15780637ecebe001461032157806384b0196e146103515780638e539e8c1461037557806391ddadf4146103a557806395d89b41146103c35761014b565b80633644e515116101135780633644e515146102095780633a46b1a8146102275780634bf5d7e914610257578063587cde1e146102755780635c19a95c146102a55780636fcfff45146102c15761014b565b806306fdde031461014f578063095ea7b31461016d57806318160ddd1461019d57806323b872dd146101bb578063313ce567146101eb575b5f80fd5b6101576104d9565b6040516101649190612a17565b60405180910390f35b61018760048036038101906101829190612ac8565b610569565b6040516101949190612b20565b60405180910390f35b6101a561058b565b6040516101b29190612b48565b60405180910390f35b6101d560048036038101906101d09190612b61565b610594565b6040516101e29190612b20565b60405180910390f35b6101f36105c2565b6040516102009190612bcc565b60405180910390f35b6102116105ca565b60405161021e9190612bfd565b60405180910390f35b610241600480360381019061023c9190612ac8565b6105d8565b60405161024e9190612b48565b60405180910390f35b61025f6106ae565b60405161026c9190612a17565b60405180910390f35b61028f600480360381019061028a9190612c16565b610742565b60405161029c9190612c50565b60405180910390f35b6102bf60048036038101906102ba9190612c16565b6107a7565b005b6102db60048036038101906102d69190612c16565b6107c0565b6040516102e89190612c87565b60405180910390f35b61030b60048036038101906103069190612c16565b6107d1565b6040516103189190612b48565b60405180910390f35b61033b60048036038101906103369190612c16565b610816565b6040516103489190612b48565b60405180910390f35b610359610827565b60405161036c9796959493929190612d91565b60405180910390f35b61038f600480360381019061038a9190612e13565b6108cc565b60405161039c9190612b48565b60405180910390f35b6103ad610966565b6040516103ba9190612e5e565b60405180910390f35b6103cb610974565b6040516103d89190612a17565b60405180910390f35b6103fb60048036038101906103f69190612c16565b610a04565b6040516104089190612b48565b60405180910390f35b61042b60048036038101906104269190612ac8565b610a6d565b6040516104389190612b20565b60405180910390f35b61045b60048036038101906104569190612ecb565b610a8f565b005b61047760048036038101906104729190612f54565b610b54565b005b610493600480360381019061048e9190612ff1565b610c99565b6040516104a09190612b48565b60405180910390f35b6104c360048036038101906104be9190613059565b610d1b565b6040516104d09190613107565b60405180910390f35b6060600380546104e89061314d565b80601f01602080910402602001604051908101604052809291908181526020018280546105149061314d565b801561055f5780601f106105365761010080835404028352916020019161055f565b820191905f5260205f20905b81548152906001019060200180831161054257829003601f168201915b5050505050905090565b5f80610573610d5f565b9050610580818585610d66565b600191505092915050565b5f600254905090565b5f8061059e610d5f565b90506105ab858285610d78565b6105b6858585610e0a565b60019150509392505050565b5f6012905090565b5f6105d3610efa565b905090565b5f806105e2610966565b90508065ffffffffffff1683106106325782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161062992919061317d565b60405180910390fd5b61068961063e84610fb0565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061100990919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b60606106b86110f6565b65ffffffffffff166106c8610966565b65ffffffffffff1614610707576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f6107b0610d5f565b90506107bc8183611105565b5050565b5f6107ca82611215565b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f6108208261126a565b9050919050565b5f6060805f805f606061083861127b565b6108406112b6565b46305f801b5f67ffffffffffffffff81111561085f5761085e6131a4565b5b60405190808252806020026020018201604052801561088d5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f806108d6610966565b90508065ffffffffffff1683106109265782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161091d92919061317d565b60405180910390fd5b61094261093284610fb0565b600a61100990919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b5f61096f6110f6565b905090565b6060600480546109839061314d565b80601f01602080910402602001604051908101604052809291908181526020018280546109af9061314d565b80156109fa5780601f106109d1576101008083540402835291602001916109fa565b820191905f5260205f20905b8154815290600101906020018083116109dd57829003601f168201915b5050505050905090565b5f610a4a60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206112f1565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b5f80610a77610d5f565b9050610a84818585610e0a565b600191505092915050565b83421115610ad457836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610acb9190612b48565b60405180910390fd5b5f610b35610b2d7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610b1294939291906131d1565b60405160208183030381529060405280519060200120611353565b85858561136c565b9050610b41818761139a565b610b4b8188611105565b50505050505050565b83421115610b9957836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610b909190612b48565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610bc78c6113f1565b89604051602001610bdd96959493929190613214565b6040516020818303038152906040528051906020012090505f610bff82611353565b90505f610c0e8287878761136c565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c8257808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610c79929190613273565b60405180910390fd5b610c8d8a8a8a610d66565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610d2361296b565b610d2d8383611444565b905092915050565b5f8183610d4291906132c7565b905092915050565b5f8183610d579190613314565b905092915050565b5f33905090565b610d7383838360016114a3565b505050565b5f610d838484610c99565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e045781811015610df5578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610dec93929190613361565b60405180910390fd5b610e0384848484035f6114a3565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e7a575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e719190612c50565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eea575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ee19190612c50565b60405180910390fd5b610ef5838383611672565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610f7557507f000000000000000000000000000000000000000000000000000000000000000046145b15610fa2577f00000000000000000000000000000000000000000000000000000000000000009050610fad565b610faa611682565b90505b90565b5f65ffffffffffff8016821115611001576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401610ff89291906133d8565b60405180910390fd5b819050919050565b5f80835f018054905090505f80829050600583111561108a575f61102c84611717565b8461103791906133ff565b9050611045875f018261180d565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16101561107857809150611088565b6001816110859190613432565b92505b505b5f611099875f0187858561181f565b90505f81146110e8576110ba875f016001836110b591906133ff565b61180d565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166110ea565b5f5b94505050505092915050565b5f61110043610fb0565b905090565b5f61110f83610742565b90508160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611210818361120b86611894565b6118a5565b505050565b5f61126361125e60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611b15565b611b24565b9050919050565b5f61127482611b7b565b9050919050565b60606112b160057f0000000000000000000000000000000000000000000000000000000000000000611bc190919063ffffffff16565b905090565b60606112ec60067f0000000000000000000000000000000000000000000000000000000000000000611bc190919063ffffffff16565b905090565b5f80825f018054905090505f81146113495761131b835f0160018361131691906133ff565b61180d565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1661134b565b5f5b915050919050565b5f61136561135f610efa565b83611c6e565b9050919050565b5f805f8061137c88888888611cae565b92509250925061138c8282611d95565b829350505050949350505050565b5f6113a4836113f1565b90508082146113ec5782816040517f752d88c00000000000000000000000000000000000000000000000000000000081526004016113e3929190613465565b60405180910390fd5b505050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b61144c61296b565b61149b8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611ef790919063ffffffff16565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611513575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161150a9190612c50565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611583575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161157a9190612c50565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561166c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516116639190612b48565b60405180910390a35b50505050565b61167d838383611fc6565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016116fc95949392919061348c565b60405160208183030381529060405280519060200120905090565b5f808203611727575f9050611808565b5f600161173384612074565b901c6001901b9050600181848161174d5761174c6134dd565b5b048201901c90506001818481611766576117656134dd565b5b048201901c9050600181848161177f5761177e6134dd565b5b048201901c90506001818481611798576117976134dd565b5b048201901c905060018184816117b1576117b06134dd565b5b048201901c905060018184816117ca576117c96134dd565b5b048201901c905060018184816117e3576117e26134dd565b5b048201901c9050611804818285816117fe576117fd6134dd565b5b0461214b565b9150505b919050565b5f825f528160205f2001905092915050565b5f5b81831015611889575f6118348484612163565b90508465ffffffffffff16611849878361180d565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff16111561187357809250611883565b6001816118809190613432565b93505b50611821565b819050949350505050565b5f61189e826107d1565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118e057505f81115b15611b10575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119fa575f8061196b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20610d4a61196686612188565b6121f5565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516119ef92919061350a565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611b0f575f80611a8060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20610d35611a7b86612188565b6121f5565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611b0492919061350a565b60405180910390a250505b5b505050565b5f815f01805490509050919050565b5f63ffffffff8016821115611b73576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401611b6a92919061356a565b60405180910390fd5b819050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606060ff5f1b8314611bdd57611bd683612234565b9050611c68565b818054611be99061314d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c159061314d565b8015611c605780601f10611c3757610100808354040283529160200191611c60565b820191905f5260205f20905b815481529060010190602001808311611c4357829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611cea575f600385925092509250611d8b565b5f6001888888886040515f8152602001604052604051611d0d9493929190613591565b6020604051602081039080840390855afa158015611d2d573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d7e575f60015f801b93509350935050611d8b565b805f805f1b935093509350505b9450945094915050565b5f6003811115611da857611da76135d4565b5b826003811115611dbb57611dba6135d4565b5b0315611ef35760016003811115611dd557611dd46135d4565b5b826003811115611de857611de76135d4565b5b03611e1f576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611e3357611e326135d4565b5b826003811115611e4657611e456135d4565b5b03611e8a57805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611e819190612b48565b60405180910390fd5b600380811115611e9d57611e9c6135d4565b5b826003811115611eb057611eaf6135d4565b5b03611ef257806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401611ee99190612bfd565b60405180910390fd5b5b5050565b611eff61296b565b825f018263ffffffff1681548110611f1a57611f19613601565b5b905f5260205f20016040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b611fd18383836122a6565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612064575f61200d61058b565b90505f6120186124bf565b9050808211156120615781816040517f1cb15d2600000000000000000000000000000000000000000000000000000000815260040161205892919061350a565b60405180910390fd5b50505b61206f8383836124e2565b505050565b5f805f90505f608084901c111561209357608083901c92506080810190505b5f604084901c11156120ad57604083901c92506040810190505b5f602084901c11156120c757602083901c92506020810190505b5f601084901c11156120e157601083901c92506010810190505b5f600884901c11156120fb57600883901c92506008810190505b5f600484901c111561211557600483901c92506004810190505b5f600284901c111561212f57600283901c92506002810190505b5f600184901c1115612142576001810190505b80915050919050565b5f818310612159578161215b565b825b905092915050565b5f6002828418612173919061362e565b8284166121809190613432565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156121ed5760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016121e4929190613697565b60405180910390fd5b819050919050565b5f80612228612202610966565b61221861220e886112f1565b868863ffffffff16565b8761259a9092919063ffffffff16565b91509150935093915050565b60605f612240836125b5565b90505f602067ffffffffffffffff81111561225e5761225d6131a4565b5b6040519080825280601f01601f1916602001820160405280156122905781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122f6578060025f8282546122ea9190613432565b925050819055506123c4565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561237f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161237693929190613361565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361240b578060025f8282540392505081905550612455565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124b29190612b48565b60405180910390a3505050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361252e5761252b600a610d3561252684612188565b6121f5565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361257a57612577600a610d4a61257284612188565b6121f5565b50505b61259561258684610742565b61258f84610742565b836118a5565b505050565b5f806125a9855f018585612603565b91509150935093915050565b5f8060ff835f1c169050601f8111156125fa576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f805f858054905090505f811115612883575f61262c8760018461262791906133ff565b61180d565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115612717576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff160361279957846127488860018561274391906133ff565b61180d565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550612872565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050612963565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b60405180604001604052805f65ffffffffffff1681526020015f79ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6129e9826129a7565b6129f381856129b1565b9350612a038185602086016129c1565b612a0c816129cf565b840191505092915050565b5f6020820190508181035f830152612a2f81846129df565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a6482612a3b565b9050919050565b612a7481612a5a565b8114612a7e575f80fd5b50565b5f81359050612a8f81612a6b565b92915050565b5f819050919050565b612aa781612a95565b8114612ab1575f80fd5b50565b5f81359050612ac281612a9e565b92915050565b5f8060408385031215612ade57612add612a37565b5b5f612aeb85828601612a81565b9250506020612afc85828601612ab4565b9150509250929050565b5f8115159050919050565b612b1a81612b06565b82525050565b5f602082019050612b335f830184612b11565b92915050565b612b4281612a95565b82525050565b5f602082019050612b5b5f830184612b39565b92915050565b5f805f60608486031215612b7857612b77612a37565b5b5f612b8586828701612a81565b9350506020612b9686828701612a81565b9250506040612ba786828701612ab4565b9150509250925092565b5f60ff82169050919050565b612bc681612bb1565b82525050565b5f602082019050612bdf5f830184612bbd565b92915050565b5f819050919050565b612bf781612be5565b82525050565b5f602082019050612c105f830184612bee565b92915050565b5f60208284031215612c2b57612c2a612a37565b5b5f612c3884828501612a81565b91505092915050565b612c4a81612a5a565b82525050565b5f602082019050612c635f830184612c41565b92915050565b5f63ffffffff82169050919050565b612c8181612c69565b82525050565b5f602082019050612c9a5f830184612c78565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b612cd481612ca0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d0c81612a95565b82525050565b5f612d1d8383612d03565b60208301905092915050565b5f602082019050919050565b5f612d3f82612cda565b612d498185612ce4565b9350612d5483612cf4565b805f5b83811015612d84578151612d6b8882612d12565b9750612d7683612d29565b925050600181019050612d57565b5085935050505092915050565b5f60e082019050612da45f83018a612ccb565b8181036020830152612db681896129df565b90508181036040830152612dca81886129df565b9050612dd96060830187612b39565b612de66080830186612c41565b612df360a0830185612bee565b81810360c0830152612e058184612d35565b905098975050505050505050565b5f60208284031215612e2857612e27612a37565b5b5f612e3584828501612ab4565b91505092915050565b5f65ffffffffffff82169050919050565b612e5881612e3e565b82525050565b5f602082019050612e715f830184612e4f565b92915050565b612e8081612bb1565b8114612e8a575f80fd5b50565b5f81359050612e9b81612e77565b92915050565b612eaa81612be5565b8114612eb4575f80fd5b50565b5f81359050612ec581612ea1565b92915050565b5f805f805f8060c08789031215612ee557612ee4612a37565b5b5f612ef289828a01612a81565b9650506020612f0389828a01612ab4565b9550506040612f1489828a01612ab4565b9450506060612f2589828a01612e8d565b9350506080612f3689828a01612eb7565b92505060a0612f4789828a01612eb7565b9150509295509295509295565b5f805f805f805f60e0888a031215612f6f57612f6e612a37565b5b5f612f7c8a828b01612a81565b9750506020612f8d8a828b01612a81565b9650506040612f9e8a828b01612ab4565b9550506060612faf8a828b01612ab4565b9450506080612fc08a828b01612e8d565b93505060a0612fd18a828b01612eb7565b92505060c0612fe28a828b01612eb7565b91505092959891949750929550565b5f806040838503121561300757613006612a37565b5b5f61301485828601612a81565b925050602061302585828601612a81565b9150509250929050565b61303881612c69565b8114613042575f80fd5b50565b5f813590506130538161302f565b92915050565b5f806040838503121561306f5761306e612a37565b5b5f61307c85828601612a81565b925050602061308d85828601613045565b9150509250929050565b6130a081612e3e565b82525050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6130d4816130a6565b82525050565b604082015f8201516130ee5f850182613097565b50602082015161310160208501826130cb565b50505050565b5f60408201905061311a5f8301846130da565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061316457607f821691505b60208210810361317757613176613120565b5b50919050565b5f6040820190506131905f830185612b39565b61319d6020830184612e4f565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6080820190506131e45f830187612bee565b6131f16020830186612c41565b6131fe6040830185612b39565b61320b6060830184612b39565b95945050505050565b5f60c0820190506132275f830189612bee565b6132346020830188612c41565b6132416040830187612c41565b61324e6060830186612b39565b61325b6080830185612b39565b61326860a0830184612b39565b979650505050505050565b5f6040820190506132865f830185612c41565b6132936020830184612c41565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6132d1826130a6565b91506132dc836130a6565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111561330e5761330d61329a565b5b92915050565b5f61331e826130a6565b9150613329836130a6565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111561335b5761335a61329a565b5b92915050565b5f6060820190506133745f830186612c41565b6133816020830185612b39565b61338e6040830184612b39565b949350505050565b5f819050919050565b5f819050919050565b5f6133c26133bd6133b884613396565b61339f565b612bb1565b9050919050565b6133d2816133a8565b82525050565b5f6040820190506133eb5f8301856133c9565b6133f86020830184612b39565b9392505050565b5f61340982612a95565b915061341483612a95565b925082820390508181111561342c5761342b61329a565b5b92915050565b5f61343c82612a95565b915061344783612a95565b925082820190508082111561345f5761345e61329a565b5b92915050565b5f6040820190506134785f830185612c41565b6134856020830184612b39565b9392505050565b5f60a08201905061349f5f830188612bee565b6134ac6020830187612bee565b6134b96040830186612bee565b6134c66060830185612b39565b6134d36080830184612c41565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60408201905061351d5f830185612b39565b61352a6020830184612b39565b9392505050565b5f819050919050565b5f61355461354f61354a84613531565b61339f565b612bb1565b9050919050565b6135648161353a565b82525050565b5f60408201905061357d5f83018561355b565b61358a6020830184612b39565b9392505050565b5f6080820190506135a45f830187612bee565b6135b16020830186612bbd565b6135be6040830185612bee565b6135cb6060830184612bee565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61363882612a95565b915061364383612a95565b925082613653576136526134dd565b5b828204905092915050565b5f819050919050565b5f61368161367c6136778461365e565b61339f565b612bb1565b9050919050565b61369181613667565b82525050565b5f6040820190506136aa5f830185613688565b6136b76020830184612b39565b939250505056fea2646970667358221220bf246cd17d7eec2843c7037f1def146a2dfd39ce74d0610fa0e1e646d3a4b97264736f6c63430008190033

Deployed Bytecode

0x608060405234801561000f575f80fd5b506004361061014b575f3560e01c806370a08231116100c15780639ab24eb01161007a5780639ab24eb0146103e1578063a9059cbb14610411578063c3cda52014610441578063d505accf1461045d578063dd62ed3e14610479578063f1127ed8146104a95761014b565b806370a08231146102f15780637ecebe001461032157806384b0196e146103515780638e539e8c1461037557806391ddadf4146103a557806395d89b41146103c35761014b565b80633644e515116101135780633644e515146102095780633a46b1a8146102275780634bf5d7e914610257578063587cde1e146102755780635c19a95c146102a55780636fcfff45146102c15761014b565b806306fdde031461014f578063095ea7b31461016d57806318160ddd1461019d57806323b872dd146101bb578063313ce567146101eb575b5f80fd5b6101576104d9565b6040516101649190612a17565b60405180910390f35b61018760048036038101906101829190612ac8565b610569565b6040516101949190612b20565b60405180910390f35b6101a561058b565b6040516101b29190612b48565b60405180910390f35b6101d560048036038101906101d09190612b61565b610594565b6040516101e29190612b20565b60405180910390f35b6101f36105c2565b6040516102009190612bcc565b60405180910390f35b6102116105ca565b60405161021e9190612bfd565b60405180910390f35b610241600480360381019061023c9190612ac8565b6105d8565b60405161024e9190612b48565b60405180910390f35b61025f6106ae565b60405161026c9190612a17565b60405180910390f35b61028f600480360381019061028a9190612c16565b610742565b60405161029c9190612c50565b60405180910390f35b6102bf60048036038101906102ba9190612c16565b6107a7565b005b6102db60048036038101906102d69190612c16565b6107c0565b6040516102e89190612c87565b60405180910390f35b61030b60048036038101906103069190612c16565b6107d1565b6040516103189190612b48565b60405180910390f35b61033b60048036038101906103369190612c16565b610816565b6040516103489190612b48565b60405180910390f35b610359610827565b60405161036c9796959493929190612d91565b60405180910390f35b61038f600480360381019061038a9190612e13565b6108cc565b60405161039c9190612b48565b60405180910390f35b6103ad610966565b6040516103ba9190612e5e565b60405180910390f35b6103cb610974565b6040516103d89190612a17565b60405180910390f35b6103fb60048036038101906103f69190612c16565b610a04565b6040516104089190612b48565b60405180910390f35b61042b60048036038101906104269190612ac8565b610a6d565b6040516104389190612b20565b60405180910390f35b61045b60048036038101906104569190612ecb565b610a8f565b005b61047760048036038101906104729190612f54565b610b54565b005b610493600480360381019061048e9190612ff1565b610c99565b6040516104a09190612b48565b60405180910390f35b6104c360048036038101906104be9190613059565b610d1b565b6040516104d09190613107565b60405180910390f35b6060600380546104e89061314d565b80601f01602080910402602001604051908101604052809291908181526020018280546105149061314d565b801561055f5780601f106105365761010080835404028352916020019161055f565b820191905f5260205f20905b81548152906001019060200180831161054257829003601f168201915b5050505050905090565b5f80610573610d5f565b9050610580818585610d66565b600191505092915050565b5f600254905090565b5f8061059e610d5f565b90506105ab858285610d78565b6105b6858585610e0a565b60019150509392505050565b5f6012905090565b5f6105d3610efa565b905090565b5f806105e2610966565b90508065ffffffffffff1683106106325782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161062992919061317d565b60405180910390fd5b61068961063e84610fb0565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061100990919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b60606106b86110f6565b65ffffffffffff166106c8610966565b65ffffffffffff1614610707576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f6107b0610d5f565b90506107bc8183611105565b5050565b5f6107ca82611215565b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f6108208261126a565b9050919050565b5f6060805f805f606061083861127b565b6108406112b6565b46305f801b5f67ffffffffffffffff81111561085f5761085e6131a4565b5b60405190808252806020026020018201604052801561088d5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f806108d6610966565b90508065ffffffffffff1683106109265782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161091d92919061317d565b60405180910390fd5b61094261093284610fb0565b600a61100990919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b5f61096f6110f6565b905090565b6060600480546109839061314d565b80601f01602080910402602001604051908101604052809291908181526020018280546109af9061314d565b80156109fa5780601f106109d1576101008083540402835291602001916109fa565b820191905f5260205f20905b8154815290600101906020018083116109dd57829003601f168201915b5050505050905090565b5f610a4a60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206112f1565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b5f80610a77610d5f565b9050610a84818585610e0a565b600191505092915050565b83421115610ad457836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610acb9190612b48565b60405180910390fd5b5f610b35610b2d7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610b1294939291906131d1565b60405160208183030381529060405280519060200120611353565b85858561136c565b9050610b41818761139a565b610b4b8188611105565b50505050505050565b83421115610b9957836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610b909190612b48565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610bc78c6113f1565b89604051602001610bdd96959493929190613214565b6040516020818303038152906040528051906020012090505f610bff82611353565b90505f610c0e8287878761136c565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c8257808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610c79929190613273565b60405180910390fd5b610c8d8a8a8a610d66565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610d2361296b565b610d2d8383611444565b905092915050565b5f8183610d4291906132c7565b905092915050565b5f8183610d579190613314565b905092915050565b5f33905090565b610d7383838360016114a3565b505050565b5f610d838484610c99565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e045781811015610df5578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610dec93929190613361565b60405180910390fd5b610e0384848484035f6114a3565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e7a575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e719190612c50565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eea575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ee19190612c50565b60405180910390fd5b610ef5838383611672565b505050565b5f7f0000000000000000000000003b50805453023a91a8bf641e279401a0b23fa6f973ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610f7557507f000000000000000000000000000000000000000000000000000000000000000146145b15610fa2577f4cde95c8d9f8c105f529b0759b37567f6477b15eb9d27c405cd8f198f744aade9050610fad565b610faa611682565b90505b90565b5f65ffffffffffff8016821115611001576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401610ff89291906133d8565b60405180910390fd5b819050919050565b5f80835f018054905090505f80829050600583111561108a575f61102c84611717565b8461103791906133ff565b9050611045875f018261180d565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16101561107857809150611088565b6001816110859190613432565b92505b505b5f611099875f0187858561181f565b90505f81146110e8576110ba875f016001836110b591906133ff565b61180d565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166110ea565b5f5b94505050505092915050565b5f61110043610fb0565b905090565b5f61110f83610742565b90508160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611210818361120b86611894565b6118a5565b505050565b5f61126361125e60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611b15565b611b24565b9050919050565b5f61127482611b7b565b9050919050565b60606112b160057f52656e7a6f000000000000000000000000000000000000000000000000000005611bc190919063ffffffff16565b905090565b60606112ec60067f3100000000000000000000000000000000000000000000000000000000000001611bc190919063ffffffff16565b905090565b5f80825f018054905090505f81146113495761131b835f0160018361131691906133ff565b61180d565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1661134b565b5f5b915050919050565b5f61136561135f610efa565b83611c6e565b9050919050565b5f805f8061137c88888888611cae565b92509250925061138c8282611d95565b829350505050949350505050565b5f6113a4836113f1565b90508082146113ec5782816040517f752d88c00000000000000000000000000000000000000000000000000000000081526004016113e3929190613465565b60405180910390fd5b505050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b61144c61296b565b61149b8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611ef790919063ffffffff16565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611513575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161150a9190612c50565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611583575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161157a9190612c50565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561166c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516116639190612b48565b60405180910390a35b50505050565b61167d838383611fc6565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f2a7f7c8e85ea4f689056fac54bfa0e8c82ac1878e4eaa8a7a19fc050425e70eb7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646306040516020016116fc95949392919061348c565b60405160208183030381529060405280519060200120905090565b5f808203611727575f9050611808565b5f600161173384612074565b901c6001901b9050600181848161174d5761174c6134dd565b5b048201901c90506001818481611766576117656134dd565b5b048201901c9050600181848161177f5761177e6134dd565b5b048201901c90506001818481611798576117976134dd565b5b048201901c905060018184816117b1576117b06134dd565b5b048201901c905060018184816117ca576117c96134dd565b5b048201901c905060018184816117e3576117e26134dd565b5b048201901c9050611804818285816117fe576117fd6134dd565b5b0461214b565b9150505b919050565b5f825f528160205f2001905092915050565b5f5b81831015611889575f6118348484612163565b90508465ffffffffffff16611849878361180d565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff16111561187357809250611883565b6001816118809190613432565b93505b50611821565b819050949350505050565b5f61189e826107d1565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118e057505f81115b15611b10575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119fa575f8061196b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20610d4a61196686612188565b6121f5565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516119ef92919061350a565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611b0f575f80611a8060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20610d35611a7b86612188565b6121f5565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611b0492919061350a565b60405180910390a250505b5b505050565b5f815f01805490509050919050565b5f63ffffffff8016821115611b73576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401611b6a92919061356a565b60405180910390fd5b819050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606060ff5f1b8314611bdd57611bd683612234565b9050611c68565b818054611be99061314d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c159061314d565b8015611c605780601f10611c3757610100808354040283529160200191611c60565b820191905f5260205f20905b815481529060010190602001808311611c4357829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611cea575f600385925092509250611d8b565b5f6001888888886040515f8152602001604052604051611d0d9493929190613591565b6020604051602081039080840390855afa158015611d2d573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d7e575f60015f801b93509350935050611d8b565b805f805f1b935093509350505b9450945094915050565b5f6003811115611da857611da76135d4565b5b826003811115611dbb57611dba6135d4565b5b0315611ef35760016003811115611dd557611dd46135d4565b5b826003811115611de857611de76135d4565b5b03611e1f576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611e3357611e326135d4565b5b826003811115611e4657611e456135d4565b5b03611e8a57805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611e819190612b48565b60405180910390fd5b600380811115611e9d57611e9c6135d4565b5b826003811115611eb057611eaf6135d4565b5b03611ef257806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401611ee99190612bfd565b60405180910390fd5b5b5050565b611eff61296b565b825f018263ffffffff1681548110611f1a57611f19613601565b5b905f5260205f20016040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b611fd18383836122a6565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612064575f61200d61058b565b90505f6120186124bf565b9050808211156120615781816040517f1cb15d2600000000000000000000000000000000000000000000000000000000815260040161205892919061350a565b60405180910390fd5b50505b61206f8383836124e2565b505050565b5f805f90505f608084901c111561209357608083901c92506080810190505b5f604084901c11156120ad57604083901c92506040810190505b5f602084901c11156120c757602083901c92506020810190505b5f601084901c11156120e157601083901c92506010810190505b5f600884901c11156120fb57600883901c92506008810190505b5f600484901c111561211557600483901c92506004810190505b5f600284901c111561212f57600283901c92506002810190505b5f600184901c1115612142576001810190505b80915050919050565b5f818310612159578161215b565b825b905092915050565b5f6002828418612173919061362e565b8284166121809190613432565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156121ed5760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016121e4929190613697565b60405180910390fd5b819050919050565b5f80612228612202610966565b61221861220e886112f1565b868863ffffffff16565b8761259a9092919063ffffffff16565b91509150935093915050565b60605f612240836125b5565b90505f602067ffffffffffffffff81111561225e5761225d6131a4565b5b6040519080825280601f01601f1916602001820160405280156122905781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122f6578060025f8282546122ea9190613432565b925050819055506123c4565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561237f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161237693929190613361565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361240b578060025f8282540392505081905550612455565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124b29190612b48565b60405180910390a3505050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361252e5761252b600a610d3561252684612188565b6121f5565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361257a57612577600a610d4a61257284612188565b6121f5565b50505b61259561258684610742565b61258f84610742565b836118a5565b505050565b5f806125a9855f018585612603565b91509150935093915050565b5f8060ff835f1c169050601f8111156125fa576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f805f858054905090505f811115612883575f61262c8760018461262791906133ff565b61180d565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115612717576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff160361279957846127488860018561274391906133ff565b61180d565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550612872565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050612963565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b60405180604001604052805f65ffffffffffff1681526020015f79ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6129e9826129a7565b6129f381856129b1565b9350612a038185602086016129c1565b612a0c816129cf565b840191505092915050565b5f6020820190508181035f830152612a2f81846129df565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a6482612a3b565b9050919050565b612a7481612a5a565b8114612a7e575f80fd5b50565b5f81359050612a8f81612a6b565b92915050565b5f819050919050565b612aa781612a95565b8114612ab1575f80fd5b50565b5f81359050612ac281612a9e565b92915050565b5f8060408385031215612ade57612add612a37565b5b5f612aeb85828601612a81565b9250506020612afc85828601612ab4565b9150509250929050565b5f8115159050919050565b612b1a81612b06565b82525050565b5f602082019050612b335f830184612b11565b92915050565b612b4281612a95565b82525050565b5f602082019050612b5b5f830184612b39565b92915050565b5f805f60608486031215612b7857612b77612a37565b5b5f612b8586828701612a81565b9350506020612b9686828701612a81565b9250506040612ba786828701612ab4565b9150509250925092565b5f60ff82169050919050565b612bc681612bb1565b82525050565b5f602082019050612bdf5f830184612bbd565b92915050565b5f819050919050565b612bf781612be5565b82525050565b5f602082019050612c105f830184612bee565b92915050565b5f60208284031215612c2b57612c2a612a37565b5b5f612c3884828501612a81565b91505092915050565b612c4a81612a5a565b82525050565b5f602082019050612c635f830184612c41565b92915050565b5f63ffffffff82169050919050565b612c8181612c69565b82525050565b5f602082019050612c9a5f830184612c78565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b612cd481612ca0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d0c81612a95565b82525050565b5f612d1d8383612d03565b60208301905092915050565b5f602082019050919050565b5f612d3f82612cda565b612d498185612ce4565b9350612d5483612cf4565b805f5b83811015612d84578151612d6b8882612d12565b9750612d7683612d29565b925050600181019050612d57565b5085935050505092915050565b5f60e082019050612da45f83018a612ccb565b8181036020830152612db681896129df565b90508181036040830152612dca81886129df565b9050612dd96060830187612b39565b612de66080830186612c41565b612df360a0830185612bee565b81810360c0830152612e058184612d35565b905098975050505050505050565b5f60208284031215612e2857612e27612a37565b5b5f612e3584828501612ab4565b91505092915050565b5f65ffffffffffff82169050919050565b612e5881612e3e565b82525050565b5f602082019050612e715f830184612e4f565b92915050565b612e8081612bb1565b8114612e8a575f80fd5b50565b5f81359050612e9b81612e77565b92915050565b612eaa81612be5565b8114612eb4575f80fd5b50565b5f81359050612ec581612ea1565b92915050565b5f805f805f8060c08789031215612ee557612ee4612a37565b5b5f612ef289828a01612a81565b9650506020612f0389828a01612ab4565b9550506040612f1489828a01612ab4565b9450506060612f2589828a01612e8d565b9350506080612f3689828a01612eb7565b92505060a0612f4789828a01612eb7565b9150509295509295509295565b5f805f805f805f60e0888a031215612f6f57612f6e612a37565b5b5f612f7c8a828b01612a81565b9750506020612f8d8a828b01612a81565b9650506040612f9e8a828b01612ab4565b9550506060612faf8a828b01612ab4565b9450506080612fc08a828b01612e8d565b93505060a0612fd18a828b01612eb7565b92505060c0612fe28a828b01612eb7565b91505092959891949750929550565b5f806040838503121561300757613006612a37565b5b5f61301485828601612a81565b925050602061302585828601612a81565b9150509250929050565b61303881612c69565b8114613042575f80fd5b50565b5f813590506130538161302f565b92915050565b5f806040838503121561306f5761306e612a37565b5b5f61307c85828601612a81565b925050602061308d85828601613045565b9150509250929050565b6130a081612e3e565b82525050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6130d4816130a6565b82525050565b604082015f8201516130ee5f850182613097565b50602082015161310160208501826130cb565b50505050565b5f60408201905061311a5f8301846130da565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061316457607f821691505b60208210810361317757613176613120565b5b50919050565b5f6040820190506131905f830185612b39565b61319d6020830184612e4f565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6080820190506131e45f830187612bee565b6131f16020830186612c41565b6131fe6040830185612b39565b61320b6060830184612b39565b95945050505050565b5f60c0820190506132275f830189612bee565b6132346020830188612c41565b6132416040830187612c41565b61324e6060830186612b39565b61325b6080830185612b39565b61326860a0830184612b39565b979650505050505050565b5f6040820190506132865f830185612c41565b6132936020830184612c41565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6132d1826130a6565b91506132dc836130a6565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111561330e5761330d61329a565b5b92915050565b5f61331e826130a6565b9150613329836130a6565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111561335b5761335a61329a565b5b92915050565b5f6060820190506133745f830186612c41565b6133816020830185612b39565b61338e6040830184612b39565b949350505050565b5f819050919050565b5f819050919050565b5f6133c26133bd6133b884613396565b61339f565b612bb1565b9050919050565b6133d2816133a8565b82525050565b5f6040820190506133eb5f8301856133c9565b6133f86020830184612b39565b9392505050565b5f61340982612a95565b915061341483612a95565b925082820390508181111561342c5761342b61329a565b5b92915050565b5f61343c82612a95565b915061344783612a95565b925082820190508082111561345f5761345e61329a565b5b92915050565b5f6040820190506134785f830185612c41565b6134856020830184612b39565b9392505050565b5f60a08201905061349f5f830188612bee565b6134ac6020830187612bee565b6134b96040830186612bee565b6134c66060830185612b39565b6134d36080830184612c41565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60408201905061351d5f830185612b39565b61352a6020830184612b39565b9392505050565b5f819050919050565b5f61355461354f61354a84613531565b61339f565b612bb1565b9050919050565b6135648161353a565b82525050565b5f60408201905061357d5f83018561355b565b61358a6020830184612b39565b9392505050565b5f6080820190506135a45f830187612bee565b6135b16020830186612bbd565b6135be6040830185612bee565b6135cb6060830184612bee565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61363882612a95565b915061364383612a95565b925082613653576136526134dd565b5b828204905092915050565b5f819050919050565b5f61368161367c6136778461365e565b61339f565b612bb1565b9050919050565b61369181613667565b82525050565b5f6040820190506136aa5f830185613688565b6136b76020830184612b39565b939250505056fea2646970667358221220bf246cd17d7eec2843c7037f1def146a2dfd39ce74d0610fa0e1e646d3a4b97264736f6c63430008190033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.