// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
// ERC721C's royalty enforcement needs an on-chain transfer validator set via
// setTransferValidator (inherited from CreatorTokenBase); until one is
// configured, royalties are advisory only, same as plain ERC-2981.
import "creator-token-standards/access/OwnableBasic.sol";
import "creator-token-standards/erc721c/ERC721C.sol";
import "creator-token-standards/programmable-royalties/BasicRoyalties.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import "@openzeppelin/contracts/utils/cryptography/EIP712.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
contract BrimSyndicate is OwnableBasic, ERC721C, BasicRoyalties, EIP712 {
using ECDSA for bytes32;
using Strings for uint256;
uint256 public constant MAX_SUPPLY = 5000;
uint256 public constant TEAM_RESERVE = 100;
uint256 public constant FREE_ALLOCATION = 900;
uint256 public constant FREE_PER_WALLET = 1;
uint256 public constant BOUNTY_PER_WALLET = 10;
uint256 public bountyPrice = 0.0005 ether;
bool public bailOpen;
bool public bountyOpen;
address public signer;
string public baseURI;
mapping(address => uint256) public bailClaimed;
mapping(address => uint256) public bountyClaimed;
uint256 public bailClaimedTotal;
uint256 public teamMintedTotal;
uint256 public totalMinted;
bytes32 private constant VOUCHER_TYPEHASH =
keccak256("Voucher(address wallet,uint256 tokenId)");
constructor(address _signer, string memory _baseURI, address royaltyReceiver_, uint96 royaltyFeeNumerator_)
ERC721OpenZeppelin("Brim Syndicate", "BRIM")
BasicRoyalties(royaltyReceiver_, royaltyFeeNumerator_)
EIP712("Brim Syndicate", "1")
{
signer = _signer;
baseURI = _baseURI;
}
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721C, ERC2981) returns (bool) {
return ERC721C.supportsInterface(interfaceId) || ERC2981.supportsInterface(interfaceId);
}
modifier onlyEOA() {
require(tx.origin == msg.sender, "no contracts");
_;
}
modifier mintable(uint256 tokenId) {
require(tokenId > TEAM_RESERVE && tokenId <= MAX_SUPPLY, "invalid tokenId");
require(_ownerOf(tokenId) == address(0), "already minted");
_;
}
function teamMint(address to, uint256 tokenId) external {
_requireCallerIsContractOwner();
require(tokenId >= 1 && tokenId <= TEAM_RESERVE, "not reserved");
require(_ownerOf(tokenId) == address(0), "already minted");
teamMintedTotal += 1;
_safeMint(to, tokenId);
}
function bailMint(uint256 tokenId, bytes calldata signature)
external onlyEOA mintable(tokenId)
{
require(bailOpen, "bail closed");
require(bailClaimed[msg.sender] < FREE_PER_WALLET, "already claimed");
require(bailClaimedTotal < FREE_ALLOCATION, "bail sold out");
require(_verify(msg.sender, tokenId, signature), "bad voucher");
bailClaimed[msg.sender] += 1;
bailClaimedTotal += 1;
totalMinted += 1;
_safeMint(msg.sender, tokenId);
}
function bountyMint(uint256 tokenId) external payable onlyEOA mintable(tokenId) {
require(bountyOpen, "bounty closed");
require(bountyClaimed[msg.sender] < BOUNTY_PER_WALLET, "wallet cap");
require(msg.value >= bountyPrice, "underpaid");
bountyClaimed[msg.sender] += 1;
totalMinted += 1;
_safeMint(msg.sender, tokenId);
}
function bountyMintBatch(uint256[] calldata tokenIds) external payable onlyEOA {
require(bountyOpen, "bounty closed");
uint256 n = tokenIds.length;
require(bountyClaimed[msg.sender] + n <= BOUNTY_PER_WALLET, "wallet cap");
require(msg.value >= bountyPrice * n, "underpaid");
bountyClaimed[msg.sender] += n;
totalMinted += n;
for (uint256 i = 0; i < n; i++) {
uint256 tokenId = tokenIds[i];
require(tokenId > TEAM_RESERVE && tokenId <= MAX_SUPPLY, "invalid tokenId");
require(_ownerOf(tokenId) == address(0), "already minted");
_safeMint(msg.sender, tokenId);
}
}
function _verify(address wallet, uint256 tokenId, bytes calldata sig) internal view returns (bool) {
bytes32 digest = _hashTypedDataV4(
keccak256(abi.encode(VOUCHER_TYPEHASH, wallet, tokenId))
);
return digest.recover(sig) == signer;
}
function tokenURI(uint256 tokenId) public view override returns (string memory) {
require(_ownerOf(tokenId) != address(0), "nonexistent");
return string(abi.encodePacked(baseURI, tokenId.toString()));
}
function setBailOpen(bool _open) external { _requireCallerIsContractOwner(); bailOpen = _open; }
function setBountyOpen(bool _open) external { _requireCallerIsContractOwner(); bountyOpen = _open; }
function setSigner(address _signer) external { _requireCallerIsContractOwner(); signer = _signer; }
function setBountyPrice(uint256 _p) external { _requireCallerIsContractOwner(); bountyPrice = _p; }
function setBaseURI(string calldata u) external { _requireCallerIsContractOwner(); baseURI = u; }
function setDefaultRoyalty(address receiver, uint96 feeNumerator) public {
_requireCallerIsContractOwner();
_setDefaultRoyalty(receiver, feeNumerator);
}
function setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator) public {
_requireCallerIsContractOwner();
_setTokenRoyalty(tokenId, receiver, feeNumerator);
}
function withdraw() external {
_requireCallerIsContractOwner();
(bool ok, ) = payable(owner()).call{value: address(this).balance}("");
require(ok, "withdraw failed");
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_signer",
"type": "address",
"internalType": "address"
},
{
"name": "_baseURI",
"type": "string",
"internalType": "string"
},
{
"name": "royaltyReceiver_",
"type": "address",
"internalType": "address"
},
{
"name": "royaltyFeeNumerator_",
"type": "uint96",
"internalType": "uint96"
}
],
"stateMutability": "nonpayable"
},
{
"name": "CreatorTokenBase__InvalidTransferValidatorContract",
"type": "error",
"inputs": []
},
{
"name": "ShouldNotMintToBurnAddress",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ApprovalForAll",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "AutomaticApprovalOfTransferValidatorSet",
"type": "event",
"inputs": [
{
"name": "autoApproved",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "DefaultRoyaltySet",
"type": "event",
"inputs": [
{
"name": "receiver",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "feeNumerator",
"type": "uint96",
"indexed": false,
"internalType": "uint96"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "TokenRoyaltySet",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "receiver",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "feeNumerator",
"type": "uint96",
"indexed": false,
"internalType": "uint96"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "TransferValidatorUpdated",
"type": "event",
"inputs": [
{
"name": "oldValidator",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "newValidator",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "BOUNTY_PER_WALLET",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "DEFAULT_TRANSFER_VALIDATOR",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "FREE_ALLOCATION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "FREE_PER_WALLET",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "TEAM_RESERVE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "autoApproveTransfersFromValidator",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "bailClaimed",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "bailClaimedTotal",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "bailMint",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "signature",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "bailOpen",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "baseURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "bountyClaimed",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "bountyMint",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "bountyMintBatch",
"type": "function",
"inputs": [
{
"name": "tokenIds",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "bountyOpen",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "bountyPrice",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getApproved",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "getTransferValidationFunction",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "functionSignature",
"type": "bytes4",
"internalType": "bytes4"
},
{
"name": "isViewFunction",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "pure"
},
{
"name": "getTransferValidator",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "validator",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "isApprovedForAll",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "isApproved",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "ownerOf",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "royaltyInfo",
"type": "function",
"inputs": [
{
"name": "_tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_salePrice",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setApprovalForAll",
"type": "function",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setAutomaticApprovalOfTransfersFromValidator",
"type": "function",
"inputs": [
{
"name": "autoApprove",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setBailOpen",
"type": "function",
"inputs": [
{
"name": "_open",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setBaseURI",
"type": "function",
"inputs": [
{
"name": "u",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setBountyOpen",
"type": "function",
"inputs": [
{
"name": "_open",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setBountyPrice",
"type": "function",
"inputs": [
{
"name": "_p",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setDefaultRoyalty",
"type": "function",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
},
{
"name": "feeNumerator",
"type": "uint96",
"internalType": "uint96"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setSigner",
"type": "function",
"inputs": [
{
"name": "_signer",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setTokenRoyalty",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "receiver",
"type": "address",
"internalType": "address"
},
{
"name": "feeNumerator",
"type": "uint96",
"internalType": "uint96"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setTransferValidator",
"type": "function",
"inputs": [
{
"name": "transferValidator_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "signer",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "supportsInterface",
"type": "function",
"inputs": [
{
"name": "interfaceId",
"type": "bytes4",
"internalType": "bytes4"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "teamMint",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "teamMintedTotal",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "tokenURI",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalMinted",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "withdraw",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x6101406040526601c6bf52634000600c5534801561001b575f5ffd5b50604051613a22380380613a2283398101604081905261003a916104e5565b6040518060400160405280600e81526020016d4272696d2053796e64696361746560901b815250604051806040016040528060018152602001603160f81b81525083836040518060400160405280600e81526020016d4272696d2053796e64696361746560901b815250604051806040016040528060048152602001634252494d60e01b81525060405180602001604052805f81525060405180602001604052805f815250815f90816100ed9190610655565b5060016100fa8282610655565b50505061010d828261021460201b60201c565b50610119905033610232565b610121610283565b61013e73721c008fdff27bf06e7e123956e2fe03b63342e36102d1565b6101488282610349565b5050815160208084019190912082518383012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c00190528051940193909320919290916080523060c052610120525050600d805462010000600160b01b031916620100006001600160a01b0389160217905550600e905061020a8482610655565b5050505050610713565b60066102208382610655565b50600761022d8282610655565b505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b604080515f815273721c008fdff27bf06e7e123956e2fe03b63342e360208201527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1565b6001600160a01b0381161561034657803b8015610344576040805163fb2de5d760e01b81523060048201526102d1602482015290516001600160a01b0384169163fb2de5d7916044808301925f92919082900301818387803b158015610335575f5ffd5b505af192505050801561022d57505b505b50565b610353828261039e565b6040516001600160601b03821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b6127106001600160601b03821611156104115760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b0382166104675760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610408565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600a55565b80516001600160a01b03811681146104b6575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160601b03811681146104b6575f5ffd5b5f5f5f5f608085870312156104f8575f5ffd5b610501856104a0565b60208601519094506001600160401b0381111561051c575f5ffd5b8501601f8101871361052c575f5ffd5b80516001600160401b03811115610545576105456104bb565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610573576105736104bb565b60405281815282820160200189101561058a575f5ffd5b8160208401602083015e5f602083830101528095505050506105ae604086016104a0565b91506105bc606086016104cf565b905092959194509250565b600181811c908216806105db57607f821691505b6020821081036105f957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022d578282111561022d57805f5260205f20601f840160051c602085101561062a57505f5b90810190601f840160051c035f5b8181101561064d575f83820155600101610638565b505050505050565b81516001600160401b0381111561066e5761066e6104bb565b6106828161067c84546105c7565b846105ff565b6020601f8211600181146106b4575f831561069d5750848201515b5f19600385901b1c1916600184901b17845561070c565b5f84815260208120601f198516915b828110156106e357878501518255602094850194600190920191016106c3565b508482101561070057868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b60805160a05160c05160e05161010051610120516132c861075a5f395f61242c01525f61247b01525f61245601525f6123af01525f6123d901525f61240301526132c85ff3fe6080604052600436106102bf575f3560e01c8063715018a61161016f578063a9fc664e116100d8578063da2e35c511610092578063eeabd21d1161006d578063eeabd21d1461082e578063f2fde38b14610841578063f5d1c7f314610860578063f67008361461087e575f5ffd5b8063da2e35c5146107e6578063e5408eae146107fb578063e985e9c51461080f575f5ffd5b8063a9fc664e14610737578063add5a4fa14610756578063b88d4fde14610775578063c87b56dd14610794578063cd90e5af146107b3578063d05f329a146107c7575f5ffd5b806395d89b411161012957806395d89b411461069c57806396bd911f146106b05780639c13554a146106cf5780639e05d240146106e4578063a22cb46514610703578063a2309ff814610722575f5ffd5b8063715018a61461060e57806376b8f16f146106225780637e60bdae146106415780638c5c5e16146106565780638da5cb5b1461066a57806393aee0e714610687575f5ffd5b80632a55205a1161022b57806355f804b3116101e55780636352211e116101c05780636352211e1461059d5780636c0360eb146105bc5780636c19e783146105d057806370a08231146105ef575f5ffd5b806355f804b31461053f5780635944c7531461055e5780636221d13c1461057d575f5ffd5b80632a55205a1461048d57806332cb6b0c146104cb5780633bad52b2146104e05780633ccfd60b146104f9578063400cb74c1461050d57806342842e0e14610520575f5ffd5b8063098144d41161027c578063098144d4146103b65780630d705df6146103ca57806312a69449146103f1578063173eb75a1461042a578063238ac9331461044957806323b872dd1461046e575f5ffd5b806301463546146102c357806301ffc9a71461030757806304634d8d1461033657806306fdde0314610357578063081812fc14610378578063095ea7b314610397575b5f5ffd5b3480156102ce575f5ffd5b506102ea73721c008fdff27bf06e7e123956e2fe03b63342e381565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610312575f5ffd5b50610326610321366004612a03565b6108a9565b60405190151581526020016102fe565b348015610341575f5ffd5b50610355610350366004612a56565b6108c8565b005b348015610362575f5ffd5b5061036b6108de565b6040516102fe9190612ab5565b348015610383575f5ffd5b506102ea610392366004612ac7565b61096e565b3480156103a2575f5ffd5b506103556103b1366004612ade565b610993565b3480156103c1575f5ffd5b506102ea610aac565b3480156103d5575f5ffd5b506040805163657711f560e11b815260016020820152016102fe565b3480156103fc575f5ffd5b5061041c61040b366004612b06565b60106020525f908152604090205481565b6040519081526020016102fe565b348015610435575f5ffd5b50610355610444366004612b5d565b610ae8565b348015610454575f5ffd5b50600d546102ea906201000090046001600160a01b031681565b348015610479575f5ffd5b50610355610488366004612ba5565b610cea565b348015610498575f5ffd5b506104ac6104a7366004612bdf565b610d1b565b604080516001600160a01b0390931683526020830191909152016102fe565b3480156104d6575f5ffd5b5061041c61138881565b3480156104eb575f5ffd5b50600d546103269060ff1681565b348015610504575f5ffd5b50610355610dc7565b61035561051b366004612ac7565b610e74565b34801561052b575f5ffd5b5061035561053a366004612ba5565b61100e565b34801561054a575f5ffd5b50610355610559366004612bff565b611028565b348015610569575f5ffd5b50610355610578366004612c3e565b61103d565b348015610588575f5ffd5b5060095461032690600160a01b900460ff1681565b3480156105a8575f5ffd5b506102ea6105b7366004612ac7565b611050565b3480156105c7575f5ffd5b5061036b6110af565b3480156105db575f5ffd5b506103556105ea366004612b06565b61113b565b3480156105fa575f5ffd5b5061041c610609366004612b06565b61116d565b348015610619575f5ffd5b506103556111f1565b34801561062d575f5ffd5b5061035561063c366004612ac7565b611204565b34801561064c575f5ffd5b5061041c60125481565b348015610661575f5ffd5b5061041c600a81565b348015610675575f5ffd5b506008546001600160a01b03166102ea565b348015610692575f5ffd5b5061041c61038481565b3480156106a7575f5ffd5b5061036b611211565b3480156106bb575f5ffd5b506103556106ca366004612c86565b611220565b3480156106da575f5ffd5b5061041c60115481565b3480156106ef575f5ffd5b506103556106fe366004612c86565b611242565b34801561070e575f5ffd5b5061035561071d366004612c9f565b6112a2565b34801561072d575f5ffd5b5061041c60135481565b348015610742575f5ffd5b50610355610751366004612b06565b6112ad565b348015610761575f5ffd5b50610355610770366004612ade565b611372565b348015610780575f5ffd5b5061035561078f366004612cdb565b61141d565b34801561079f575f5ffd5b5061036b6107ae366004612ac7565b61144f565b3480156107be575f5ffd5b5061041c600181565b3480156107d2575f5ffd5b506103556107e1366004612c86565b6114d5565b3480156107f1575f5ffd5b5061041c600c5481565b348015610806575f5ffd5b5061041c606481565b34801561081a575f5ffd5b50610326610829366004612db8565b6114f0565b61035561083c366004612de0565b611553565b34801561084c575f5ffd5b5061035561085b366004612b06565b611733565b34801561086b575f5ffd5b50600d5461032690610100900460ff1681565b348015610889575f5ffd5b5061041c610898366004612b06565b600f6020525f908152604090205481565b5f6108b3826117a9565b806108c257506108c2826117e8565b92915050565b6108d061180c565b6108da8282611814565b5050565b6060600680546108ed90612e51565b80601f016020809104026020016040519081016040528092919081815260200182805461091990612e51565b80156109645780601f1061093b57610100808354040283529160200191610964565b820191905f5260205f20905b81548152906001019060200180831161094757829003601f168201915b5050505050905090565b5f61097882611869565b505f908152600460205260409020546001600160a01b031690565b5f61099d82611050565b9050806001600160a01b0316836001600160a01b031603610a0f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610a2b5750610a2b81336114f0565b610a9d5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610a06565b610aa783836118c7565b505050565b6009546001600160a01b031680610ae557600854600160a01b900460ff16610ae5575073721c008fdff27bf06e7e123956e2fe03b63342e35b90565b323314610b075760405162461bcd60e51b8152600401610a0690612e89565b82606481118015610b1a57506113888111155b610b365760405162461bcd60e51b8152600401610a0690612eaf565b5f818152600260205260409020546001600160a01b031615610b6a5760405162461bcd60e51b8152600401610a0690612ed8565b600d5460ff16610baa5760405162461bcd60e51b815260206004820152600b60248201526a18985a5b0818db1bdcd95960aa1b6044820152606401610a06565b335f908152600f6020526040902054600111610bfa5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b6044820152606401610a06565b61038460115410610c3d5760405162461bcd60e51b815260206004820152600d60248201526c18985a5b081cdbdb19081bdd5d609a1b6044820152606401610a06565b610c4933858585611934565b610c835760405162461bcd60e51b815260206004820152600b60248201526a3130b2103b37bab1b432b960a91b6044820152606401610a06565b335f908152600f60205260408120805460019290610ca2908490612f14565b92505081905550600160115f828254610cbb9190612f14565b92505081905550600160135f828254610cd49190612f14565b90915550610ce490503385611a14565b50505050565b610cf43382611a2d565b610d105760405162461bcd60e51b8152600401610a0690612f27565b610aa7838383611a8a565b5f828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610d8f575060408051808201909152600a546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101515f9061271090610dad906001600160601b031687612f74565b610db79190612f8b565b91519350909150505b9250929050565b610dcf61180c565b5f610de26008546001600160a01b031690565b6001600160a01b0316476040515f6040518083038185875af1925050503d805f8114610e29576040519150601f19603f3d011682016040523d82523d5f602084013e610e2e565b606091505b5050905080610e715760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610a06565b50565b323314610e935760405162461bcd60e51b8152600401610a0690612e89565b80606481118015610ea657506113888111155b610ec25760405162461bcd60e51b8152600401610a0690612eaf565b5f818152600260205260409020546001600160a01b031615610ef65760405162461bcd60e51b8152600401610a0690612ed8565b600d54610100900460ff16610f3d5760405162461bcd60e51b815260206004820152600d60248201526c189bdd5b9d1e4818db1bdcd959609a1b6044820152606401610a06565b335f90815260106020526040902054600a11610f885760405162461bcd60e51b815260206004820152600a602482015269077616c6c6574206361760b41b6044820152606401610a06565b600c54341015610fc65760405162461bcd60e51b81526020600482015260096024820152681d5b99195c9c185a5960ba1b6044820152606401610a06565b335f908152601060205260408120805460019290610fe5908490612f14565b92505081905550600160135f828254610ffe9190612f14565b909155506108da90503383611a14565b610aa783838360405180602001604052805f81525061141d565b61103061180c565b600e610aa7828483612ff8565b61104561180c565b610aa7838383611c01565b5f818152600260205260408120546001600160a01b0316806108c25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a06565b600e80546110bc90612e51565b80601f01602080910402602001604051908101604052809291908181526020018280546110e890612e51565b80156111335780601f1061110a57610100808354040283529160200191611133565b820191905f5260205f20905b81548152906001019060200180831161111657829003601f168201915b505050505081565b61114361180c565b600d80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b5f6001600160a01b0382166111d65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610a06565b506001600160a01b03165f9081526003602052604090205490565b6111f9611c5b565b6112025f611cb5565b565b61120c61180c565b600c55565b6060600780546108ed90612e51565b61122861180c565b600d80549115156101000261ff0019909216919091179055565b61124a61180c565b60098054821515600160a01b0260ff60a01b199091161790556040517f6787c7f9a80aa0f5ceddab2c54f1f5169c0b88e75dd5e19d5e858a64144c7dbc9061129790831515815260200190565b60405180910390a150565b6108da338383611d06565b6112b561180c565b6001600160a01b038116803b151590158015906112d0575080155b156112ee576040516332483afb60e01b815260040160405180910390fd5b7fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac611317610aac565b604080516001600160a01b03928316815291851660208301520160405180910390a16008805460ff60a01b1916600160a01b179055600980546001600160a01b0384166001600160a01b03199091161790556108da82611dcb565b61137a61180c565b6001811015801561138c575060648111155b6113c75760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd081c995cd95c9d995960a21b6044820152606401610a06565b5f818152600260205260409020546001600160a01b0316156113fb5760405162461bcd60e51b8152600401610a0690612ed8565b600160125f82825461140d9190612f14565b909155506108da90508282611a14565b6114273383611a2d565b6114435760405162461bcd60e51b8152600401610a0690612f27565b610ce484848484611e49565b5f818152600260205260409020546060906001600160a01b03166114a35760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b6044820152606401610a06565b600e6114ae83611e7c565b6040516020016114bf9291906130b2565b6040516020818303038152906040529050919050565b6114dd61180c565b600d805460ff1916911515919091179055565b6001600160a01b038281165f9081526005602090815260408083209385168352929052205460ff16806108c257600954600160a01b900460ff16156108c257611537610aac565b6001600160a01b0316826001600160a01b031614905092915050565b3233146115725760405162461bcd60e51b8152600401610a0690612e89565b600d54610100900460ff166115b95760405162461bcd60e51b815260206004820152600d60248201526c189bdd5b9d1e4818db1bdcd959609a1b6044820152606401610a06565b335f908152601060205260409020548190600a906115d8908390612f14565b11156116135760405162461bcd60e51b815260206004820152600a602482015269077616c6c6574206361760b41b6044820152606401610a06565b80600c546116219190612f74565b34101561165c5760405162461bcd60e51b81526020600482015260096024820152681d5b99195c9c185a5960ba1b6044820152606401610a06565b335f908152601060205260408120805483929061167a908490612f14565b925050819055508060135f8282546116929190612f14565b909155505f90505b81811015610ce4575f8484838181106116b5576116b5613132565b9050602002013590506064811180156116d057506113888111155b6116ec5760405162461bcd60e51b8152600401610a0690612eaf565b5f818152600260205260409020546001600160a01b0316156117205760405162461bcd60e51b8152600401610a0690612ed8565b61172a3382611a14565b5060010161169a565b61173b611c5b565b6001600160a01b0381166117a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a06565b610e7181611cb5565b5f6001600160e01b03198216632b435fdb60e21b14806117d957506001600160e01b0319821663503e914d60e11b145b806108c257506108c282611f0c565b5f6001600160e01b0319821663152a902d60e11b14806108c257506108c2826117a9565b611202611c5b565b61181e8282611f5b565b6040516001600160601b03821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b5f818152600260205260409020546001600160a01b0316610e715760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a06565b5f81815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906118fb82611050565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b604080517f31a11008d08d24c7008c6e417121dc59d50c8860acb38c20878f87eaa483cf0860208201526001600160a01b03861691810191909152606081018490525f90819061199c9060800160405160208183030381529060405280519060200120612015565b9050600d60029054906101000a90046001600160a01b03166001600160a01b03166119fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525086939250506120619050565b6001600160a01b0316149150505b949350505050565b6108da828260405180602001604052805f815250612083565b5f5f611a3883611050565b9050806001600160a01b0316846001600160a01b03161480611a5f5750611a5f81856114f0565b80611a0c5750836001600160a01b0316611a788461096e565b6001600160a01b031614949350505050565b826001600160a01b0316611a9d82611050565b6001600160a01b031614611ac35760405162461bcd60e51b8152600401610a0690613146565b6001600160a01b038216611b255760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a06565b611b3283838360016120b5565b826001600160a01b0316611b4582611050565b6001600160a01b031614611b6b5760405162461bcd60e51b8152600401610a0690613146565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610aa783838360016120e2565b611c0c838383612108565b6040516001600160601b03821681526001600160a01b0383169084907f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c906020015b60405180910390a3505050565b6008546001600160a01b031633146112025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a06565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b816001600160a01b0316836001600160a01b031603611d675760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a06565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611c4e565b6001600160a01b03811615610e7157803b80156108da576040805163fb2de5d760e01b81523060048201526102d1602482015290516001600160a01b0384169163fb2de5d7916044808301925f92919082900301818387803b158015611e2f575f5ffd5b505af1925050508015611e40575060015b156108da575050565b611e54848484611a8a565b611e60848484846121d2565b610ce45760405162461bcd60e51b8152600401610a069061318b565b60605f611e88836122cc565b60010190505f8167ffffffffffffffff811115611ea757611ea7612cc7565b6040519080825280601f01601f191660200182016040528015611ed1576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611edb57509392505050565b5f6001600160e01b031982166380ac58cd60e01b1480611f3c57506001600160e01b03198216635b5e139f60e01b145b806108c257506301ffc9a760e01b6001600160e01b03198316146108c2565b6127106001600160601b0382161115611f865760405162461bcd60e51b8152600401610a06906131dd565b6001600160a01b038216611fdc5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610a06565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600a55565b5f6108c26120216123a3565b8360405161190160f01b602082015260228101839052604281018290525f9060620160405160208183030381529060405280519060200120905092915050565b5f5f5f61206e85856124c9565b9150915061207b81612508565b509392505050565b61208d8383612651565b6120995f8484846121d2565b610aa75760405162461bcd60e51b8152600401610a069061318b565b5f5b818110156120db576120d385856120ce8487612f14565b6127ef565b6001016120b7565b5050505050565b5f5b818110156120db5761210085856120fb8487612f14565b612845565b6001016120e4565b6127106001600160601b03821611156121335760405162461bcd60e51b8152600401610a06906131dd565b6001600160a01b0382166121895760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610a06565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182525f968752600b90529190942093519051909116600160a01b029116179055565b5f6001600160a01b0384163b156122c457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612215903390899088908890600401613227565b6020604051808303815f875af192505050801561224f575060408051601f3d908101601f1916820190925261224c91810190613263565b60015b6122aa573d80801561227c576040519150601f19603f3d011682016040523d82523d5f602084013e612281565b606091505b5080515f036122a25760405162461bcd60e51b8152600401610a069061318b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a0c565b506001611a0c565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061230a5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612336576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061235457662386f26fc10000830492506010015b6305f5e100831061236c576305f5e100830492506008015b612710831061238057612710830492506004015b60648310612392576064830492506002015b600a83106108c25760010192915050565b5f306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156123fb57507f000000000000000000000000000000000000000000000000000000000000000046145b1561242557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b5f5f82516041036124fd576020830151604084015160608501515f1a6124f18782858561288c565b94509450505050610dc0565b505f90506002610dc0565b5f81600481111561251b5761251b61327e565b036125235750565b60018160048111156125375761253761327e565b036125845760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610a06565b60028160048111156125985761259861327e565b036125e55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a06565b60038160048111156125f9576125f961327e565b03610e715760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a06565b6001600160a01b0382166126a75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a06565b5f818152600260205260409020546001600160a01b03161561270b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a06565b6127185f838360016120b5565b5f818152600260205260409020546001600160a01b03161561277c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a06565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46108da5f838360016120e2565b6001600160a01b0383811615908316158180156128095750805b1561282757604051635cbd944160e01b815260040160405180910390fd5b8115612833575b6120db565b8061282e576120db3386868634612949565b6001600160a01b03838116159083161581801561285f5750805b1561287d57604051635cbd944160e01b815260040160405180910390fd5b8161282e578061282e576120db565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128c157505f90506003612940565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612912573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b03811661293a575f60019250925050612940565b91505f90505b94509492505050565b5f612952610aac565b90506001600160a01b038116156129e6576001600160a01b038116330361297957506120db565b60405163657711f560e11b81526001600160a01b038781166004830152868116602483015285811660448301526064820185905282169063caee23ea906084015f6040518083038186803b1580156129cf575f5ffd5b505afa1580156129e1573d5f5f3e3d5ffd5b505050505b505050505050565b6001600160e01b031981168114610e71575f5ffd5b5f60208284031215612a13575f5ffd5b8135612a1e816129ee565b9392505050565b80356001600160a01b0381168114612a3b575f5ffd5b919050565b80356001600160601b0381168114612a3b575f5ffd5b5f5f60408385031215612a67575f5ffd5b612a7083612a25565b9150612a7e60208401612a40565b90509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612a1e6020830184612a87565b5f60208284031215612ad7575f5ffd5b5035919050565b5f5f60408385031215612aef575f5ffd5b612af883612a25565b946020939093013593505050565b5f60208284031215612b16575f5ffd5b612a1e82612a25565b5f5f83601f840112612b2f575f5ffd5b50813567ffffffffffffffff811115612b46575f5ffd5b602083019150836020828501011115610dc0575f5ffd5b5f5f5f60408486031215612b6f575f5ffd5b83359250602084013567ffffffffffffffff811115612b8c575f5ffd5b612b9886828701612b1f565b9497909650939450505050565b5f5f5f60608486031215612bb7575f5ffd5b612bc084612a25565b9250612bce60208501612a25565b929592945050506040919091013590565b5f5f60408385031215612bf0575f5ffd5b50508035926020909101359150565b5f5f60208385031215612c10575f5ffd5b823567ffffffffffffffff811115612c26575f5ffd5b612c3285828601612b1f565b90969095509350505050565b5f5f5f60608486031215612c50575f5ffd5b83359250612c6060208501612a25565b9150612c6e60408501612a40565b90509250925092565b80358015158114612a3b575f5ffd5b5f60208284031215612c96575f5ffd5b612a1e82612c77565b5f5f60408385031215612cb0575f5ffd5b612cb983612a25565b9150612a7e60208401612c77565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f60808587031215612cee575f5ffd5b612cf785612a25565b9350612d0560208601612a25565b925060408501359150606085013567ffffffffffffffff811115612d27575f5ffd5b8501601f81018713612d37575f5ffd5b803567ffffffffffffffff811115612d5157612d51612cc7565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715612d8057612d80612cc7565b604052818152828201602001891015612d97575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b5f5f60408385031215612dc9575f5ffd5b612dd283612a25565b9150612a7e60208401612a25565b5f5f60208385031215612df1575f5ffd5b823567ffffffffffffffff811115612e07575f5ffd5b8301601f81018513612e17575f5ffd5b803567ffffffffffffffff811115612e2d575f5ffd5b8560208260051b8401011115612e41575f5ffd5b6020919091019590945092505050565b600181811c90821680612e6557607f821691505b602082108103612e8357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600c908201526b6e6f20636f6e74726163747360a01b604082015260600190565b6020808252600f908201526e1a5b9d985b1a59081d1bdad95b9259608a1b604082015260600190565b6020808252600e908201526d185b1c9958591e481b5a5b9d195960921b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156108c2576108c2612f00565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b80820281158282048414176108c2576108c2612f00565b5f82612fa557634e487b7160e01b5f52601260045260245ffd5b500490565b601f821115610aa75782821115610aa757805f5260205f20601f840160051c6020851015612fd557505f5b90810190601f840160051c035f5b818110156129e6575f83820155600101612fe3565b67ffffffffffffffff83111561301057613010612cc7565b6130248361301e8354612e51565b83612faa565b5f601f841160018114613055575f851561303e5750838201355b5f19600387901b1c1916600186901b1783556120db565b5f83815260208120601f198716915b828110156130845786850135825560209485019460019092019101613064565b50868210156130a0575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f5f84546130bf81612e51565b6001821680156130d657600181146130eb57613118565b60ff1983168652811515820286019350613118565b875f5260205f205f5b83811015613110578154888201526001909101906020016130f4565b505081860193505b50505083518060208601835e5f9101908152949350505050565b634e487b7160e01b5f52603260045260245ffd5b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061325990830184612a87565b9695505050505050565b5f60208284031215613273575f5ffd5b8151612a1e816129ee565b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220dc1566e2eee02604a7a136123e0ee47ae883fc9a8297da172dfd6374c8cef60f64736f6c63430008210033000000000000000000000000f86422a9504ffd679c2d0147345d4531d48dc15f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000ab2390473e4e32bf34e4300dc329f848bd1232fe00000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569646b366b6e746e706e6b7769357a37326e79643465336b616979367037626a6f6b366b766d78777672627561773361647a63646d2f0000000000000000000000000000000000000000000000000000000000
0x6080604052600436106102bf575f3560e01c8063715018a61161016f578063a9fc664e116100d8578063da2e35c511610092578063eeabd21d1161006d578063eeabd21d1461082e578063f2fde38b14610841578063f5d1c7f314610860578063f67008361461087e575f5ffd5b8063da2e35c5146107e6578063e5408eae146107fb578063e985e9c51461080f575f5ffd5b8063a9fc664e14610737578063add5a4fa14610756578063b88d4fde14610775578063c87b56dd14610794578063cd90e5af146107b3578063d05f329a146107c7575f5ffd5b806395d89b411161012957806395d89b411461069c57806396bd911f146106b05780639c13554a146106cf5780639e05d240146106e4578063a22cb46514610703578063a2309ff814610722575f5ffd5b8063715018a61461060e57806376b8f16f146106225780637e60bdae146106415780638c5c5e16146106565780638da5cb5b1461066a57806393aee0e714610687575f5ffd5b80632a55205a1161022b57806355f804b3116101e55780636352211e116101c05780636352211e1461059d5780636c0360eb146105bc5780636c19e783146105d057806370a08231146105ef575f5ffd5b806355f804b31461053f5780635944c7531461055e5780636221d13c1461057d575f5ffd5b80632a55205a1461048d57806332cb6b0c146104cb5780633bad52b2146104e05780633ccfd60b146104f9578063400cb74c1461050d57806342842e0e14610520575f5ffd5b8063098144d41161027c578063098144d4146103b65780630d705df6146103ca57806312a69449146103f1578063173eb75a1461042a578063238ac9331461044957806323b872dd1461046e575f5ffd5b806301463546146102c357806301ffc9a71461030757806304634d8d1461033657806306fdde0314610357578063081812fc14610378578063095ea7b314610397575b5f5ffd5b3480156102ce575f5ffd5b506102ea73721c008fdff27bf06e7e123956e2fe03b63342e381565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610312575f5ffd5b50610326610321366004612a03565b6108a9565b60405190151581526020016102fe565b348015610341575f5ffd5b50610355610350366004612a56565b6108c8565b005b348015610362575f5ffd5b5061036b6108de565b6040516102fe9190612ab5565b348015610383575f5ffd5b506102ea610392366004612ac7565b61096e565b3480156103a2575f5ffd5b506103556103b1366004612ade565b610993565b3480156103c1575f5ffd5b506102ea610aac565b3480156103d5575f5ffd5b506040805163657711f560e11b815260016020820152016102fe565b3480156103fc575f5ffd5b5061041c61040b366004612b06565b60106020525f908152604090205481565b6040519081526020016102fe565b348015610435575f5ffd5b50610355610444366004612b5d565b610ae8565b348015610454575f5ffd5b50600d546102ea906201000090046001600160a01b031681565b348015610479575f5ffd5b50610355610488366004612ba5565b610cea565b348015610498575f5ffd5b506104ac6104a7366004612bdf565b610d1b565b604080516001600160a01b0390931683526020830191909152016102fe565b3480156104d6575f5ffd5b5061041c61138881565b3480156104eb575f5ffd5b50600d546103269060ff1681565b348015610504575f5ffd5b50610355610dc7565b61035561051b366004612ac7565b610e74565b34801561052b575f5ffd5b5061035561053a366004612ba5565b61100e565b34801561054a575f5ffd5b50610355610559366004612bff565b611028565b348015610569575f5ffd5b50610355610578366004612c3e565b61103d565b348015610588575f5ffd5b5060095461032690600160a01b900460ff1681565b3480156105a8575f5ffd5b506102ea6105b7366004612ac7565b611050565b3480156105c7575f5ffd5b5061036b6110af565b3480156105db575f5ffd5b506103556105ea366004612b06565b61113b565b3480156105fa575f5ffd5b5061041c610609366004612b06565b61116d565b348015610619575f5ffd5b506103556111f1565b34801561062d575f5ffd5b5061035561063c366004612ac7565b611204565b34801561064c575f5ffd5b5061041c60125481565b348015610661575f5ffd5b5061041c600a81565b348015610675575f5ffd5b506008546001600160a01b03166102ea565b348015610692575f5ffd5b5061041c61038481565b3480156106a7575f5ffd5b5061036b611211565b3480156106bb575f5ffd5b506103556106ca366004612c86565b611220565b3480156106da575f5ffd5b5061041c60115481565b3480156106ef575f5ffd5b506103556106fe366004612c86565b611242565b34801561070e575f5ffd5b5061035561071d366004612c9f565b6112a2565b34801561072d575f5ffd5b5061041c60135481565b348015610742575f5ffd5b50610355610751366004612b06565b6112ad565b348015610761575f5ffd5b50610355610770366004612ade565b611372565b348015610780575f5ffd5b5061035561078f366004612cdb565b61141d565b34801561079f575f5ffd5b5061036b6107ae366004612ac7565b61144f565b3480156107be575f5ffd5b5061041c600181565b3480156107d2575f5ffd5b506103556107e1366004612c86565b6114d5565b3480156107f1575f5ffd5b5061041c600c5481565b348015610806575f5ffd5b5061041c606481565b34801561081a575f5ffd5b50610326610829366004612db8565b6114f0565b61035561083c366004612de0565b611553565b34801561084c575f5ffd5b5061035561085b366004612b06565b611733565b34801561086b575f5ffd5b50600d5461032690610100900460ff1681565b348015610889575f5ffd5b5061041c610898366004612b06565b600f6020525f908152604090205481565b5f6108b3826117a9565b806108c257506108c2826117e8565b92915050565b6108d061180c565b6108da8282611814565b5050565b6060600680546108ed90612e51565b80601f016020809104026020016040519081016040528092919081815260200182805461091990612e51565b80156109645780601f1061093b57610100808354040283529160200191610964565b820191905f5260205f20905b81548152906001019060200180831161094757829003601f168201915b5050505050905090565b5f61097882611869565b505f908152600460205260409020546001600160a01b031690565b5f61099d82611050565b9050806001600160a01b0316836001600160a01b031603610a0f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610a2b5750610a2b81336114f0565b610a9d5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610a06565b610aa783836118c7565b505050565b6009546001600160a01b031680610ae557600854600160a01b900460ff16610ae5575073721c008fdff27bf06e7e123956e2fe03b63342e35b90565b323314610b075760405162461bcd60e51b8152600401610a0690612e89565b82606481118015610b1a57506113888111155b610b365760405162461bcd60e51b8152600401610a0690612eaf565b5f818152600260205260409020546001600160a01b031615610b6a5760405162461bcd60e51b8152600401610a0690612ed8565b600d5460ff16610baa5760405162461bcd60e51b815260206004820152600b60248201526a18985a5b0818db1bdcd95960aa1b6044820152606401610a06565b335f908152600f6020526040902054600111610bfa5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b6044820152606401610a06565b61038460115410610c3d5760405162461bcd60e51b815260206004820152600d60248201526c18985a5b081cdbdb19081bdd5d609a1b6044820152606401610a06565b610c4933858585611934565b610c835760405162461bcd60e51b815260206004820152600b60248201526a3130b2103b37bab1b432b960a91b6044820152606401610a06565b335f908152600f60205260408120805460019290610ca2908490612f14565b92505081905550600160115f828254610cbb9190612f14565b92505081905550600160135f828254610cd49190612f14565b90915550610ce490503385611a14565b50505050565b610cf43382611a2d565b610d105760405162461bcd60e51b8152600401610a0690612f27565b610aa7838383611a8a565b5f828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610d8f575060408051808201909152600a546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101515f9061271090610dad906001600160601b031687612f74565b610db79190612f8b565b91519350909150505b9250929050565b610dcf61180c565b5f610de26008546001600160a01b031690565b6001600160a01b0316476040515f6040518083038185875af1925050503d805f8114610e29576040519150601f19603f3d011682016040523d82523d5f602084013e610e2e565b606091505b5050905080610e715760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610a06565b50565b323314610e935760405162461bcd60e51b8152600401610a0690612e89565b80606481118015610ea657506113888111155b610ec25760405162461bcd60e51b8152600401610a0690612eaf565b5f818152600260205260409020546001600160a01b031615610ef65760405162461bcd60e51b8152600401610a0690612ed8565b600d54610100900460ff16610f3d5760405162461bcd60e51b815260206004820152600d60248201526c189bdd5b9d1e4818db1bdcd959609a1b6044820152606401610a06565b335f90815260106020526040902054600a11610f885760405162461bcd60e51b815260206004820152600a602482015269077616c6c6574206361760b41b6044820152606401610a06565b600c54341015610fc65760405162461bcd60e51b81526020600482015260096024820152681d5b99195c9c185a5960ba1b6044820152606401610a06565b335f908152601060205260408120805460019290610fe5908490612f14565b92505081905550600160135f828254610ffe9190612f14565b909155506108da90503383611a14565b610aa783838360405180602001604052805f81525061141d565b61103061180c565b600e610aa7828483612ff8565b61104561180c565b610aa7838383611c01565b5f818152600260205260408120546001600160a01b0316806108c25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a06565b600e80546110bc90612e51565b80601f01602080910402602001604051908101604052809291908181526020018280546110e890612e51565b80156111335780601f1061110a57610100808354040283529160200191611133565b820191905f5260205f20905b81548152906001019060200180831161111657829003601f168201915b505050505081565b61114361180c565b600d80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b5f6001600160a01b0382166111d65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610a06565b506001600160a01b03165f9081526003602052604090205490565b6111f9611c5b565b6112025f611cb5565b565b61120c61180c565b600c55565b6060600780546108ed90612e51565b61122861180c565b600d80549115156101000261ff0019909216919091179055565b61124a61180c565b60098054821515600160a01b0260ff60a01b199091161790556040517f6787c7f9a80aa0f5ceddab2c54f1f5169c0b88e75dd5e19d5e858a64144c7dbc9061129790831515815260200190565b60405180910390a150565b6108da338383611d06565b6112b561180c565b6001600160a01b038116803b151590158015906112d0575080155b156112ee576040516332483afb60e01b815260040160405180910390fd5b7fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac611317610aac565b604080516001600160a01b03928316815291851660208301520160405180910390a16008805460ff60a01b1916600160a01b179055600980546001600160a01b0384166001600160a01b03199091161790556108da82611dcb565b61137a61180c565b6001811015801561138c575060648111155b6113c75760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd081c995cd95c9d995960a21b6044820152606401610a06565b5f818152600260205260409020546001600160a01b0316156113fb5760405162461bcd60e51b8152600401610a0690612ed8565b600160125f82825461140d9190612f14565b909155506108da90508282611a14565b6114273383611a2d565b6114435760405162461bcd60e51b8152600401610a0690612f27565b610ce484848484611e49565b5f818152600260205260409020546060906001600160a01b03166114a35760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b6044820152606401610a06565b600e6114ae83611e7c565b6040516020016114bf9291906130b2565b6040516020818303038152906040529050919050565b6114dd61180c565b600d805460ff1916911515919091179055565b6001600160a01b038281165f9081526005602090815260408083209385168352929052205460ff16806108c257600954600160a01b900460ff16156108c257611537610aac565b6001600160a01b0316826001600160a01b031614905092915050565b3233146115725760405162461bcd60e51b8152600401610a0690612e89565b600d54610100900460ff166115b95760405162461bcd60e51b815260206004820152600d60248201526c189bdd5b9d1e4818db1bdcd959609a1b6044820152606401610a06565b335f908152601060205260409020548190600a906115d8908390612f14565b11156116135760405162461bcd60e51b815260206004820152600a602482015269077616c6c6574206361760b41b6044820152606401610a06565b80600c546116219190612f74565b34101561165c5760405162461bcd60e51b81526020600482015260096024820152681d5b99195c9c185a5960ba1b6044820152606401610a06565b335f908152601060205260408120805483929061167a908490612f14565b925050819055508060135f8282546116929190612f14565b909155505f90505b81811015610ce4575f8484838181106116b5576116b5613132565b9050602002013590506064811180156116d057506113888111155b6116ec5760405162461bcd60e51b8152600401610a0690612eaf565b5f818152600260205260409020546001600160a01b0316156117205760405162461bcd60e51b8152600401610a0690612ed8565b61172a3382611a14565b5060010161169a565b61173b611c5b565b6001600160a01b0381166117a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a06565b610e7181611cb5565b5f6001600160e01b03198216632b435fdb60e21b14806117d957506001600160e01b0319821663503e914d60e11b145b806108c257506108c282611f0c565b5f6001600160e01b0319821663152a902d60e11b14806108c257506108c2826117a9565b611202611c5b565b61181e8282611f5b565b6040516001600160601b03821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b5f818152600260205260409020546001600160a01b0316610e715760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a06565b5f81815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906118fb82611050565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b604080517f31a11008d08d24c7008c6e417121dc59d50c8860acb38c20878f87eaa483cf0860208201526001600160a01b03861691810191909152606081018490525f90819061199c9060800160405160208183030381529060405280519060200120612015565b9050600d60029054906101000a90046001600160a01b03166001600160a01b03166119fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525086939250506120619050565b6001600160a01b0316149150505b949350505050565b6108da828260405180602001604052805f815250612083565b5f5f611a3883611050565b9050806001600160a01b0316846001600160a01b03161480611a5f5750611a5f81856114f0565b80611a0c5750836001600160a01b0316611a788461096e565b6001600160a01b031614949350505050565b826001600160a01b0316611a9d82611050565b6001600160a01b031614611ac35760405162461bcd60e51b8152600401610a0690613146565b6001600160a01b038216611b255760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a06565b611b3283838360016120b5565b826001600160a01b0316611b4582611050565b6001600160a01b031614611b6b5760405162461bcd60e51b8152600401610a0690613146565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610aa783838360016120e2565b611c0c838383612108565b6040516001600160601b03821681526001600160a01b0383169084907f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c906020015b60405180910390a3505050565b6008546001600160a01b031633146112025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a06565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b816001600160a01b0316836001600160a01b031603611d675760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a06565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611c4e565b6001600160a01b03811615610e7157803b80156108da576040805163fb2de5d760e01b81523060048201526102d1602482015290516001600160a01b0384169163fb2de5d7916044808301925f92919082900301818387803b158015611e2f575f5ffd5b505af1925050508015611e40575060015b156108da575050565b611e54848484611a8a565b611e60848484846121d2565b610ce45760405162461bcd60e51b8152600401610a069061318b565b60605f611e88836122cc565b60010190505f8167ffffffffffffffff811115611ea757611ea7612cc7565b6040519080825280601f01601f191660200182016040528015611ed1576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611edb57509392505050565b5f6001600160e01b031982166380ac58cd60e01b1480611f3c57506001600160e01b03198216635b5e139f60e01b145b806108c257506301ffc9a760e01b6001600160e01b03198316146108c2565b6127106001600160601b0382161115611f865760405162461bcd60e51b8152600401610a06906131dd565b6001600160a01b038216611fdc5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610a06565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600a55565b5f6108c26120216123a3565b8360405161190160f01b602082015260228101839052604281018290525f9060620160405160208183030381529060405280519060200120905092915050565b5f5f5f61206e85856124c9565b9150915061207b81612508565b509392505050565b61208d8383612651565b6120995f8484846121d2565b610aa75760405162461bcd60e51b8152600401610a069061318b565b5f5b818110156120db576120d385856120ce8487612f14565b6127ef565b6001016120b7565b5050505050565b5f5b818110156120db5761210085856120fb8487612f14565b612845565b6001016120e4565b6127106001600160601b03821611156121335760405162461bcd60e51b8152600401610a06906131dd565b6001600160a01b0382166121895760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610a06565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182525f968752600b90529190942093519051909116600160a01b029116179055565b5f6001600160a01b0384163b156122c457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612215903390899088908890600401613227565b6020604051808303815f875af192505050801561224f575060408051601f3d908101601f1916820190925261224c91810190613263565b60015b6122aa573d80801561227c576040519150601f19603f3d011682016040523d82523d5f602084013e612281565b606091505b5080515f036122a25760405162461bcd60e51b8152600401610a069061318b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a0c565b506001611a0c565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061230a5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612336576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061235457662386f26fc10000830492506010015b6305f5e100831061236c576305f5e100830492506008015b612710831061238057612710830492506004015b60648310612392576064830492506002015b600a83106108c25760010192915050565b5f306001600160a01b037f000000000000000000000000932e2e4d4f9637f484357b6364a94de56a63f521161480156123fb57507f000000000000000000000000000000000000000000000000000000000000123746145b1561242557507f2fe4cee9de59edfa14dcc79bc9b72bc52ec47d83958409d4d6f2f0b7d69d3f0d90565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527fc5598743438b4909c6202c95d6b17081b415503de756636514e688594f420b61828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b5f5f82516041036124fd576020830151604084015160608501515f1a6124f18782858561288c565b94509450505050610dc0565b505f90506002610dc0565b5f81600481111561251b5761251b61327e565b036125235750565b60018160048111156125375761253761327e565b036125845760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610a06565b60028160048111156125985761259861327e565b036125e55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a06565b60038160048111156125f9576125f961327e565b03610e715760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a06565b6001600160a01b0382166126a75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a06565b5f818152600260205260409020546001600160a01b03161561270b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a06565b6127185f838360016120b5565b5f818152600260205260409020546001600160a01b03161561277c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a06565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46108da5f838360016120e2565b6001600160a01b0383811615908316158180156128095750805b1561282757604051635cbd944160e01b815260040160405180910390fd5b8115612833575b6120db565b8061282e576120db3386868634612949565b6001600160a01b03838116159083161581801561285f5750805b1561287d57604051635cbd944160e01b815260040160405180910390fd5b8161282e578061282e576120db565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128c157505f90506003612940565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612912573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b03811661293a575f60019250925050612940565b91505f90505b94509492505050565b5f612952610aac565b90506001600160a01b038116156129e6576001600160a01b038116330361297957506120db565b60405163657711f560e11b81526001600160a01b038781166004830152868116602483015285811660448301526064820185905282169063caee23ea906084015f6040518083038186803b1580156129cf575f5ffd5b505afa1580156129e1573d5f5f3e3d5ffd5b505050505b505050505050565b6001600160e01b031981168114610e71575f5ffd5b5f60208284031215612a13575f5ffd5b8135612a1e816129ee565b9392505050565b80356001600160a01b0381168114612a3b575f5ffd5b919050565b80356001600160601b0381168114612a3b575f5ffd5b5f5f60408385031215612a67575f5ffd5b612a7083612a25565b9150612a7e60208401612a40565b90509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612a1e6020830184612a87565b5f60208284031215612ad7575f5ffd5b5035919050565b5f5f60408385031215612aef575f5ffd5b612af883612a25565b946020939093013593505050565b5f60208284031215612b16575f5ffd5b612a1e82612a25565b5f5f83601f840112612b2f575f5ffd5b50813567ffffffffffffffff811115612b46575f5ffd5b602083019150836020828501011115610dc0575f5ffd5b5f5f5f60408486031215612b6f575f5ffd5b83359250602084013567ffffffffffffffff811115612b8c575f5ffd5b612b9886828701612b1f565b9497909650939450505050565b5f5f5f60608486031215612bb7575f5ffd5b612bc084612a25565b9250612bce60208501612a25565b929592945050506040919091013590565b5f5f60408385031215612bf0575f5ffd5b50508035926020909101359150565b5f5f60208385031215612c10575f5ffd5b823567ffffffffffffffff811115612c26575f5ffd5b612c3285828601612b1f565b90969095509350505050565b5f5f5f60608486031215612c50575f5ffd5b83359250612c6060208501612a25565b9150612c6e60408501612a40565b90509250925092565b80358015158114612a3b575f5ffd5b5f60208284031215612c96575f5ffd5b612a1e82612c77565b5f5f60408385031215612cb0575f5ffd5b612cb983612a25565b9150612a7e60208401612c77565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f60808587031215612cee575f5ffd5b612cf785612a25565b9350612d0560208601612a25565b925060408501359150606085013567ffffffffffffffff811115612d27575f5ffd5b8501601f81018713612d37575f5ffd5b803567ffffffffffffffff811115612d5157612d51612cc7565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715612d8057612d80612cc7565b604052818152828201602001891015612d97575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b5f5f60408385031215612dc9575f5ffd5b612dd283612a25565b9150612a7e60208401612a25565b5f5f60208385031215612df1575f5ffd5b823567ffffffffffffffff811115612e07575f5ffd5b8301601f81018513612e17575f5ffd5b803567ffffffffffffffff811115612e2d575f5ffd5b8560208260051b8401011115612e41575f5ffd5b6020919091019590945092505050565b600181811c90821680612e6557607f821691505b602082108103612e8357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600c908201526b6e6f20636f6e74726163747360a01b604082015260600190565b6020808252600f908201526e1a5b9d985b1a59081d1bdad95b9259608a1b604082015260600190565b6020808252600e908201526d185b1c9958591e481b5a5b9d195960921b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156108c2576108c2612f00565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b80820281158282048414176108c2576108c2612f00565b5f82612fa557634e487b7160e01b5f52601260045260245ffd5b500490565b601f821115610aa75782821115610aa757805f5260205f20601f840160051c6020851015612fd557505f5b90810190601f840160051c035f5b818110156129e6575f83820155600101612fe3565b67ffffffffffffffff83111561301057613010612cc7565b6130248361301e8354612e51565b83612faa565b5f601f841160018114613055575f851561303e5750838201355b5f19600387901b1c1916600186901b1783556120db565b5f83815260208120601f198716915b828110156130845786850135825560209485019460019092019101613064565b50868210156130a0575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f5f84546130bf81612e51565b6001821680156130d657600181146130eb57613118565b60ff1983168652811515820286019350613118565b875f5260205f205f5b83811015613110578154888201526001909101906020016130f4565b505081860193505b50505083518060208601835e5f9101908152949350505050565b634e487b7160e01b5f52603260045260245ffd5b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061325990830184612a87565b9695505050505050565b5f60208284031215613273575f5ffd5b8151612a1e816129ee565b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220dc1566e2eee02604a7a136123e0ee47ae883fc9a8297da172dfd6374c8cef60f64736f6c63430008210033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x5d4e85…41be74 | 33 days agoSat, 11 Jul 2026 04:39:49 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…bd1232fe [2] 0x000000000000…00000001 |
| 0x7ccb16…1ab8e7 | 33 days agoSat, 11 Jul 2026 04:05:32 UTC | 0x8a8bae…76ef | [0] 0x000000000000…bd1232fe data: 0x000000000000000000…000001f4 |
| 0x7ccb16…1ab8e7 | 33 days agoSat, 11 Jul 2026 04:05:32 UTC | 0xcc5dc0…2aac | data: 0x000000000000000000…b63342e3 |
| 0x7ccb16…1ab8e7 | 33 days agoSat, 11 Jul 2026 04:05:32 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…bd1232fe |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x5d4e85…41be74 | teamMint | 6,661,948 | 33 days agoSat, 11 Jul 2026 04:39:49 UTC | 0xab23…32fe | IN | Brim Syndicate | $0.000 ETH | 0.00000493 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||