Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.0275 ETH
Eth Value
$89.78 (@ $3,264.84/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,385 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x7b227022 | 21018102 | 100 days ago | IN | 0.001 ETH | 0.0005288 | ||||
0x7b227022 | 21018102 | 100 days ago | IN | 0.001 ETH | 0.0005288 | ||||
0x7b227022 | 21018101 | 100 days ago | IN | 0.001 ETH | 0.00052367 | ||||
0x7b227022 | 21018100 | 100 days ago | IN | 0.001 ETH | 0.00052795 | ||||
0x7b227022 | 21018082 | 100 days ago | IN | 0.001 ETH | 0.00055113 | ||||
0x7b227022 | 21018081 | 100 days ago | IN | 0.001 ETH | 0.00054032 | ||||
0x7b227022 | 21018080 | 100 days ago | IN | 0.001 ETH | 0.00054063 | ||||
0x7b227022 | 21018079 | 100 days ago | IN | 0.001 ETH | 0.00055364 | ||||
0x7b227022 | 21018075 | 100 days ago | IN | 0.001 ETH | 0.00057113 | ||||
0x7b227022 | 21018073 | 100 days ago | IN | 0.001 ETH | 0.00086251 | ||||
0x7b227022 | 21013762 | 101 days ago | IN | 0 ETH | 0.00122199 | ||||
0x7b227022 | 21013729 | 101 days ago | IN | 0.001 ETH | 0.00093748 | ||||
0x7b227022 | 21013644 | 101 days ago | IN | 0.001 ETH | 0.00077533 | ||||
0x7b227022 | 21013388 | 101 days ago | IN | 0.001 ETH | 0.00064231 | ||||
0x7b227022 | 21013376 | 101 days ago | IN | 0.001 ETH | 0.00085913 | ||||
0x7b227022 | 21012941 | 101 days ago | IN | 0.001 ETH | 0.00068571 | ||||
0x7b227022 | 21012938 | 101 days ago | IN | 0.001 ETH | 0.00070133 | ||||
0x7b227022 | 21012926 | 101 days ago | IN | 0.001 ETH | 0.00068775 | ||||
0x7b227022 | 21012377 | 101 days ago | IN | 0.001 ETH | 0.0011951 | ||||
0x7b227022 | 21012303 | 101 days ago | IN | 0.001 ETH | 0.00071766 | ||||
0x7b227022 | 21012301 | 101 days ago | IN | 0.001 ETH | 0.00064603 | ||||
0x7b227022 | 21012299 | 101 days ago | IN | 0.001 ETH | 0.0006855 | ||||
0x7b227022 | 21012297 | 101 days ago | IN | 0.001 ETH | 0.0007164 | ||||
0x7b227022 | 21012293 | 101 days ago | IN | 0.001 ETH | 0.0007391 | ||||
0x7b227022 | 21012284 | 101 days ago | IN | 0.001 ETH | 0.00069564 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21018102 | 100 days ago | 0.0009 ETH | ||||
21018102 | 100 days ago | 0.0001 ETH | ||||
21018102 | 100 days ago | 0.0009 ETH | ||||
21018102 | 100 days ago | 0.0001 ETH | ||||
21018101 | 100 days ago | 0.0009 ETH | ||||
21018101 | 100 days ago | 0.0001 ETH | ||||
21018100 | 100 days ago | 0.0009 ETH | ||||
21018100 | 100 days ago | 0.0001 ETH | ||||
21018082 | 100 days ago | 0.0009 ETH | ||||
21018082 | 100 days ago | 0.0001 ETH | ||||
21018081 | 100 days ago | 0.0009 ETH | ||||
21018081 | 100 days ago | 0.0001 ETH | ||||
21018080 | 100 days ago | 0.0009 ETH | ||||
21018080 | 100 days ago | 0.0001 ETH | ||||
21018079 | 100 days ago | 0.0009 ETH | ||||
21018079 | 100 days ago | 0.0001 ETH | ||||
21018075 | 100 days ago | 0.0009 ETH | ||||
21018075 | 100 days ago | 0.0001 ETH | ||||
21018073 | 100 days ago | 0.0009 ETH | ||||
21018073 | 100 days ago | 0.0001 ETH | ||||
21013729 | 101 days ago | 0.0009 ETH | ||||
21013729 | 101 days ago | 0.0001 ETH | ||||
21013644 | 101 days ago | 0.0009 ETH | ||||
21013644 | 101 days ago | 0.0001 ETH | ||||
21013376 | 101 days ago | 0.0009 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Inscription
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "./Counters.sol"; import "./JsmnSolLib.sol"; import "./inputData.sol"; contract Inscription is inputData { // Declare a public variable to store the owner's address address public owner; /** * @dev Constructor that sets the contract deployer as the owner. * * The constructor is called only once when the contract is deployed. * It assigns the address of the account that deploys the contract to the `owner` variable. */ constructor() { owner = msg.sender; // Set the owner to the address that deployed the contract } /** * @dev Modifier that restricts function access to the contract owner. * * This modifier checks if the caller of a function is the owner of the contract. * If the caller is not the owner, it reverts the transaction with an error message. */ modifier onlyOwner() { require(msg.sender == owner, "Caller is not the contract owner"); // Ensure the caller is the owner _; // Placeholder for the function body to be executed } // Importing and using the Counters library for managing counters using Counters for Counters.Counter; // Define a constant for the number of decimal places for the token uint256 constant DECIMALS = 18; // The standard decimal precision for ERC20 tokens is usually 18 bytes32 constant ERC20_P_HASH = keccak256(abi.encodePacked("p")); bytes32 constant ERC20_OP_HASH = keccak256(abi.encodePacked("op")); bytes32 constant ERC20_TICK_HASH = keccak256(abi.encodePacked("tick")); bytes32 constant ERC20_MAX_HASH = keccak256(abi.encodePacked("max")); bytes32 constant ERC20_LIM_HASH = keccak256(abi.encodePacked("lim")); bytes32 constant ERC20_AMT_HASH = keccak256(abi.encodePacked("amt")); bytes32 constant ERC20_P_HASH_ERC20 = keccak256(abi.encodePacked("erc-20")); bytes32 constant ERC20_OP_HASH_DEPLOY =keccak256(abi.encodePacked("deploy")); bytes32 constant ERC20_OP_HASH_MINT = keccak256(abi.encodePacked("mint")); bytes32 constant ERC20_OP_HASH_TRANSFER = keccak256(abi.encodePacked("transfer")); bytes32 constant ERC20_OP_HASH_TRANSFER_TO = keccak256(abi.encodePacked("to")); bytes32 constant ERC20_OP_HASH_TRANSFER_FROM = keccak256(abi.encodePacked("from")); bytes32 constant ERC20_MAX_MINT = keccak256(abi.encodePacked("maxMint")); bytes32 constant ERC20_MINT_PRICE = keccak256(abi.encodePacked("mintPrice")); bytes32 constant ERC20_RESERVE = keccak256(abi.encodePacked("reserve")); bytes32 constant ERC20_OP_HASH_APPROVE = keccak256(abi.encodePacked("approve")); bytes32 constant ERC20_OP_HASH_TRANSFERFROM = keccak256(abi.encodePacked("transferFrom")); // The ERC20Token struct represents basic information about an ERC20 token struct ERC20Token { string name; // The name of the token uint256 maxSupply; // The maximum supply of the token, indicating the upper limit of tokens that can be minted uint256 mintLimit; // The limit per mint operation, i.e., the maximum number of tokens that can be minted in one transaction uint256 minted; // The total number of tokens that have already been minted address deployer; // The address of the deployer, representing the creator or owner of the contract uint256 deployTime; // The timestamp when the contract was deployed, indicating the deployment time of the token uint256 holders; // The number of addresses holding this token, representing the current number of token holders uint256 maxMintPerAddress;// The maximum number of tokens that can be minted by a single address uint256 mintPrice; // The price per token mint in wei, representing the cost to mint one token uint256 reserve; // The reserve of tokens, representing the amount of tokens held in reserve or still available for minting } // The MintERC20 struct is used to track whether an ERC20 token has been deployed struct MintERC20 { string ticker; // The symbol or ticker of the token bool deployed; // Whether the token has been deployed; true indicates the token is successfully deployed, false means not yet deployed } // A nested mapping to store token balances for each token ticker and address // The first string represents the token ticker, // and the address represents the user's wallet address. mapping(string => mapping(address => uint256)) public balances; // A nested mapping to track the number of tokens minted by each address for each token ticker // The string represents the token ticker, and the address is the user's wallet address. mapping(string => mapping(address => uint256)) public mintCounts; // A mapping to link token tickers (converted to bytes32) to the MintERC20 struct // It tracks deployed tokens and their ticker symbols. mapping(bytes32 => MintERC20) private mintHexMap; // A nested mapping to store allowances for token transfers between addresses // The string represents the token ticker, the first address is the token owner, // and the second address is the spender. The uint256 represents the allowance amount. mapping(string => mapping(address => mapping(address => uint256))) public allowances; // A mapping to store details of each token (inscription) by its ticker name // The string is the token ticker, and the ERC20Token struct holds the token's information. mapping(string => ERC20Token) public inscriptions; // An array to store all token ticker names that have been created string[] public tokenNames; // A counter to track the total number of unique token tickers created Counters.Counter public totalTickers; function deployToken( string memory ticker, // Token ticker (e.g., "ETH", "USDT") uint256 maxSupply, // Maximum total supply of the token uint256 mintLimit, // Limit on how many tokens can be minted uint256 maxMintPerAddress, // Maximum tokens an address can mint uint256 mintPrice, // Price per mint in wei uint256 reserve // Amount of tokens reserved for the deployer ) internal virtual { // Ensure a minimum fee of 0.02 ether is paid for deploying a new token require(msg.value >= 0.02 ether, "Insufficient deployment fee"); // Retrieve or create a new ERC20Token struct for the provided ticker ERC20Token storage newToken = inscriptions[ticker]; // Ensure the token doesn't already exist by checking if the deployer is address(0) require(newToken.deployer == address(0), "Token already exists"); // Assign the provided parameters to the new token's properties newToken.name = ticker; newToken.maxSupply = maxSupply; newToken.mintLimit = mintLimit; newToken.deployer = msg.sender; // The address deploying the token newToken.deployTime = block.timestamp; // Timestamp of token deployment newToken.maxMintPerAddress = maxMintPerAddress; newToken.mintPrice = mintPrice; newToken.reserve = reserve; // Increment the counter for the total number of tickers created totalTickers.increment(); // Add the token ticker to the list of token names tokenNames.push(ticker); // Send the ether paid for the deployment to the contract owner sendETH(payable(owner), msg.value); // If a reserve is specified, allocate tokens to the deployer's balance if (reserve != 0) { balances[ticker][msg.sender] += reserve; // Assign reserved tokens to the deployer's balance newToken.minted += reserve; // Update the total number of minted tokens newToken.holders += 1; // Increment the holder count } } function inscribeMint(bytes32 mintHash) internal virtual { // Retrieve the token's ticker using the provided mint hash string memory ticker = mintHexMap[mintHash].ticker; // Access the token details from the inscriptions mapping ERC20Token storage token = inscriptions[ticker]; // Ensure the amount sent by the caller matches the mint price for the token require(msg.value == token.mintPrice, "Incorrect mint price"); // If there is a maximum minting limit per address, ensure the user doesn't exceed it if (token.maxMintPerAddress != 0) { require( mintCounts[ticker][msg.sender] + token.mintLimit <= token.maxMintPerAddress, "Exceeds max mint per address" ); } // Ensure the total minted amount after this transaction won't exceed the max supply require( (token.minted + token.mintLimit) <= token.maxSupply, "Exceeds available supply" ); // Update the total minted tokens count token.minted += token.mintLimit; // Double check that the minted tokens do not exceed the max supply require(token.minted <= token.maxSupply, "Minting finished"); // If this is the first time the caller is minting this token, increment the holders count if (balances[ticker][msg.sender] == 0) { token.holders += 1; } // Update the mint count and balance for the caller mintCounts[ticker][msg.sender] += token.mintLimit; balances[ticker][msg.sender] += token.mintLimit; // Send 10% of the mint price to the contract owner sendETH(payable(owner), calculatePercentage(msg.value, 10)); // Send 90% of the mint price to the token deployer sendETH(payable(token.deployer), calculatePercentage(msg.value, 90)); } function sendETH(address payable recipient, uint256 amount) private{ // Attempt to transfer the specified amount of ETH to the recipient (bool success, ) = recipient.call{value: amount}(""); // Revert the transaction if the transfer fails require(success, "ETH transfer failed"); } function calculatePercentage(uint256 amount, uint256 percentage) internal pure returns (uint256) { // Calculate the percentage of the given amount return (amount * percentage) / 100; } function transferTokens( string memory ticker, // The symbol of the token being transferred address from, // The address of the sender who is transferring the tokens address to, // The address of the recipient who will receive the tokens uint256 amount // The number of tokens to transfer ) internal virtual { // Retrieve the balance of the sender for the specified token uint256 senderBalance = balances[ticker][from]; // Ensure the sender has enough balance to perform the transfer require(senderBalance >= amount, "Insufficient balance for transfer"); // Perform the transfer operation, subtracting the amount from the sender's balance unchecked { balances[ticker][from] = senderBalance - amount; } // If the sender's balance becomes zero after the transfer, reduce the holder count if (balances[ticker][from] == 0) { inscriptions[ticker].holders -= 1; } // If the recipient's balance was previously zero and a non-zero amount is transferred, increase the holder count if (balances[ticker][to] == 0 && amount > 0) { inscriptions[ticker].holders += 1; } // Add the transferred amount to the recipient's balance balances[ticker][to] += amount; } /** * @dev Approves a spender to transfer a specified amount of tokens on behalf of the token holder. * * @param ticker The symbol of the token being approved for spending (e.g., "ETH", "USDT"). * @param from The address of the token holder who is approving the transfer. * @param to The address of the spender who is allowed to transfer the tokens. * @param amount The maximum number of tokens the spender is allowed to transfer. */ function approveTokens( string memory ticker, // The token symbol for which the approval is being made address from, // The address of the token owner who is giving approval address to, // The address of the spender who is receiving approval uint256 amount // The amount of tokens to approve for the spender ) internal virtual { // Set the approval amount in the allowances mapping allowances[ticker][from][to] = amount; } /** * @dev Transfers tokens from one address to another using the allowance mechanism. * * This function checks if the caller has enough allowance to transfer the specified amount of tokens * from the `from` address to the `to` address. * * @param ticker The symbol of the token being transferred. * @param from The address from which tokens will be transferred. * @param to The address to which tokens will be transferred. * @param amount The number of tokens to transfer from the `from` address to the `to` address. */ function transferTokensFrom( string memory ticker, // The token symbol for the transfer operation address from, // The address from which tokens are being transferred address to, // The address to which tokens are being transferred uint256 amount // The amount of tokens to transfer ) internal virtual { // Check if the caller has sufficient allowance to perform the transfer require(allowances[ticker][from][msg.sender] >= 1, "Insufficient allowance"); // Call the transferTokens function to execute the transfer transferTokens(ticker, from, to, amount); } /** * @dev Fallback function that handles incoming Ether and processes the input data. * * This function is triggered when the contract receives Ether and no function matches the call. * It checks whether the minting process has been deployed for the given input, and if so, * it allows only externally owned accounts (EOAs) to inscribe the mint. Otherwise, it calls the * internal _inscribe function. * * @param input The calldata input data containing the minting information as a JSON string. * @return An empty byte array. */ fallback(bytes calldata input) external payable returns (bytes memory) { // Convert the input data (bytes) into a string string memory jsonString = string(input); // Calculate the hash of the JSON string to identify the mint bytes32 mintHash = keccak256(abi.encodePacked(jsonString)); // Check if the minting process has been deployed if (mintHexMap[mintHash].deployed) { // Ensure that the caller is an externally owned account (EOA) require(msg.sender == tx.origin, "Only EOA allowed"); // Call the inscribeMint function to process the minting inscribeMint(mintHash); } else { // If not deployed, call the internal _inscribe function _inscribe(jsonString); } // Return an empty byte array return ""; } function _inscribe(string memory jsonStr) internal virtual { uint256 returnValue; JsmnSolLib.Token[] memory tokens; (returnValue, tokens, ) = JsmnSolLib.parse(jsonStr, 17); require(returnValue == JsmnSolLib.RETURN_SUCCESS, "JSON parsing failed"); { string memory p = JsmnSolLib.getBytes( jsonStr, tokens[1].start, tokens[1].end ); string memory pVal = JsmnSolLib.getBytes( jsonStr, tokens[2].start, tokens[2].end ); string memory op = JsmnSolLib.getBytes( jsonStr, tokens[3].start, tokens[3].end ); string memory tick = JsmnSolLib.getBytes( jsonStr, tokens[5].start, tokens[5].end ); require( keccak256(abi.encodePacked(p)) == ERC20_P_HASH && keccak256(abi.encodePacked(pVal)) == ERC20_P_HASH_ERC20 && keccak256(abi.encodePacked(op)) == ERC20_OP_HASH && keccak256(abi.encodePacked(tick)) == ERC20_TICK_HASH, "Invalid ERC-20 parameters" ); } string memory opVal = JsmnSolLib.getBytes( jsonStr, tokens[4].start, tokens[4].end ); string memory tickVal = JsmnSolLib.getBytes( jsonStr, tokens[6].start, tokens[6].end ); if (keccak256(abi.encodePacked(opVal)) == ERC20_OP_HASH_TRANSFER) { string memory amt = JsmnSolLib.getBytes( jsonStr, tokens[7].start, tokens[7].end ); string memory toKey = JsmnSolLib.getBytes( jsonStr, tokens[9].start, tokens[9].end ); require( keccak256(abi.encodePacked(toKey)) == ERC20_OP_HASH_TRANSFER_TO && keccak256(abi.encodePacked(amt)) == ERC20_AMT_HASH, "Invalid transfer parameters" ); string memory amtVal = JsmnSolLib.getBytes( jsonStr, tokens[8].start, tokens[8].end ); string memory toVal = JsmnSolLib.getBytes( jsonStr, tokens[10].start, tokens[10].end ); transferTokens( tickVal, msg.sender, JsmnSolLib.stringToAddress(toVal), uint256(JsmnSolLib.parseInt(amtVal, DECIMALS)) ); } else if (keccak256(abi.encodePacked(opVal)) == ERC20_OP_HASH_DEPLOY) { string memory max = JsmnSolLib.getBytes( jsonStr, tokens[7].start, tokens[7].end ); string memory lim = JsmnSolLib.getBytes( jsonStr, tokens[9].start, tokens[9].end ); string memory maxMint = JsmnSolLib.getBytes( jsonStr, tokens[11].start, tokens[11].end ); string memory mintPrice = JsmnSolLib.getBytes( jsonStr, tokens[13].start, tokens[13].end ); string memory reserve = JsmnSolLib.getBytes( jsonStr, tokens[15].start, tokens[15].end ); require( keccak256(abi.encodePacked(max)) == ERC20_MAX_HASH && keccak256(abi.encodePacked(lim)) == ERC20_LIM_HASH && keccak256(abi.encodePacked(maxMint)) == ERC20_MAX_MINT && keccak256(abi.encodePacked(mintPrice)) == ERC20_MINT_PRICE && keccak256(abi.encodePacked(reserve)) == ERC20_RESERVE, "Invalid deployment parameters" ); string memory maxVal = JsmnSolLib.getBytes( jsonStr, tokens[8].start, tokens[8].end ); string memory limVal = JsmnSolLib.getBytes( jsonStr, tokens[10].start, tokens[10].end ); string memory mintVal = JsmnSolLib.getBytes( jsonStr, tokens[12].start, tokens[12].end ); string memory priceVal = JsmnSolLib.getBytes( jsonStr, tokens[14].start, tokens[14].end ); string memory reserveVal = JsmnSolLib.getBytes( jsonStr, tokens[16].start, tokens[16].end ); MintERC20 storage mintercData = mintHexMap[ keccak256(abi.encodePacked(mintString(tickVal,limVal)))]; mintercData.deployed = true; mintercData.ticker = tickVal; deployToken( tickVal, uint256(JsmnSolLib.parseInt(maxVal, DECIMALS)), uint256(JsmnSolLib.parseInt(limVal, DECIMALS)), uint256(JsmnSolLib.parseInt(mintVal, DECIMALS)), uint256(JsmnSolLib.parseInt(priceVal, DECIMALS)), uint256(JsmnSolLib.parseInt(reserveVal, DECIMALS)) ); } else if (keccak256(abi.encodePacked(opVal)) == ERC20_OP_HASH_APPROVE) { string memory amt = JsmnSolLib.getBytes( jsonStr, tokens[7].start, tokens[7].end ); string memory toKey = JsmnSolLib.getBytes( jsonStr, tokens[9].start, tokens[9].end ); require( keccak256(abi.encodePacked(toKey)) == ERC20_OP_HASH_TRANSFER_TO && keccak256(abi.encodePacked(amt)) == ERC20_AMT_HASH, "Invalid approval parameters" ); string memory amtVal = JsmnSolLib.getBytes( jsonStr, tokens[8].start, tokens[8].end ); string memory toVal = JsmnSolLib.getBytes( jsonStr, tokens[10].start, tokens[10].end ); approveTokens( tickVal, msg.sender, JsmnSolLib.stringToAddress(toVal), uint256(JsmnSolLib.parseInt(amtVal)) ); } else if (keccak256(abi.encodePacked(opVal)) == ERC20_OP_HASH_TRANSFERFROM) { string memory amt = JsmnSolLib.getBytes( jsonStr, tokens[7].start, tokens[7].end ); string memory toKey = JsmnSolLib.getBytes( jsonStr, tokens[9].start, tokens[9].end ); string memory fromKey = JsmnSolLib.getBytes( jsonStr, tokens[11].start, tokens[11].end ); require( keccak256(abi.encodePacked(toKey)) == ERC20_OP_HASH_TRANSFER_TO && keccak256(abi.encodePacked(amt)) == ERC20_AMT_HASH && keccak256(abi.encodePacked(fromKey)) == ERC20_OP_HASH_TRANSFER_FROM, "Invalid transferFrom parameters" ); string memory amtVal = JsmnSolLib.getBytes( jsonStr, tokens[8].start, tokens[8].end ); string memory toVal = JsmnSolLib.getBytes( jsonStr, tokens[10].start, tokens[10].end ); string memory fromVal = JsmnSolLib.getBytes( jsonStr, tokens[12].start, tokens[12].end ); transferTokensFrom( tickVal, JsmnSolLib.stringToAddress(fromVal), JsmnSolLib.stringToAddress(toVal), uint256(JsmnSolLib.parseInt(amtVal, DECIMALS)) ); } } function withdrawETH(address payable _to, uint _amount) external onlyOwner{ _to.transfer(_amount); } function withdrawERC20(address token, address to, uint256 value) external onlyOwner{ (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } receive() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; contract inputData { string constant p1 = '{"p":"erc-20","op":"deploy","tick":"'; string constant m1 = '","max":"'; function mintData(string memory tick, string memory amt) public pure returns (string memory json, bytes memory jsonHex) { json = mintString(tick,amt); jsonHex = bytes(json); } function mintString(string memory tick, string memory amt) internal pure returns (string memory json) { string memory p = '{"p":"erc-20","op":"mint","tick":"'; string memory m = '","amt":"'; string memory s = '"}'; json = string(abi.encodePacked(p, tick, m, amt, s)); } function transferData( string memory tick, string memory to, string memory amt ) public pure returns (string memory json, bytes memory jsonHex) { string memory p = '{"p":"erc-20","op":"transfer","tick":"'; string memory m = '","amt":"'; string memory m2 = '", "to":"'; string memory s = '"}'; json = string(abi.encodePacked(p, tick, m, amt, m2, to, s)); jsonHex = bytes(json); } function depyoyData( string memory tick, string memory max, string memory lim, string memory maxMint, string memory mintPrice, string memory reserve ) public pure returns (string memory json, bytes memory jsonHex) { string memory m2 = '","lim":"'; string memory m3 = '","maxMint":"'; string memory m4 = '","mintPrice":"'; string memory m5 = '","reserve":"'; string memory s = '"}'; bytes memory ss= abi.encodePacked(lim, m3, maxMint, m4, mintPrice, m5, reserve, s); json = string(abi.encodePacked(p1, tick, m1, max, m2,ss)); jsonHex = bytes(json); } function transferFromData( string memory tick, string memory to, string memory amt, string memory from ) public pure returns (string memory json, bytes memory jsonHex) { string memory p = '{"p":"erc-20","op":"transferFrom","tick":"'; string memory m = '","amt":"'; string memory m2 = '", "to":"'; string memory m3 = '", "from":"'; string memory s = '"}'; json = string(abi.encodePacked(p, tick, m, amt, m2, to, m3, from, s)); jsonHex = bytes(json); } function approveData( string memory tick, string memory to, string memory amt ) public pure returns (string memory json, bytes memory jsonHex) { string memory p = '{"p":"erc-20","op":"approve","tick":"'; string memory m = '","amt":"'; string memory m2 = '", "to":"'; string memory s = '"}'; json = string(abi.encodePacked(p, tick, m, amt, m2, to, s)); jsonHex = bytes(json); } }
// SPDX-License-Identifier: AGPL-3.0-or-later /* Copyright (c) 2017 Christoph Niemann Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ pragma solidity ^0.8.1; library JsmnSolLib { enum JsmnType { UNDEFINED, OBJECT, ARRAY, STRING, PRIMITIVE } uint256 constant RETURN_SUCCESS = 0; uint256 constant RETURN_ERROR_INVALID_JSON = 1; uint256 constant RETURN_ERROR_PART = 2; uint256 constant RETURN_ERROR_NO_MEM = 3; struct Token { JsmnType jsmnType; uint256 start; bool startSet; uint256 end; bool endSet; uint8 size; } struct Parser { uint256 pos; uint256 toknext; int256 toksuper; } function init(uint256 length) internal pure returns (Parser memory, Token[] memory) { Parser memory p = Parser(0, 0, -1); Token[] memory t = new Token[](length); return (p, t); } function allocateToken(Parser memory parser, Token[] memory tokens) internal pure returns (bool, Token memory) { if (parser.toknext >= tokens.length) { // no more space in tokens return (false, tokens[tokens.length - 1]); } Token memory token = Token(JsmnType.UNDEFINED, 0, false, 0, false, 0); tokens[parser.toknext] = token; parser.toknext++; return (true, token); } function fillToken( Token memory token, JsmnType jsmnType, uint256 start, uint256 end ) internal pure { token.jsmnType = jsmnType; token.start = start; token.startSet = true; token.end = end; token.endSet = true; token.size = 0; } function parseString( Parser memory parser, Token[] memory tokens, bytes memory s ) internal pure returns (uint256) { uint256 start = parser.pos; bool success; Token memory token; parser.pos++; for (; parser.pos < s.length; parser.pos++) { bytes1 c = s[parser.pos]; // Quote -> end of string if (c == '"') { (success, token) = allocateToken(parser, tokens); if (!success) { parser.pos = start; return RETURN_ERROR_NO_MEM; } fillToken(token, JsmnType.STRING, start + 1, parser.pos); return RETURN_SUCCESS; } if (uint8(c) == 92 && parser.pos + 1 < s.length) { // handle escaped characters: skip over it parser.pos++; if ( s[parser.pos] == '"' || s[parser.pos] == "/" || s[parser.pos] == "\\" || s[parser.pos] == "f" || s[parser.pos] == "r" || s[parser.pos] == "n" || s[parser.pos] == "b" || s[parser.pos] == "t" ) { continue; } else { // all other values are INVALID parser.pos = start; return (RETURN_ERROR_INVALID_JSON); } } } parser.pos = start; return RETURN_ERROR_PART; } function parsePrimitive( Parser memory parser, Token[] memory tokens, bytes memory s ) internal pure returns (uint256) { bool found = false; uint256 start = parser.pos; bytes1 c; bool success; Token memory token; for (; parser.pos < s.length; parser.pos++) { c = s[parser.pos]; if ( c == " " || c == "\t" || c == "\n" || c == "\r" || c == "," || c == 0x7d || c == 0x5d ) { found = true; break; } if (uint8(c) < 32 || uint8(c) > 127) { parser.pos = start; return RETURN_ERROR_INVALID_JSON; } } if (!found) { parser.pos = start; return RETURN_ERROR_PART; } // found the end (success, token) = allocateToken(parser, tokens); if (!success) { parser.pos = start; return RETURN_ERROR_NO_MEM; } fillToken(token, JsmnType.PRIMITIVE, start, parser.pos); parser.pos--; return RETURN_SUCCESS; } function parse(string memory json, uint256 numberElements) internal pure returns ( uint256, Token[] memory tokens, uint256 ) { bytes memory s = bytes(json); bool success; Parser memory parser; (parser, tokens) = init(numberElements); // Token memory token; uint256 r; uint256 count = parser.toknext; uint256 i; Token memory token; for (; parser.pos < s.length; parser.pos++) { bytes1 c = s[parser.pos]; // 0x7b, 0x5b opening curly parentheses or brackets if (c == 0x7b || c == 0x5b) { count++; (success, token) = allocateToken(parser, tokens); if (!success) { return (RETURN_ERROR_NO_MEM, tokens, 0); } if (parser.toksuper != -1) { tokens[uint256(parser.toksuper)].size++; } token.jsmnType = (c == 0x7b ? JsmnType.OBJECT : JsmnType.ARRAY); token.start = parser.pos; token.startSet = true; parser.toksuper = int256(parser.toknext - 1); continue; } // closing curly parentheses or brackets if (c == 0x7d || c == 0x5d) { JsmnType tokenType = ( c == 0x7d ? JsmnType.OBJECT : JsmnType.ARRAY ); bool isUpdated = false; for (i = parser.toknext - 1; i >= 0; i--) { token = tokens[i]; if (token.startSet && !token.endSet) { if (token.jsmnType != tokenType) { // found a token that hasn't been closed but from a different type return (RETURN_ERROR_INVALID_JSON, tokens, 0); } parser.toksuper = -1; tokens[i].end = parser.pos + 1; tokens[i].endSet = true; isUpdated = true; break; } } if (!isUpdated) { return (RETURN_ERROR_INVALID_JSON, tokens, 0); } for (; i > 0; i--) { token = tokens[i]; if (token.startSet && !token.endSet) { parser.toksuper = int256(i); break; } } if (i == 0) { token = tokens[i]; if (token.startSet && !token.endSet) { parser.toksuper = int128(uint128(i)); } } continue; } // 0x42 if (c == '"') { r = parseString(parser, tokens, s); if (r != RETURN_SUCCESS) { return (r, tokens, 0); } //JsmnError.INVALID; count++; if (parser.toksuper != -1) tokens[uint256(parser.toksuper)].size++; continue; } // ' ', \r, \t, \n if (c == " " || c == 0x11 || c == 0x12 || c == 0x14) { continue; } // 0x3a if (c == ":") { parser.toksuper = int256(parser.toknext - 1); continue; } if (c == ",") { if ( parser.toksuper != -1 && tokens[uint256(parser.toksuper)].jsmnType != JsmnType.ARRAY && tokens[uint256(parser.toksuper)].jsmnType != JsmnType.OBJECT ) { for (i = parser.toknext - 1; i >= 0; i--) { if ( tokens[i].jsmnType == JsmnType.ARRAY || tokens[i].jsmnType == JsmnType.OBJECT ) { if (tokens[i].startSet && !tokens[i].endSet) { parser.toksuper = int256(i); break; } } } } continue; } // Primitive if ( (c >= "0" && c <= "9") || c == "-" || c == "f" || c == "t" || c == "n" ) { if (parser.toksuper != -1) { token = tokens[uint256(parser.toksuper)]; if ( token.jsmnType == JsmnType.OBJECT || (token.jsmnType == JsmnType.STRING && token.size != 0) ) { return (RETURN_ERROR_INVALID_JSON, tokens, 0); } } r = parsePrimitive(parser, tokens, s); if (r != RETURN_SUCCESS) { return (r, tokens, 0); } count++; if (parser.toksuper != -1) { tokens[uint256(parser.toksuper)].size++; } continue; } // printable char if (c >= 0x20 && c <= 0x7e) { return (RETURN_ERROR_INVALID_JSON, tokens, 0); } } return (RETURN_SUCCESS, tokens, parser.toknext); } function getBytes( string memory json, uint256 start, uint256 end ) internal pure returns (string memory) { bytes memory s = bytes(json); bytes memory result = new bytes(end - start); for (uint256 i = start; i < end; i++) { result[i - start] = s[i]; } return string(result); } // parseInt function parseInt(string memory _a) internal pure returns (int256) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string memory _a, uint256 _b) internal pure returns (int256) { bytes memory bresult = bytes(_a); int256 mint = 0; bool decimals = false; bool negative = false; for (uint256 i = 0; i < bresult.length; i++) { if ((i == 0) && (bresult[i] == "-")) { negative = true; } if ((uint8(bresult[i]) >= 48) && (uint8(bresult[i]) <= 57)) { if (decimals) { if (_b == 0) break; else _b--; } mint *= 10; mint += int256(uint256(uint8(bresult[i]) - 48)); } else if (uint8(bresult[i]) == 46) decimals = true; } if (_b > 0) mint *= int256(10**_b); if (negative) mint *= -1; return mint; } function uint2str(uint256 i) internal pure returns (string memory) { if (i == 0) return "0"; uint256 j = i; uint256 len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len - 1; while (i != 0) { bstr[k--] = bytes1(uint8(48 + (i % 10))); i /= 10; } return string(bstr); } function parseBool(string memory _a) internal pure returns (bool) { if (strCompare(_a, "true") == 0) { return true; } else { return false; } } function strCompare(string memory _a, string memory _b) internal pure returns (int256) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint256 minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint256 i = 0; i < minLength; i++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function addressToString(address addr) internal pure returns (string memory) { //Convert addr to bytes bytes20 value = bytes20(uint160(addr)); bytes memory strBytes = new bytes(42); //Encode hex prefix strBytes[0] = "0"; strBytes[1] = "x"; //Encode bytes usig hex encoding for (uint256 i = 0; i < 20; i++) { uint8 byteValue = uint8(value[i]); strBytes[2 + (i << 1)] = encode((byteValue >> 4) & 0x0f); strBytes[3 + (i << 1)] = encode(byteValue & 0x0f); } return string(strBytes); } function stringToAddress(string memory data) internal pure returns (address) { bytes memory strBytes = bytes(data); require( strBytes.length >= 39 && strBytes.length <= 42, "Not hex string" ); //Skip prefix uint256 start = 0; uint256 bytesBegin = 0; if (strBytes[1] == "x" || strBytes[1] == "X") { start = 2; } //Special case: 0xabc. should be 0x0abc uint160 addrValue = 0; uint256 effectPayloadLen = strBytes.length - start; if (effectPayloadLen == 39) { addrValue += decode(strBytes[start++]); bytesBegin++; } //Main loop for (uint256 i = bytesBegin; i < 20; i++) { addrValue <<= 8; uint8 tmp1 = decode(strBytes[start]); uint8 tmp2 = decode(strBytes[start + 1]); uint8 combined = (tmp1 << 4) + tmp2; addrValue += combined; start += 2; } return address(addrValue); } function decode(bytes1 asc) private pure returns (uint8) { uint8 val = uint8(asc); //0-9 if (val >= 48 && val <= 57) { return val - 48; } //A-F if (val >= 65 && val <= 70) { return val - 55; } //a-f return val - 87; } function encode(uint8 num) private pure returns (bytes1) { //0-9 -> 0-9 if (num >= 0 && num <= 9) { return bytes1(num + 48); } //10-15 -> a-f return bytes1(num + 87); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"string","name":"amt","type":"string"}],"name":"approveData","outputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"bytes","name":"jsonHex","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"string","name":"max","type":"string"},{"internalType":"string","name":"lim","type":"string"},{"internalType":"string","name":"maxMint","type":"string"},{"internalType":"string","name":"mintPrice","type":"string"},{"internalType":"string","name":"reserve","type":"string"}],"name":"depyoyData","outputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"bytes","name":"jsonHex","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"inscriptions","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"mintLimit","type":"uint256"},{"internalType":"uint256","name":"minted","type":"uint256"},{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint256","name":"deployTime","type":"uint256"},{"internalType":"uint256","name":"holders","type":"uint256"},{"internalType":"uint256","name":"maxMintPerAddress","type":"uint256"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"uint256","name":"reserve","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"mintCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"string","name":"amt","type":"string"}],"name":"mintData","outputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"bytes","name":"jsonHex","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTickers","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"string","name":"amt","type":"string"}],"name":"transferData","outputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"bytes","name":"jsonHex","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"string","name":"amt","type":"string"},{"internalType":"string","name":"from","type":"string"}],"name":"transferFromData","outputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"bytes","name":"jsonHex","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561000f575f80fd5b505f80546001600160a01b0319163317905561444d8061002e5f395ff3fe6080604052600436106100e0575f3560e01c80638892ebce1161007e578063c6f487fd11610058578063c6f487fd146103c7578063d676260f146103fc578063f7218c141461041b578063faa6423b1461043a576100e7565b80638892ebce1461032c5780638da5cb5b14610372578063b6603cc7146103a8576100e7565b80634782f779116100ba5780634782f7791461027e578063624a59331461029d5780637ef53091146102ca5780638289573c14610316576100e7565b806306f69c32146101d8578063310495ab1461023157806344004cc11461025d576100e7565b366100e757005b5f3660605f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604051949550936101369350859250602001905061372c565b60408051601f1981840301815291815281516020928301205f818152600390935291206001015490915060ff16156101bd573332146101af5760405162461bcd60e51b815260206004820152601060248201526f13db9b1e481153d048185b1b1bddd95960821b60448201526064015b60405180910390fd5b6101b881610459565b6101c6565b6101c6826107d4565b505060408051602081019091525f9052005b3480156101e3575f80fd5b5061021e6101f23660046137fb565b81516020818401810180516002825292820194820194909420919093529091525f908152604090205481565b6040519081526020015b60405180910390f35b34801561023c575f80fd5b5061025061024b36600461384a565b61174b565b604051610228919061388c565b348015610268575f80fd5b5061027c61027736600461389e565b6117f1565b005b348015610289575f80fd5b5061027c6102983660046138dc565b611959565b3480156102a8575f80fd5b506102bc6102b7366004613906565b6119e5565b604051610228929190613988565b3480156102d5575f80fd5b5061021e6102e43660046139b5565b825160208185018101805160048252928201958201959095209190945283525f91825260408083209093528152205481565b348015610321575f80fd5b5060075461021e9081565b348015610337575f80fd5b5061021e6103463660046137fb565b81516020818401810180516001825292820194820194909420919093529091525f908152604090205481565b34801561037d575f80fd5b505f54610390906001600160a01b031681565b6040516001600160a01b039091168152602001610228565b3480156103b3575f80fd5b506102bc6103c2366004613a15565b611a97565b3480156103d2575f80fd5b506103e66103e1366004613b00565b611bfd565b6040516102289a99989796959493929190613b3a565b348015610407575f80fd5b506102bc610416366004613906565b611ce9565b348015610426575f80fd5b506102bc610435366004613b9c565b611d7c565b348015610445575f80fd5b506102bc610454366004613bfc565b611d93565b5f818152600360205260408120805461047190613ca2565b80601f016020809104026020016040519081016040528092919081815260200182805461049d90613ca2565b80156104e85780601f106104bf576101008083540402835291602001916104e8565b820191905f5260205f20905b8154815290600101906020018083116104cb57829003601f168201915b505050505090505f600582604051610500919061372c565b908152602001604051809103902090508060080154341461055a5760405162461bcd60e51b8152602060048201526014602482015273496e636f7272656374206d696e7420707269636560601b60448201526064016101a6565b6007810154156105f1578060070154816002015460028460405161057e919061372c565b9081526040805160209281900383019020335f90815292529020546105a39190613cee565b11156105f15760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d6178206d696e742070657220616464726573730000000060448201526064016101a6565b80600101548160020154826003015461060a9190613cee565b11156106585760405162461bcd60e51b815260206004820152601860248201527f4578636565647320617661696c61626c6520737570706c79000000000000000060448201526064016101a6565b8060020154816003015f82825461066f9190613cee565b90915550506001810154600382015411156106bf5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d1a5b99c8199a5b9a5cda195960821b60448201526064016101a6565b6001826040516106cf919061372c565b9081526040805160209281900383019020335f9081529252812054900361070a576001816006015f8282546107049190613cee565b90915550505b806002015460028360405161071f919061372c565b9081526040805160209281900383019020335f908152925281208054909190610749908490613cee565b9091555050600281015460405160019061076490859061372c565b9081526040805160209281900383019020335f90815292528120805490919061078e908490613cee565b90915550505f546107b2906001600160a01b03166107ad34600a611e83565b611ea3565b60048101546107cf906001600160a01b03166107ad34605a611e83565b505050565b5f60606107e2836011611f38565b509092509050811561082c5760405162461bcd60e51b81526020600482015260136024820152721294d3d3881c185c9cda5b99c819985a5b1959606a1b60448201526064016101a6565b5f610874848360018151811061084457610844613d01565b6020026020010151602001518460018151811061086357610863613d01565b602002602001015160600151612724565b90505f6108ad858460028151811061088e5761088e613d01565b6020026020010151602001518560028151811061086357610863613d01565b90505f6108e686856003815181106108c7576108c7613d01565b6020026020010151602001518660038151811061086357610863613d01565b90505f61091f878660058151811061090057610900613d01565b6020026020010151602001518760058151811061086357610863613d01565b604051600760fc1b60208201529091506021016040516020818303038152906040528051906020012084604051602001610959919061372c565b604051602081830303815290604052805190602001201480156109cb57506040516506572632d32360d41b602082015260260160405160208183030381529060405280519060200120836040516020016109b3919061372c565b60405160208183030381529060405280519060200120145b8015610a2257506040516106f760f41b60208201526022016040516020818303038152906040528051906020012082604051602001610a0a919061372c565b60405160208183030381529060405280519060200120145b8015610a7b5750604051637469636b60e01b60208201526024016040516020818303038152906040528051906020012081604051602001610a63919061372c565b60405160208183030381529060405280519060200120145b610ac75760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204552432d323020706172616d65746572730000000000000060448201526064016101a6565b505050505f610b028483600481518110610ae357610ae3613d01565b6020026020010151602001518460048151811061086357610863613d01565b90505f610b3b8584600681518110610b1c57610b1c613d01565b6020026020010151602001518560068151811061086357610863613d01565b604051673a3930b739b332b960c11b60208201529091506028016040516020818303038152906040528051906020012082604051602001610b7c919061372c565b6040516020818303038152906040528051906020012003610d96575f610bce8685600781518110610baf57610baf613d01565b6020026020010151602001518660078151811061086357610863613d01565b90505f610c078786600981518110610be857610be8613d01565b6020026020010151602001518760098151811061086357610863613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012081604051602001610c42919061372c565b60405160208183030381529060405280519060200120148015610cb1575060405162185b5d60ea1b60208201526023016040516020818303038152906040528051906020012082604051602001610c99919061372c565b60405160208183030381529060405280519060200120145b610cfd5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964207472616e7366657220706172616d6574657273000000000060448201526064016101a6565b5f610d348887600881518110610d1557610d15613d01565b6020026020010151602001518860088151811061086357610863613d01565b90505f610d6d8988600a81518110610d4e57610d4e613d01565b60200260200101516020015189600a8151811061086357610863613d01565b9050610d8d8533610d7d846127f1565b610d888660126129be565b612b2a565b50505050611744565b604051656465706c6f7960d01b60208201526026016040516020818303038152906040528051906020012082604051602001610dd2919061372c565b60405160208183030381529060405280519060200120036112a4575f610e058685600781518110610baf57610baf613d01565b90505f610e1f8786600981518110610be857610be8613d01565b90505f610e588887600b81518110610e3957610e39613d01565b60200260200101516020015188600b8151811061086357610863613d01565b90505f610e918988600d81518110610e7257610e72613d01565b60200260200101516020015189600d8151811061086357610863613d01565b90505f610eca8a89600f81518110610eab57610eab613d01565b6020026020010151602001518a600f8151811061086357610863613d01565b604051620dac2f60eb1b60208201529091506023016040516020818303038152906040528051906020012085604051602001610f06919061372c565b60405160208183030381529060405280519060200120148015610f755750604051626c696d60e81b60208201526023016040516020818303038152906040528051906020012084604051602001610f5d919061372c565b60405160208183030381529060405280519060200120145b8015610fd15750604051661b585e135a5b9d60ca1b60208201526027016040516020818303038152906040528051906020012083604051602001610fb9919061372c565b60405160208183030381529060405280519060200120145b801561102f5750604051686d696e74507269636560b81b60208201526029016040516020818303038152906040528051906020012082604051602001611017919061372c565b60405160208183030381529060405280519060200120145b801561108b5750604051667265736572766560c81b60208201526027016040516020818303038152906040528051906020012081604051602001611073919061372c565b60405160208183030381529060405280519060200120145b6110d75760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206465706c6f796d656e7420706172616d657465727300000060448201526064016101a6565b5f61110e8b8a6008815181106110ef576110ef613d01565b6020026020010151602001518b60088151811061086357610863613d01565b90505f6111478c8b600a8151811061112857611128613d01565b6020026020010151602001518c600a8151811061086357610863613d01565b90505f6111808d8c600c8151811061116157611161613d01565b6020026020010151602001518d600c8151811061086357610863613d01565b90505f6111b98e8d600e8151811061119a5761119a613d01565b6020026020010151602001518e600e8151811061086357610863613d01565b90505f6111f28f8e6010815181106111d3576111d3613d01565b6020026020010151602001518f60108151811061086357610863613d01565b90505f60035f6112028e88612d3a565b604051602001611212919061372c565b60408051601f198184030181529181528151602092830120835290820192909252015f206001808201805460ff191690911790559050806112538d82613d62565b506112948c6112638860126129be565b61126e8860126129be565b6112798860126129be565b6112848860126129be565b61128f8860126129be565b612dc3565b5050505050505050505050611744565b60405166617070726f766560c81b602082015260270160405160208183030381529060405280519060200120826040516020016112e1919061372c565b6040516020818303038152906040528051906020012003611474575f6113148685600781518110610baf57610baf613d01565b90505f61132e8786600981518110610be857610be8613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012081604051602001611369919061372c565b604051602081830303815290604052805190602001201480156113d8575060405162185b5d60ea1b602082015260230160405160208183030381529060405280519060200120826040516020016113c0919061372c565b60405160208183030381529060405280519060200120145b6114245760405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420617070726f76616c20706172616d6574657273000000000060448201526064016101a6565b5f61143c8887600881518110610d1557610d15613d01565b90505f6114568988600a81518110610d4e57610d4e613d01565b9050610d8d8533611466846127f1565b61146f86612fbc565b612fc7565b6040516b7472616e7366657246726f6d60a01b6020820152602c0160405160208183030381529060405280519060200120826040516020016114b6919061372c565b6040516020818303038152906040528051906020012003611744575f6114e98685600781518110610baf57610baf613d01565b90505f6115038786600981518110610be857610be8613d01565b90505f61151d8887600b81518110610e3957610e39613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012082604051602001611558919061372c565b604051602081830303815290604052805190602001201480156115c7575060405162185b5d60ea1b602082015260230160405160208183030381529060405280519060200120836040516020016115af919061372c565b60405160208183030381529060405280519060200120145b801561162057506040516366726f6d60e01b60208201526024016040516020818303038152906040528051906020012081604051602001611608919061372c565b60405160208183030381529060405280519060200120145b61166c5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964207472616e7366657246726f6d20706172616d65746572730060448201526064016101a6565b5f6116a3898860088151811061168457611684613d01565b6020026020010151602001518960088151811061086357610863613d01565b90505f6116dc8a89600a815181106116bd576116bd613d01565b6020026020010151602001518a600a8151811061086357610863613d01565b90505f6117158b8a600c815181106116f6576116f6613d01565b6020026020010151602001518b600c8151811061086357610863613d01565b905061173d87611724836127f1565b61172d856127f1565b6117388760126129be565b613010565b5050505050505b5050505050565b6006818154811061175a575f80fd5b905f5260205f20015f91509050805461177290613ca2565b80601f016020809104026020016040519081016040528092919081815260200182805461179e90613ca2565b80156117e95780601f106117c0576101008083540402835291602001916117e9565b820191905f5260205f20905b8154815290600101906020018083116117cc57829003601f168201915b505050505081565b5f546001600160a01b0316331461184a5760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f742074686520636f6e7472616374206f776e657260448201526064016101a6565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392908716916118a5919061372c565b5f604051808303815f865af19150503d805f81146118de576040519150601f19603f3d011682016040523d82523d5f602084013e6118e3565b606091505b509150915081801561190d57508051158061190d57508080602001905181019061190d9190613e1e565b6117445760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016101a6565b5f546001600160a01b031633146119b25760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f742074686520636f6e7472616374206f776e657260448201526064016101a6565b6040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156107cf573d5f803e3d5ffd5b6060805f6040518060600160405280602581526020016143cd6025913960408051808201825260098082526811161130b6ba111d1160b91b6020808401919091528351808501855291825268111610113a37911d1160b91b82820152835180850185526002815261227d60f01b8183015293519495509193909291611a789186918c9187918c9188918f91899101613e3d565b60408051601f19818403018152919052998a9950975050505050505050565b6060805f604051806040016040528060098152602001681116113634b6911d1160b91b81525090505f6040518060400160405280600d81526020016c11161136b0bc26b4b73a111d1160991b81525090505f6040518060400160405280600f81526020016e11161136b4b73a283934b1b2911d1160891b81525090505f6040518060400160405280600d81526020016c1116113932b9b2b93b32911d1160991b81525090505f60405180604001604052806002815260200161227d60f01b81525090505f8b858c868d878e88604051602001611b7a989796959493929190613ece565b60408051601f198184030181526060830190915260248083529092506143a960208301398e6040518060400160405280600981526020016811161136b0bc111d1160b91b8152508f8985604051602001611bd996959493929190613f72565b60408051601f198184030181529190529e8f9e509c50505050505050505050505050565b8051602081830181018051600582529282019190930120915280548190611c2390613ca2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4f90613ca2565b8015611c9a5780601f10611c7157610100808354040283529160200191611c9a565b820191905f5260205f20905b815481529060010190602001808311611c7d57829003601f168201915b50505060018401546002850154600386015460048701546005880154600689015460078a015460088b01546009909b0154999a96999598509396506001600160a01b039092169490939192918a565b6060805f6040518060600160405280602681526020016143f26026913960408051808201825260098082526811161130b6ba111d1160b91b6020808401919091528351808501855291825268111610113a37911d1160b91b82820152835180850185526002815261227d60f01b8183015293519495509193909291611a789186918c9187918c9188918f91899101613e3d565b606080611d898484612d3a565b9485945092505050565b6060805f6040518060600160405280602a815260200161437f602a913990505f6040518060400160405280600981526020016811161130b6ba111d1160b91b81525090505f60405180604001604052806009815260200168111610113a37911d1160b91b81525090505f6040518060400160405280600b81526020016a11161011333937b6911d1160a91b81525090505f60405180604001604052806002815260200161227d60f01b8152509050848b858b868e878e88604051602001611e6299989796959493929190613ff0565b60408051601f198184030181529190529b8c9b509950505050505050505050565b5f6064611e9083856140b0565b611e9a91906140c7565b90505b92915050565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611eec576040519150601f19603f3d011682016040523d82523d5f602084013e611ef1565b606091505b50509050806107cf5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016101a6565b5f60605f808590505f611f6260405180606001604052805f81526020015f81526020015f81525090565b611f6b876130a9565b60208201519096509091505f9081611f816136d5565b86518551101561270d575f87865f015181518110611fa157611fa1613d01565b01602001516001600160f81b0319169050607b60f81b811480611fd15750605b60f81b6001600160f81b03198216145b156120c35783611fe0816140e6565b945050611fed868b61314b565b90975091508661200c5750600399505f975061271d9650505050505050565b85604001515f191461204e578986604001518151811061202e5761202e613d01565b602002602001015160a0018051809190612047906140fe565b60ff169052505b607b60f81b6001600160f81b031982161461206a57600261206d565b60015b829060048111156120805761208061411c565b908160048111156120935761209361411c565b9052508551602080840191909152600160408401819052908701516120b89190614130565b6040870152506126f9565b607d60f81b6001600160f81b0319821614806120ec5750605d60f81b6001600160f81b03198216145b156122d7575f607d60f81b6001600160f81b031983161461210e576002612111565b60015b90505f600188602001516121259190614130565b94505b8b858151811061213a5761213a613d01565b602002602001015193508360400151801561215757508360800151155b156122035781600481111561216e5761216e61411c565b845160048111156121815761218161411c565b1461219d575060019b505f995061271d98505050505050505050565b5f19604089015287516121b1906001613cee565b8c86815181106121c3576121c3613d01565b6020026020010151606001818152505060018c86815181106121e7576121e7613d01565b6020908102919091010151901515608090910152506001612215565b8461220d81614143565b955050612128565b80612231575060019b505f995061271d98505050505050505050565b8415612289578b858151811061224957612249613d01565b602002602001015193508360400151801561226657508360800151155b156122775760408801859052612289565b8461228181614143565b955050612231565b845f036122cf578b85815181106122a2576122a2613d01565b60200260200101519350836040015180156122bf57508360800151155b156122cf57600f85900b60408901525b5050506126f9565b6001600160f81b03198116601160f91b03612367576122f7868b8a613206565b9450841561231257509298505f965061271d95505050505050565b8361231c816140e6565b94505085604001515f1914612361578986604001518151811061234157612341613d01565b602002602001015160a001805180919061235a906140fe565b60ff169052505b506126f9565b600160fd1b6001600160f81b0319821614806123905750601160f81b6001600160f81b03198216145b806123a85750600960f91b6001600160f81b03198216145b806123c05750600560fa1b6001600160f81b03198216145b156123cb57506126f9565b6001600160f81b03198116601d60f91b036123f157600186602001516120b89190614130565b6001600160f81b03198116600b60fa1b0361257a5785604001515f191415801561244d575060028a87604001518151811061242e5761242e613d01565b60200260200101515f0151600481111561244a5761244a61411c565b14155b801561248b575060018a87604001518151811061246c5761246c613d01565b60200260200101515f015160048111156124885761248861411c565b14155b1561236157600186602001516124a19190614130565b92505b60028a84815181106124b8576124b8613d01565b60200260200101515f015160048111156124d4576124d461411c565b148061250d575060018a84815181106124ef576124ef613d01565b60200260200101515f0151600481111561250b5761250b61411c565b145b156125685789838151811061252457612524613d01565b6020026020010151604001518015612557575089838151811061254957612549613d01565b602002602001015160800151155b156125685760408601839052612361565b8261257281614143565b9350506124a4565b600360fc1b6001600160f81b03198216108015906125a65750603960f81b6001600160f81b0319821611155b806125be5750602d60f81b6001600160f81b03198216145b806125d65750603360f91b6001600160f81b03198216145b806125ee5750601d60fa1b6001600160f81b03198216145b806126065750603760f91b6001600160f81b03198216145b156126b15785604001515f19146126a6578986604001518151811061262d5761262d613d01565b602002602001015191506001600481111561264a5761264a61411c565b8251600481111561265d5761265d61411c565b148061268c57506003825160048111156126795761267961411c565b14801561268c575060a082015160ff1615155b156126a65750600199505f975061271d9650505050505050565b6122f7868b8a61349e565b600160fd1b6001600160f81b03198216108015906126dd5750603f60f91b6001600160f81b0319821611155b156126f75750600199505f975061271d9650505050505050565b505b845185612705826140e6565b905250611f81565b50505050602001515f9550925050505b9250925092565b6060835f6127328585614130565b67ffffffffffffffff81111561274a5761274a613747565b6040519080825280601f01601f191660200182016040528015612774576020820181803683370190505b509050845b848110156127e55782818151811061279357612793613d01565b01602001516001600160f81b031916826127ad8884614130565b815181106127bd576127bd613d01565b60200101906001600160f81b03191690815f1a905350806127dd816140e6565b915050612779565b509150505b9392505050565b5f80829050602781511015801561280a5750602a815111155b6128475760405162461bcd60e51b815260206004820152600e60248201526d4e6f742068657820737472696e6760901b60448201526064016101a6565b5f808260018151811061285c5761285c613d01565b6020910101516001600160f81b031916600f60fb1b14806128a257508260018151811061288b5761288b613d01565b6020910101516001600160f81b031916600b60fb1b145b156128ac57600291505b5f808385516128bb9190614130565b905080602703612916576128f985856128d3816140e6565b9650815181106128e5576128e5613d01565b01602001516001600160f81b031916613626565b6129069060ff1683614158565b915082612912816140e6565b9350505b825b60148110156129b2576008836001600160a01b0316901b92505f6129478787815181106128e5576128e5613d01565b90505f61296988612959896001613cee565b815181106128e5576128e5613d01565b90505f61297e82610ff0600486901b1661417f565b905061298d60ff821687614158565b955061299a600289613cee565b975050505080806129aa906140e6565b915050612918565b50909695505050505050565b5f82818080805b8451811015612aec5780158015612a0057508481815181106129e9576129e9613d01565b6020910101516001600160f81b031916602d60f81b145b15612a0a57600191505b6030858281518110612a1e57612a1e613d01565b016020015160f81c10801590612a4e57506039858281518110612a4357612a43613d01565b016020015160f81c11155b15612ab4578215612a6d578615612aec5786612a6981614143565b9750505b612a78600a85614198565b93506030858281518110612a8e57612a8e613d01565b0160200151612aa0919060f81c6141c7565b612aad9060ff16856141e0565b9350612ada565b848181518110612ac657612ac6613d01565b016020015160f81c602e03612ada57600192505b80612ae4816140e6565b9150506129c5565b508515612b0b57612afe86600a6142e7565b612b089084614198565b92505b8015612b1f57612b1c5f1984614198565b92505b509095945050505050565b5f600185604051612b3b919061372c565b90815260408051602092819003830190206001600160a01b0387165f9081529252902054905081811015612bbb5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e742062616c616e636520666f72207472616e7366656044820152603960f91b60648201526084016101a6565b818103600186604051612bce919061372c565b9081526040805191829003602090810183206001600160a01b0389165f90815291522091909155600190612c0390879061372c565b90815260408051602092819003830190206001600160a01b0387165f90815292528120549003612c64576001600586604051612c3f919061372c565b90815260200160405180910390206006015f828254612c5e9190614130565b90915550505b600185604051612c74919061372c565b90815260408051602092819003830190206001600160a01b0386165f9081529252902054158015612ca457505f82115b15612ce0576001600586604051612cbb919061372c565b90815260200160405180910390206006015f828254612cda9190613cee565b90915550505b81600186604051612cf1919061372c565b90815260200160405180910390205f856001600160a01b03166001600160a01b031681526020019081526020015f205f828254612d2e9190613cee565b90915550505050505050565b60605f60405180606001604052806022815260200161435d60229139604080518082018252600981526811161130b6ba111d1160b91b602080830191909152825180840184526002815261227d60f01b8183015292519394509092612da9918591899186918a918791016142f2565b604051602081830303815290604052935050505092915050565b66470de4df820000341015612e1a5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74206465706c6f796d656e7420666565000000000060448201526064016101a6565b5f600587604051612e2b919061372c565b90815260405190819003602001902060048101549091506001600160a01b031615612e8f5760405162461bcd60e51b8152602060048201526014602482015273546f6b656e20616c72656164792065786973747360601b60448201526064016101a6565b80612e9a8882613d62565b5060018101869055600281018590556004810180546001600160a01b0319163317905542600582015560078082018590556008820184905560098201839055612ee69080546001019055565b600680546001810182555f919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01612f218882613d62565b505f54612f37906001600160a01b031634611ea3565b8115612fb35781600188604051612f4e919061372c565b9081526040805160209281900383019020335f908152925281208054909190612f78908490613cee565b9250508190555081816003015f828254612f929190613cee565b925050819055506001816006015f828254612fad9190613cee565b90915550505b50505050505050565b5f611e9d825f6129be565b80600485604051612fd8919061372c565b90815260408051602092819003830190206001600160a01b039687165f90815290835281812095909616865293905291909220555050565b6001600485604051613022919061372c565b90815260408051602092819003830190206001600160a01b0387165f90815290835281812033825290925290205410156130975760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b60448201526064016101a6565b6130a384848484612b2a565b50505050565b6130ca60405180606001604052805f81526020015f81526020015f81525090565b60605f60405180606001604052805f81526020015f81526020015f1981525090505f8467ffffffffffffffff81111561310557613105613747565b60405190808252806020026020018201604052801561313e57816020015b61312b6136d5565b8152602001906001900390816131235790505b5091959194509092505050565b5f6131546136d5565b8251846020015110613191575f83600185516131709190614130565b8151811061318057613180613d01565b6020026020010151915091506131ff565b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a08201529085015184518291869181106131d8576131d8613d01565b60200260200101819052508460200180518091906131f5906140e6565b9052506001925090505b9250929050565b82515f90816132136136d5565b86518761321f826140e6565b9052505b845187511015613490575f85885f01518151811061324357613243613d01565b01602001516001600160f81b0319169050601160f91b8190036132a55761326a888861314b565b9093509150826132815750505084525060036127ea565b613299826003613292876001613cee565b8b51613684565b5f9450505050506127ea565b605c60f882901c1480156132c55750855188516132c3906001613cee565b105b1561347a578751886132d6826140e6565b9052508751865187919081106132ee576132ee613d01565b6020910101516001600160f81b031916601160f91b1480613336575085885f01518151811061331f5761331f613d01565b6020910101516001600160f81b031916602f60f81b145b80613368575085885f01518151811061335157613351613d01565b6020910101516001600160f81b031916601760fa1b145b8061339a575085885f01518151811061338357613383613d01565b6020910101516001600160f81b031916603360f91b145b806133cc575085885f0151815181106133b5576133b5613d01565b6020910101516001600160f81b031916603960f91b145b806133fe575085885f0151815181106133e7576133e7613d01565b6020910101516001600160f81b031916603760f91b145b80613430575085885f01518151811061341957613419613d01565b6020910101516001600160f81b031916603160f91b145b80613462575085885f01518151811061344b5761344b613d01565b6020910101516001600160f81b031916601d60fa1b145b1561346d575061347c565b50505084525060016127ea565b505b865187613488826140e6565b905250613223565b505084525060029392505050565b82515f90819081806134ae6136d5565b8651895110156135c25786895f0151815181106134cd576134cd613d01565b01602001516001600160f81b0319169250600160fd1b8314806134fd5750600960f81b6001600160f81b03198416145b806135155750600560f91b6001600160f81b03198416145b8061352d5750600d60f81b6001600160f81b03198416145b806135455750600b60fa1b6001600160f81b03198416145b8061355d5750607d60f81b6001600160f81b03198416145b806135755750605d60f81b6001600160f81b03198416145b1561358357600194506135c2565b602060f884901c108061359a5750607f60f884901c115b156135ae57505050855250600190506127ea565b8851896135ba826140e6565b9052506134ae565b846135d657505050855250600290506127ea565b6135e0898961314b565b9092509050816135f957505050855250600390506127ea565b613609816004868c5f0151613684565b88518961361582614143565b9052505f9998505050505050505050565b5f60f882901c60308110801590613641575060398160ff1611155b15613651576127ea6030826141c7565b60418160ff1610158015613669575060468160ff1611155b15613679576127ea6037826141c7565b6127ea6057826141c7565b838360048111156136975761369761411c565b908160048111156136aa576136aa61411c565b905250602084019190915260016040840181905260608401919091526080830152505f60a090910152565b6040805160c08101909152805f81525f6020820181905260408201819052606082018190526080820181905260a09091015290565b5f5b8381101561372457818101518382015260200161370c565b50505f910152565b5f825161373d81846020870161370a565b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261376a575f80fd5b813567ffffffffffffffff8082111561378557613785613747565b604051601f8301601f19908116603f011681019082821181831017156137ad576137ad613747565b816040528381528660208588010111156137c5575f80fd5b836020870160208301375f602085830101528094505050505092915050565b6001600160a01b03811681146137f8575f80fd5b50565b5f806040838503121561380c575f80fd5b823567ffffffffffffffff811115613822575f80fd5b61382e8582860161375b565b925050602083013561383f816137e4565b809150509250929050565b5f6020828403121561385a575f80fd5b5035919050565b5f815180845261387881602086016020860161370a565b601f01601f19169290920160200192915050565b602081525f611e9a6020830184613861565b5f805f606084860312156138b0575f80fd5b83356138bb816137e4565b925060208401356138cb816137e4565b929592945050506040919091013590565b5f80604083850312156138ed575f80fd5b82356138f8816137e4565b946020939093013593505050565b5f805f60608486031215613918575f80fd5b833567ffffffffffffffff8082111561392f575f80fd5b61393b8783880161375b565b94506020860135915080821115613950575f80fd5b61395c8783880161375b565b93506040860135915080821115613971575f80fd5b5061397e8682870161375b565b9150509250925092565b604081525f61399a6040830185613861565b82810360208401526139ac8185613861565b95945050505050565b5f805f606084860312156139c7575f80fd5b833567ffffffffffffffff8111156139dd575f80fd5b6139e98682870161375b565b93505060208401356139fa816137e4565b91506040840135613a0a816137e4565b809150509250925092565b5f805f805f8060c08789031215613a2a575f80fd5b863567ffffffffffffffff80821115613a41575f80fd5b613a4d8a838b0161375b565b97506020890135915080821115613a62575f80fd5b613a6e8a838b0161375b565b96506040890135915080821115613a83575f80fd5b613a8f8a838b0161375b565b95506060890135915080821115613aa4575f80fd5b613ab08a838b0161375b565b94506080890135915080821115613ac5575f80fd5b613ad18a838b0161375b565b935060a0890135915080821115613ae6575f80fd5b50613af389828a0161375b565b9150509295509295509295565b5f60208284031215613b10575f80fd5b813567ffffffffffffffff811115613b26575f80fd5b613b328482850161375b565b949350505050565b5f610140808352613b4d8184018e613861565b602084019c909c525050604081019890985260608801969096526001600160a01b0394909416608087015260a086019290925260c085015260e084015261010083015261012090910152919050565b5f8060408385031215613bad575f80fd5b823567ffffffffffffffff80821115613bc4575f80fd5b613bd08683870161375b565b93506020850135915080821115613be5575f80fd5b50613bf28582860161375b565b9150509250929050565b5f805f8060808587031215613c0f575f80fd5b843567ffffffffffffffff80821115613c26575f80fd5b613c328883890161375b565b95506020870135915080821115613c47575f80fd5b613c538883890161375b565b94506040870135915080821115613c68575f80fd5b613c748883890161375b565b93506060870135915080821115613c89575f80fd5b50613c968782880161375b565b91505092959194509250565b600181811c90821680613cb657607f821691505b602082108103613cd457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611e9d57611e9d613cda565b634e487b7160e01b5f52603260045260245ffd5b601f8211156107cf575f81815260208120601f850160051c81016020861015613d3b5750805b601f850160051c820191505b81811015613d5a57828155600101613d47565b505050505050565b815167ffffffffffffffff811115613d7c57613d7c613747565b613d9081613d8a8454613ca2565b84613d15565b602080601f831160018114613dc3575f8415613dac5750858301515b5f19600386901b1c1916600185901b178555613d5a565b5f85815260208120601f198616915b82811015613df157888601518255948401946001909101908401613dd2565b5085821015613e0e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215613e2e575f80fd5b815180151581146127ea575f80fd5b5f88516020613e4f8285838e0161370a565b895191840191613e628184848e0161370a565b8951920191613e748184848d0161370a565b8851920191613e868184848c0161370a565b8751920191613e988184848b0161370a565b8651920191613eaa8184848a0161370a565b8551920191613ebc818484890161370a565b919091019a9950505050505050505050565b5f89516020613ee08285838f0161370a565b8a5191840191613ef38184848f0161370a565b8a51920191613f058184848e0161370a565b8951920191613f178184848d0161370a565b8851920191613f298184848c0161370a565b8751920191613f3b8184848b0161370a565b8651920191613f4d8184848a0161370a565b8551920191613f5f818484890161370a565b919091019b9a5050505050505050505050565b5f87516020613f848285838d0161370a565b885191840191613f978184848d0161370a565b8851920191613fa98184848c0161370a565b8751920191613fbb8184848b0161370a565b8651920191613fcd8184848a0161370a565b8551920191613fdf818484890161370a565b919091019998505050505050505050565b5f8a51614001818460208f0161370a565b8a516140138183860160208f0161370a565b8a519184010190614028818360208e0161370a565b895161403a8183850160208e0161370a565b8951929091010190614050818360208c0161370a565b87516140628183850160208c0161370a565b8751929091010190614078818360208a0161370a565b855161408a8183850160208a0161370a565b85519290910101906140a081836020880161370a565b019b9a5050505050505050505050565b8082028115828204841417611e9d57611e9d613cda565b5f826140e157634e487b7160e01b5f52601260045260245ffd5b500490565b5f600182016140f7576140f7613cda565b5060010190565b5f60ff821660ff810361411357614113613cda565b60010192915050565b634e487b7160e01b5f52602160045260245ffd5b81810381811115611e9d57611e9d613cda565b5f8161415157614151613cda565b505f190190565b6001600160a01b0381811683821601908082111561417857614178613cda565b5092915050565b60ff8181168382160190811115611e9d57611e9d613cda565b8082025f8212600160ff1b841416156141b3576141b3613cda565b8181058314821517611e9d57611e9d613cda565b60ff8281168282160390811115611e9d57611e9d613cda565b8082018281125f8312801582168215821617156141ff576141ff613cda565b505092915050565b600181815b8085111561424157815f190482111561422757614227613cda565b8085161561423457918102915b93841c939080029061420c565b509250929050565b5f8261425757506001611e9d565b8161426357505f611e9d565b816001811461427957600281146142835761429f565b6001915050611e9d565b60ff84111561429457614294613cda565b50506001821b611e9d565b5060208310610133831016604e8410600b84101617156142c2575081810a611e9d565b6142cc8383614207565b805f19048211156142df576142df613cda565b029392505050565b5f611e9a8383614249565b5f8651614303818460208b0161370a565b865190830190614317818360208b0161370a565b865191019061432a818360208a0161370a565b855191019061433d81836020890161370a565b845191019061435081836020880161370a565b0197965050505050505056fe7b2270223a226572632d3230222c226f70223a226d696e74222c227469636b223a227b2270223a226572632d3230222c226f70223a227472616e7366657246726f6d222c227469636b223a227b2270223a226572632d3230222c226f70223a226465706c6f79222c227469636b223a227b2270223a226572632d3230222c226f70223a22617070726f7665222c227469636b223a227b2270223a226572632d3230222c226f70223a227472616e73666572222c227469636b223a22a26469706673582212202514d7d118e1eba90983b9f9186ef581a9ba36c8e0c56b47f6eb90257980b11864736f6c63430008140033
Deployed Bytecode
0x6080604052600436106100e0575f3560e01c80638892ebce1161007e578063c6f487fd11610058578063c6f487fd146103c7578063d676260f146103fc578063f7218c141461041b578063faa6423b1461043a576100e7565b80638892ebce1461032c5780638da5cb5b14610372578063b6603cc7146103a8576100e7565b80634782f779116100ba5780634782f7791461027e578063624a59331461029d5780637ef53091146102ca5780638289573c14610316576100e7565b806306f69c32146101d8578063310495ab1461023157806344004cc11461025d576100e7565b366100e757005b5f3660605f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604051949550936101369350859250602001905061372c565b60408051601f1981840301815291815281516020928301205f818152600390935291206001015490915060ff16156101bd573332146101af5760405162461bcd60e51b815260206004820152601060248201526f13db9b1e481153d048185b1b1bddd95960821b60448201526064015b60405180910390fd5b6101b881610459565b6101c6565b6101c6826107d4565b505060408051602081019091525f9052005b3480156101e3575f80fd5b5061021e6101f23660046137fb565b81516020818401810180516002825292820194820194909420919093529091525f908152604090205481565b6040519081526020015b60405180910390f35b34801561023c575f80fd5b5061025061024b36600461384a565b61174b565b604051610228919061388c565b348015610268575f80fd5b5061027c61027736600461389e565b6117f1565b005b348015610289575f80fd5b5061027c6102983660046138dc565b611959565b3480156102a8575f80fd5b506102bc6102b7366004613906565b6119e5565b604051610228929190613988565b3480156102d5575f80fd5b5061021e6102e43660046139b5565b825160208185018101805160048252928201958201959095209190945283525f91825260408083209093528152205481565b348015610321575f80fd5b5060075461021e9081565b348015610337575f80fd5b5061021e6103463660046137fb565b81516020818401810180516001825292820194820194909420919093529091525f908152604090205481565b34801561037d575f80fd5b505f54610390906001600160a01b031681565b6040516001600160a01b039091168152602001610228565b3480156103b3575f80fd5b506102bc6103c2366004613a15565b611a97565b3480156103d2575f80fd5b506103e66103e1366004613b00565b611bfd565b6040516102289a99989796959493929190613b3a565b348015610407575f80fd5b506102bc610416366004613906565b611ce9565b348015610426575f80fd5b506102bc610435366004613b9c565b611d7c565b348015610445575f80fd5b506102bc610454366004613bfc565b611d93565b5f818152600360205260408120805461047190613ca2565b80601f016020809104026020016040519081016040528092919081815260200182805461049d90613ca2565b80156104e85780601f106104bf576101008083540402835291602001916104e8565b820191905f5260205f20905b8154815290600101906020018083116104cb57829003601f168201915b505050505090505f600582604051610500919061372c565b908152602001604051809103902090508060080154341461055a5760405162461bcd60e51b8152602060048201526014602482015273496e636f7272656374206d696e7420707269636560601b60448201526064016101a6565b6007810154156105f1578060070154816002015460028460405161057e919061372c565b9081526040805160209281900383019020335f90815292529020546105a39190613cee565b11156105f15760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d6178206d696e742070657220616464726573730000000060448201526064016101a6565b80600101548160020154826003015461060a9190613cee565b11156106585760405162461bcd60e51b815260206004820152601860248201527f4578636565647320617661696c61626c6520737570706c79000000000000000060448201526064016101a6565b8060020154816003015f82825461066f9190613cee565b90915550506001810154600382015411156106bf5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d1a5b99c8199a5b9a5cda195960821b60448201526064016101a6565b6001826040516106cf919061372c565b9081526040805160209281900383019020335f9081529252812054900361070a576001816006015f8282546107049190613cee565b90915550505b806002015460028360405161071f919061372c565b9081526040805160209281900383019020335f908152925281208054909190610749908490613cee565b9091555050600281015460405160019061076490859061372c565b9081526040805160209281900383019020335f90815292528120805490919061078e908490613cee565b90915550505f546107b2906001600160a01b03166107ad34600a611e83565b611ea3565b60048101546107cf906001600160a01b03166107ad34605a611e83565b505050565b5f60606107e2836011611f38565b509092509050811561082c5760405162461bcd60e51b81526020600482015260136024820152721294d3d3881c185c9cda5b99c819985a5b1959606a1b60448201526064016101a6565b5f610874848360018151811061084457610844613d01565b6020026020010151602001518460018151811061086357610863613d01565b602002602001015160600151612724565b90505f6108ad858460028151811061088e5761088e613d01565b6020026020010151602001518560028151811061086357610863613d01565b90505f6108e686856003815181106108c7576108c7613d01565b6020026020010151602001518660038151811061086357610863613d01565b90505f61091f878660058151811061090057610900613d01565b6020026020010151602001518760058151811061086357610863613d01565b604051600760fc1b60208201529091506021016040516020818303038152906040528051906020012084604051602001610959919061372c565b604051602081830303815290604052805190602001201480156109cb57506040516506572632d32360d41b602082015260260160405160208183030381529060405280519060200120836040516020016109b3919061372c565b60405160208183030381529060405280519060200120145b8015610a2257506040516106f760f41b60208201526022016040516020818303038152906040528051906020012082604051602001610a0a919061372c565b60405160208183030381529060405280519060200120145b8015610a7b5750604051637469636b60e01b60208201526024016040516020818303038152906040528051906020012081604051602001610a63919061372c565b60405160208183030381529060405280519060200120145b610ac75760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204552432d323020706172616d65746572730000000000000060448201526064016101a6565b505050505f610b028483600481518110610ae357610ae3613d01565b6020026020010151602001518460048151811061086357610863613d01565b90505f610b3b8584600681518110610b1c57610b1c613d01565b6020026020010151602001518560068151811061086357610863613d01565b604051673a3930b739b332b960c11b60208201529091506028016040516020818303038152906040528051906020012082604051602001610b7c919061372c565b6040516020818303038152906040528051906020012003610d96575f610bce8685600781518110610baf57610baf613d01565b6020026020010151602001518660078151811061086357610863613d01565b90505f610c078786600981518110610be857610be8613d01565b6020026020010151602001518760098151811061086357610863613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012081604051602001610c42919061372c565b60405160208183030381529060405280519060200120148015610cb1575060405162185b5d60ea1b60208201526023016040516020818303038152906040528051906020012082604051602001610c99919061372c565b60405160208183030381529060405280519060200120145b610cfd5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964207472616e7366657220706172616d6574657273000000000060448201526064016101a6565b5f610d348887600881518110610d1557610d15613d01565b6020026020010151602001518860088151811061086357610863613d01565b90505f610d6d8988600a81518110610d4e57610d4e613d01565b60200260200101516020015189600a8151811061086357610863613d01565b9050610d8d8533610d7d846127f1565b610d888660126129be565b612b2a565b50505050611744565b604051656465706c6f7960d01b60208201526026016040516020818303038152906040528051906020012082604051602001610dd2919061372c565b60405160208183030381529060405280519060200120036112a4575f610e058685600781518110610baf57610baf613d01565b90505f610e1f8786600981518110610be857610be8613d01565b90505f610e588887600b81518110610e3957610e39613d01565b60200260200101516020015188600b8151811061086357610863613d01565b90505f610e918988600d81518110610e7257610e72613d01565b60200260200101516020015189600d8151811061086357610863613d01565b90505f610eca8a89600f81518110610eab57610eab613d01565b6020026020010151602001518a600f8151811061086357610863613d01565b604051620dac2f60eb1b60208201529091506023016040516020818303038152906040528051906020012085604051602001610f06919061372c565b60405160208183030381529060405280519060200120148015610f755750604051626c696d60e81b60208201526023016040516020818303038152906040528051906020012084604051602001610f5d919061372c565b60405160208183030381529060405280519060200120145b8015610fd15750604051661b585e135a5b9d60ca1b60208201526027016040516020818303038152906040528051906020012083604051602001610fb9919061372c565b60405160208183030381529060405280519060200120145b801561102f5750604051686d696e74507269636560b81b60208201526029016040516020818303038152906040528051906020012082604051602001611017919061372c565b60405160208183030381529060405280519060200120145b801561108b5750604051667265736572766560c81b60208201526027016040516020818303038152906040528051906020012081604051602001611073919061372c565b60405160208183030381529060405280519060200120145b6110d75760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206465706c6f796d656e7420706172616d657465727300000060448201526064016101a6565b5f61110e8b8a6008815181106110ef576110ef613d01565b6020026020010151602001518b60088151811061086357610863613d01565b90505f6111478c8b600a8151811061112857611128613d01565b6020026020010151602001518c600a8151811061086357610863613d01565b90505f6111808d8c600c8151811061116157611161613d01565b6020026020010151602001518d600c8151811061086357610863613d01565b90505f6111b98e8d600e8151811061119a5761119a613d01565b6020026020010151602001518e600e8151811061086357610863613d01565b90505f6111f28f8e6010815181106111d3576111d3613d01565b6020026020010151602001518f60108151811061086357610863613d01565b90505f60035f6112028e88612d3a565b604051602001611212919061372c565b60408051601f198184030181529181528151602092830120835290820192909252015f206001808201805460ff191690911790559050806112538d82613d62565b506112948c6112638860126129be565b61126e8860126129be565b6112798860126129be565b6112848860126129be565b61128f8860126129be565b612dc3565b5050505050505050505050611744565b60405166617070726f766560c81b602082015260270160405160208183030381529060405280519060200120826040516020016112e1919061372c565b6040516020818303038152906040528051906020012003611474575f6113148685600781518110610baf57610baf613d01565b90505f61132e8786600981518110610be857610be8613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012081604051602001611369919061372c565b604051602081830303815290604052805190602001201480156113d8575060405162185b5d60ea1b602082015260230160405160208183030381529060405280519060200120826040516020016113c0919061372c565b60405160208183030381529060405280519060200120145b6114245760405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420617070726f76616c20706172616d6574657273000000000060448201526064016101a6565b5f61143c8887600881518110610d1557610d15613d01565b90505f6114568988600a81518110610d4e57610d4e613d01565b9050610d8d8533611466846127f1565b61146f86612fbc565b612fc7565b6040516b7472616e7366657246726f6d60a01b6020820152602c0160405160208183030381529060405280519060200120826040516020016114b6919061372c565b6040516020818303038152906040528051906020012003611744575f6114e98685600781518110610baf57610baf613d01565b90505f6115038786600981518110610be857610be8613d01565b90505f61151d8887600b81518110610e3957610e39613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012082604051602001611558919061372c565b604051602081830303815290604052805190602001201480156115c7575060405162185b5d60ea1b602082015260230160405160208183030381529060405280519060200120836040516020016115af919061372c565b60405160208183030381529060405280519060200120145b801561162057506040516366726f6d60e01b60208201526024016040516020818303038152906040528051906020012081604051602001611608919061372c565b60405160208183030381529060405280519060200120145b61166c5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964207472616e7366657246726f6d20706172616d65746572730060448201526064016101a6565b5f6116a3898860088151811061168457611684613d01565b6020026020010151602001518960088151811061086357610863613d01565b90505f6116dc8a89600a815181106116bd576116bd613d01565b6020026020010151602001518a600a8151811061086357610863613d01565b90505f6117158b8a600c815181106116f6576116f6613d01565b6020026020010151602001518b600c8151811061086357610863613d01565b905061173d87611724836127f1565b61172d856127f1565b6117388760126129be565b613010565b5050505050505b5050505050565b6006818154811061175a575f80fd5b905f5260205f20015f91509050805461177290613ca2565b80601f016020809104026020016040519081016040528092919081815260200182805461179e90613ca2565b80156117e95780601f106117c0576101008083540402835291602001916117e9565b820191905f5260205f20905b8154815290600101906020018083116117cc57829003601f168201915b505050505081565b5f546001600160a01b0316331461184a5760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f742074686520636f6e7472616374206f776e657260448201526064016101a6565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392908716916118a5919061372c565b5f604051808303815f865af19150503d805f81146118de576040519150601f19603f3d011682016040523d82523d5f602084013e6118e3565b606091505b509150915081801561190d57508051158061190d57508080602001905181019061190d9190613e1e565b6117445760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016101a6565b5f546001600160a01b031633146119b25760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f742074686520636f6e7472616374206f776e657260448201526064016101a6565b6040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156107cf573d5f803e3d5ffd5b6060805f6040518060600160405280602581526020016143cd6025913960408051808201825260098082526811161130b6ba111d1160b91b6020808401919091528351808501855291825268111610113a37911d1160b91b82820152835180850185526002815261227d60f01b8183015293519495509193909291611a789186918c9187918c9188918f91899101613e3d565b60408051601f19818403018152919052998a9950975050505050505050565b6060805f604051806040016040528060098152602001681116113634b6911d1160b91b81525090505f6040518060400160405280600d81526020016c11161136b0bc26b4b73a111d1160991b81525090505f6040518060400160405280600f81526020016e11161136b4b73a283934b1b2911d1160891b81525090505f6040518060400160405280600d81526020016c1116113932b9b2b93b32911d1160991b81525090505f60405180604001604052806002815260200161227d60f01b81525090505f8b858c868d878e88604051602001611b7a989796959493929190613ece565b60408051601f198184030181526060830190915260248083529092506143a960208301398e6040518060400160405280600981526020016811161136b0bc111d1160b91b8152508f8985604051602001611bd996959493929190613f72565b60408051601f198184030181529190529e8f9e509c50505050505050505050505050565b8051602081830181018051600582529282019190930120915280548190611c2390613ca2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4f90613ca2565b8015611c9a5780601f10611c7157610100808354040283529160200191611c9a565b820191905f5260205f20905b815481529060010190602001808311611c7d57829003601f168201915b50505060018401546002850154600386015460048701546005880154600689015460078a015460088b01546009909b0154999a96999598509396506001600160a01b039092169490939192918a565b6060805f6040518060600160405280602681526020016143f26026913960408051808201825260098082526811161130b6ba111d1160b91b6020808401919091528351808501855291825268111610113a37911d1160b91b82820152835180850185526002815261227d60f01b8183015293519495509193909291611a789186918c9187918c9188918f91899101613e3d565b606080611d898484612d3a565b9485945092505050565b6060805f6040518060600160405280602a815260200161437f602a913990505f6040518060400160405280600981526020016811161130b6ba111d1160b91b81525090505f60405180604001604052806009815260200168111610113a37911d1160b91b81525090505f6040518060400160405280600b81526020016a11161011333937b6911d1160a91b81525090505f60405180604001604052806002815260200161227d60f01b8152509050848b858b868e878e88604051602001611e6299989796959493929190613ff0565b60408051601f198184030181529190529b8c9b509950505050505050505050565b5f6064611e9083856140b0565b611e9a91906140c7565b90505b92915050565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611eec576040519150601f19603f3d011682016040523d82523d5f602084013e611ef1565b606091505b50509050806107cf5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016101a6565b5f60605f808590505f611f6260405180606001604052805f81526020015f81526020015f81525090565b611f6b876130a9565b60208201519096509091505f9081611f816136d5565b86518551101561270d575f87865f015181518110611fa157611fa1613d01565b01602001516001600160f81b0319169050607b60f81b811480611fd15750605b60f81b6001600160f81b03198216145b156120c35783611fe0816140e6565b945050611fed868b61314b565b90975091508661200c5750600399505f975061271d9650505050505050565b85604001515f191461204e578986604001518151811061202e5761202e613d01565b602002602001015160a0018051809190612047906140fe565b60ff169052505b607b60f81b6001600160f81b031982161461206a57600261206d565b60015b829060048111156120805761208061411c565b908160048111156120935761209361411c565b9052508551602080840191909152600160408401819052908701516120b89190614130565b6040870152506126f9565b607d60f81b6001600160f81b0319821614806120ec5750605d60f81b6001600160f81b03198216145b156122d7575f607d60f81b6001600160f81b031983161461210e576002612111565b60015b90505f600188602001516121259190614130565b94505b8b858151811061213a5761213a613d01565b602002602001015193508360400151801561215757508360800151155b156122035781600481111561216e5761216e61411c565b845160048111156121815761218161411c565b1461219d575060019b505f995061271d98505050505050505050565b5f19604089015287516121b1906001613cee565b8c86815181106121c3576121c3613d01565b6020026020010151606001818152505060018c86815181106121e7576121e7613d01565b6020908102919091010151901515608090910152506001612215565b8461220d81614143565b955050612128565b80612231575060019b505f995061271d98505050505050505050565b8415612289578b858151811061224957612249613d01565b602002602001015193508360400151801561226657508360800151155b156122775760408801859052612289565b8461228181614143565b955050612231565b845f036122cf578b85815181106122a2576122a2613d01565b60200260200101519350836040015180156122bf57508360800151155b156122cf57600f85900b60408901525b5050506126f9565b6001600160f81b03198116601160f91b03612367576122f7868b8a613206565b9450841561231257509298505f965061271d95505050505050565b8361231c816140e6565b94505085604001515f1914612361578986604001518151811061234157612341613d01565b602002602001015160a001805180919061235a906140fe565b60ff169052505b506126f9565b600160fd1b6001600160f81b0319821614806123905750601160f81b6001600160f81b03198216145b806123a85750600960f91b6001600160f81b03198216145b806123c05750600560fa1b6001600160f81b03198216145b156123cb57506126f9565b6001600160f81b03198116601d60f91b036123f157600186602001516120b89190614130565b6001600160f81b03198116600b60fa1b0361257a5785604001515f191415801561244d575060028a87604001518151811061242e5761242e613d01565b60200260200101515f0151600481111561244a5761244a61411c565b14155b801561248b575060018a87604001518151811061246c5761246c613d01565b60200260200101515f015160048111156124885761248861411c565b14155b1561236157600186602001516124a19190614130565b92505b60028a84815181106124b8576124b8613d01565b60200260200101515f015160048111156124d4576124d461411c565b148061250d575060018a84815181106124ef576124ef613d01565b60200260200101515f0151600481111561250b5761250b61411c565b145b156125685789838151811061252457612524613d01565b6020026020010151604001518015612557575089838151811061254957612549613d01565b602002602001015160800151155b156125685760408601839052612361565b8261257281614143565b9350506124a4565b600360fc1b6001600160f81b03198216108015906125a65750603960f81b6001600160f81b0319821611155b806125be5750602d60f81b6001600160f81b03198216145b806125d65750603360f91b6001600160f81b03198216145b806125ee5750601d60fa1b6001600160f81b03198216145b806126065750603760f91b6001600160f81b03198216145b156126b15785604001515f19146126a6578986604001518151811061262d5761262d613d01565b602002602001015191506001600481111561264a5761264a61411c565b8251600481111561265d5761265d61411c565b148061268c57506003825160048111156126795761267961411c565b14801561268c575060a082015160ff1615155b156126a65750600199505f975061271d9650505050505050565b6122f7868b8a61349e565b600160fd1b6001600160f81b03198216108015906126dd5750603f60f91b6001600160f81b0319821611155b156126f75750600199505f975061271d9650505050505050565b505b845185612705826140e6565b905250611f81565b50505050602001515f9550925050505b9250925092565b6060835f6127328585614130565b67ffffffffffffffff81111561274a5761274a613747565b6040519080825280601f01601f191660200182016040528015612774576020820181803683370190505b509050845b848110156127e55782818151811061279357612793613d01565b01602001516001600160f81b031916826127ad8884614130565b815181106127bd576127bd613d01565b60200101906001600160f81b03191690815f1a905350806127dd816140e6565b915050612779565b509150505b9392505050565b5f80829050602781511015801561280a5750602a815111155b6128475760405162461bcd60e51b815260206004820152600e60248201526d4e6f742068657820737472696e6760901b60448201526064016101a6565b5f808260018151811061285c5761285c613d01565b6020910101516001600160f81b031916600f60fb1b14806128a257508260018151811061288b5761288b613d01565b6020910101516001600160f81b031916600b60fb1b145b156128ac57600291505b5f808385516128bb9190614130565b905080602703612916576128f985856128d3816140e6565b9650815181106128e5576128e5613d01565b01602001516001600160f81b031916613626565b6129069060ff1683614158565b915082612912816140e6565b9350505b825b60148110156129b2576008836001600160a01b0316901b92505f6129478787815181106128e5576128e5613d01565b90505f61296988612959896001613cee565b815181106128e5576128e5613d01565b90505f61297e82610ff0600486901b1661417f565b905061298d60ff821687614158565b955061299a600289613cee565b975050505080806129aa906140e6565b915050612918565b50909695505050505050565b5f82818080805b8451811015612aec5780158015612a0057508481815181106129e9576129e9613d01565b6020910101516001600160f81b031916602d60f81b145b15612a0a57600191505b6030858281518110612a1e57612a1e613d01565b016020015160f81c10801590612a4e57506039858281518110612a4357612a43613d01565b016020015160f81c11155b15612ab4578215612a6d578615612aec5786612a6981614143565b9750505b612a78600a85614198565b93506030858281518110612a8e57612a8e613d01565b0160200151612aa0919060f81c6141c7565b612aad9060ff16856141e0565b9350612ada565b848181518110612ac657612ac6613d01565b016020015160f81c602e03612ada57600192505b80612ae4816140e6565b9150506129c5565b508515612b0b57612afe86600a6142e7565b612b089084614198565b92505b8015612b1f57612b1c5f1984614198565b92505b509095945050505050565b5f600185604051612b3b919061372c565b90815260408051602092819003830190206001600160a01b0387165f9081529252902054905081811015612bbb5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e742062616c616e636520666f72207472616e7366656044820152603960f91b60648201526084016101a6565b818103600186604051612bce919061372c565b9081526040805191829003602090810183206001600160a01b0389165f90815291522091909155600190612c0390879061372c565b90815260408051602092819003830190206001600160a01b0387165f90815292528120549003612c64576001600586604051612c3f919061372c565b90815260200160405180910390206006015f828254612c5e9190614130565b90915550505b600185604051612c74919061372c565b90815260408051602092819003830190206001600160a01b0386165f9081529252902054158015612ca457505f82115b15612ce0576001600586604051612cbb919061372c565b90815260200160405180910390206006015f828254612cda9190613cee565b90915550505b81600186604051612cf1919061372c565b90815260200160405180910390205f856001600160a01b03166001600160a01b031681526020019081526020015f205f828254612d2e9190613cee565b90915550505050505050565b60605f60405180606001604052806022815260200161435d60229139604080518082018252600981526811161130b6ba111d1160b91b602080830191909152825180840184526002815261227d60f01b8183015292519394509092612da9918591899186918a918791016142f2565b604051602081830303815290604052935050505092915050565b66470de4df820000341015612e1a5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74206465706c6f796d656e7420666565000000000060448201526064016101a6565b5f600587604051612e2b919061372c565b90815260405190819003602001902060048101549091506001600160a01b031615612e8f5760405162461bcd60e51b8152602060048201526014602482015273546f6b656e20616c72656164792065786973747360601b60448201526064016101a6565b80612e9a8882613d62565b5060018101869055600281018590556004810180546001600160a01b0319163317905542600582015560078082018590556008820184905560098201839055612ee69080546001019055565b600680546001810182555f919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01612f218882613d62565b505f54612f37906001600160a01b031634611ea3565b8115612fb35781600188604051612f4e919061372c565b9081526040805160209281900383019020335f908152925281208054909190612f78908490613cee565b9250508190555081816003015f828254612f929190613cee565b925050819055506001816006015f828254612fad9190613cee565b90915550505b50505050505050565b5f611e9d825f6129be565b80600485604051612fd8919061372c565b90815260408051602092819003830190206001600160a01b039687165f90815290835281812095909616865293905291909220555050565b6001600485604051613022919061372c565b90815260408051602092819003830190206001600160a01b0387165f90815290835281812033825290925290205410156130975760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b60448201526064016101a6565b6130a384848484612b2a565b50505050565b6130ca60405180606001604052805f81526020015f81526020015f81525090565b60605f60405180606001604052805f81526020015f81526020015f1981525090505f8467ffffffffffffffff81111561310557613105613747565b60405190808252806020026020018201604052801561313e57816020015b61312b6136d5565b8152602001906001900390816131235790505b5091959194509092505050565b5f6131546136d5565b8251846020015110613191575f83600185516131709190614130565b8151811061318057613180613d01565b6020026020010151915091506131ff565b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a08201529085015184518291869181106131d8576131d8613d01565b60200260200101819052508460200180518091906131f5906140e6565b9052506001925090505b9250929050565b82515f90816132136136d5565b86518761321f826140e6565b9052505b845187511015613490575f85885f01518151811061324357613243613d01565b01602001516001600160f81b0319169050601160f91b8190036132a55761326a888861314b565b9093509150826132815750505084525060036127ea565b613299826003613292876001613cee565b8b51613684565b5f9450505050506127ea565b605c60f882901c1480156132c55750855188516132c3906001613cee565b105b1561347a578751886132d6826140e6565b9052508751865187919081106132ee576132ee613d01565b6020910101516001600160f81b031916601160f91b1480613336575085885f01518151811061331f5761331f613d01565b6020910101516001600160f81b031916602f60f81b145b80613368575085885f01518151811061335157613351613d01565b6020910101516001600160f81b031916601760fa1b145b8061339a575085885f01518151811061338357613383613d01565b6020910101516001600160f81b031916603360f91b145b806133cc575085885f0151815181106133b5576133b5613d01565b6020910101516001600160f81b031916603960f91b145b806133fe575085885f0151815181106133e7576133e7613d01565b6020910101516001600160f81b031916603760f91b145b80613430575085885f01518151811061341957613419613d01565b6020910101516001600160f81b031916603160f91b145b80613462575085885f01518151811061344b5761344b613d01565b6020910101516001600160f81b031916601d60fa1b145b1561346d575061347c565b50505084525060016127ea565b505b865187613488826140e6565b905250613223565b505084525060029392505050565b82515f90819081806134ae6136d5565b8651895110156135c25786895f0151815181106134cd576134cd613d01565b01602001516001600160f81b0319169250600160fd1b8314806134fd5750600960f81b6001600160f81b03198416145b806135155750600560f91b6001600160f81b03198416145b8061352d5750600d60f81b6001600160f81b03198416145b806135455750600b60fa1b6001600160f81b03198416145b8061355d5750607d60f81b6001600160f81b03198416145b806135755750605d60f81b6001600160f81b03198416145b1561358357600194506135c2565b602060f884901c108061359a5750607f60f884901c115b156135ae57505050855250600190506127ea565b8851896135ba826140e6565b9052506134ae565b846135d657505050855250600290506127ea565b6135e0898961314b565b9092509050816135f957505050855250600390506127ea565b613609816004868c5f0151613684565b88518961361582614143565b9052505f9998505050505050505050565b5f60f882901c60308110801590613641575060398160ff1611155b15613651576127ea6030826141c7565b60418160ff1610158015613669575060468160ff1611155b15613679576127ea6037826141c7565b6127ea6057826141c7565b838360048111156136975761369761411c565b908160048111156136aa576136aa61411c565b905250602084019190915260016040840181905260608401919091526080830152505f60a090910152565b6040805160c08101909152805f81525f6020820181905260408201819052606082018190526080820181905260a09091015290565b5f5b8381101561372457818101518382015260200161370c565b50505f910152565b5f825161373d81846020870161370a565b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261376a575f80fd5b813567ffffffffffffffff8082111561378557613785613747565b604051601f8301601f19908116603f011681019082821181831017156137ad576137ad613747565b816040528381528660208588010111156137c5575f80fd5b836020870160208301375f602085830101528094505050505092915050565b6001600160a01b03811681146137f8575f80fd5b50565b5f806040838503121561380c575f80fd5b823567ffffffffffffffff811115613822575f80fd5b61382e8582860161375b565b925050602083013561383f816137e4565b809150509250929050565b5f6020828403121561385a575f80fd5b5035919050565b5f815180845261387881602086016020860161370a565b601f01601f19169290920160200192915050565b602081525f611e9a6020830184613861565b5f805f606084860312156138b0575f80fd5b83356138bb816137e4565b925060208401356138cb816137e4565b929592945050506040919091013590565b5f80604083850312156138ed575f80fd5b82356138f8816137e4565b946020939093013593505050565b5f805f60608486031215613918575f80fd5b833567ffffffffffffffff8082111561392f575f80fd5b61393b8783880161375b565b94506020860135915080821115613950575f80fd5b61395c8783880161375b565b93506040860135915080821115613971575f80fd5b5061397e8682870161375b565b9150509250925092565b604081525f61399a6040830185613861565b82810360208401526139ac8185613861565b95945050505050565b5f805f606084860312156139c7575f80fd5b833567ffffffffffffffff8111156139dd575f80fd5b6139e98682870161375b565b93505060208401356139fa816137e4565b91506040840135613a0a816137e4565b809150509250925092565b5f805f805f8060c08789031215613a2a575f80fd5b863567ffffffffffffffff80821115613a41575f80fd5b613a4d8a838b0161375b565b97506020890135915080821115613a62575f80fd5b613a6e8a838b0161375b565b96506040890135915080821115613a83575f80fd5b613a8f8a838b0161375b565b95506060890135915080821115613aa4575f80fd5b613ab08a838b0161375b565b94506080890135915080821115613ac5575f80fd5b613ad18a838b0161375b565b935060a0890135915080821115613ae6575f80fd5b50613af389828a0161375b565b9150509295509295509295565b5f60208284031215613b10575f80fd5b813567ffffffffffffffff811115613b26575f80fd5b613b328482850161375b565b949350505050565b5f610140808352613b4d8184018e613861565b602084019c909c525050604081019890985260608801969096526001600160a01b0394909416608087015260a086019290925260c085015260e084015261010083015261012090910152919050565b5f8060408385031215613bad575f80fd5b823567ffffffffffffffff80821115613bc4575f80fd5b613bd08683870161375b565b93506020850135915080821115613be5575f80fd5b50613bf28582860161375b565b9150509250929050565b5f805f8060808587031215613c0f575f80fd5b843567ffffffffffffffff80821115613c26575f80fd5b613c328883890161375b565b95506020870135915080821115613c47575f80fd5b613c538883890161375b565b94506040870135915080821115613c68575f80fd5b613c748883890161375b565b93506060870135915080821115613c89575f80fd5b50613c968782880161375b565b91505092959194509250565b600181811c90821680613cb657607f821691505b602082108103613cd457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611e9d57611e9d613cda565b634e487b7160e01b5f52603260045260245ffd5b601f8211156107cf575f81815260208120601f850160051c81016020861015613d3b5750805b601f850160051c820191505b81811015613d5a57828155600101613d47565b505050505050565b815167ffffffffffffffff811115613d7c57613d7c613747565b613d9081613d8a8454613ca2565b84613d15565b602080601f831160018114613dc3575f8415613dac5750858301515b5f19600386901b1c1916600185901b178555613d5a565b5f85815260208120601f198616915b82811015613df157888601518255948401946001909101908401613dd2565b5085821015613e0e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215613e2e575f80fd5b815180151581146127ea575f80fd5b5f88516020613e4f8285838e0161370a565b895191840191613e628184848e0161370a565b8951920191613e748184848d0161370a565b8851920191613e868184848c0161370a565b8751920191613e988184848b0161370a565b8651920191613eaa8184848a0161370a565b8551920191613ebc818484890161370a565b919091019a9950505050505050505050565b5f89516020613ee08285838f0161370a565b8a5191840191613ef38184848f0161370a565b8a51920191613f058184848e0161370a565b8951920191613f178184848d0161370a565b8851920191613f298184848c0161370a565b8751920191613f3b8184848b0161370a565b8651920191613f4d8184848a0161370a565b8551920191613f5f818484890161370a565b919091019b9a5050505050505050505050565b5f87516020613f848285838d0161370a565b885191840191613f978184848d0161370a565b8851920191613fa98184848c0161370a565b8751920191613fbb8184848b0161370a565b8651920191613fcd8184848a0161370a565b8551920191613fdf818484890161370a565b919091019998505050505050505050565b5f8a51614001818460208f0161370a565b8a516140138183860160208f0161370a565b8a519184010190614028818360208e0161370a565b895161403a8183850160208e0161370a565b8951929091010190614050818360208c0161370a565b87516140628183850160208c0161370a565b8751929091010190614078818360208a0161370a565b855161408a8183850160208a0161370a565b85519290910101906140a081836020880161370a565b019b9a5050505050505050505050565b8082028115828204841417611e9d57611e9d613cda565b5f826140e157634e487b7160e01b5f52601260045260245ffd5b500490565b5f600182016140f7576140f7613cda565b5060010190565b5f60ff821660ff810361411357614113613cda565b60010192915050565b634e487b7160e01b5f52602160045260245ffd5b81810381811115611e9d57611e9d613cda565b5f8161415157614151613cda565b505f190190565b6001600160a01b0381811683821601908082111561417857614178613cda565b5092915050565b60ff8181168382160190811115611e9d57611e9d613cda565b8082025f8212600160ff1b841416156141b3576141b3613cda565b8181058314821517611e9d57611e9d613cda565b60ff8281168282160390811115611e9d57611e9d613cda565b8082018281125f8312801582168215821617156141ff576141ff613cda565b505092915050565b600181815b8085111561424157815f190482111561422757614227613cda565b8085161561423457918102915b93841c939080029061420c565b509250929050565b5f8261425757506001611e9d565b8161426357505f611e9d565b816001811461427957600281146142835761429f565b6001915050611e9d565b60ff84111561429457614294613cda565b50506001821b611e9d565b5060208310610133831016604e8410600b84101617156142c2575081810a611e9d565b6142cc8383614207565b805f19048211156142df576142df613cda565b029392505050565b5f611e9a8383614249565b5f8651614303818460208b0161370a565b865190830190614317818360208b0161370a565b865191019061432a818360208a0161370a565b855191019061433d81836020890161370a565b845191019061435081836020880161370a565b0197965050505050505056fe7b2270223a226572632d3230222c226f70223a226d696e74222c227469636b223a227b2270223a226572632d3230222c226f70223a227472616e7366657246726f6d222c227469636b223a227b2270223a226572632d3230222c226f70223a226465706c6f79222c227469636b223a227b2270223a226572632d3230222c226f70223a22617070726f7665222c227469636b223a227b2270223a226572632d3230222c226f70223a227472616e73666572222c227469636b223a22a26469706673582212202514d7d118e1eba90983b9f9186ef581a9ba36c8e0c56b47f6eb90257980b11864736f6c63430008140033
Deployed Bytecode Sourcemap
140:24736:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15081:12;15163:24;15197:5;;15163:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15324:28:1;;15163:40;;-1:-1:-1;15163:40:1;15324:28;;-1:-1:-1;15163:40:1;;-1:-1:-1;15324:28:1;;;-1:-1:-1;15324:28:1;:::i;:::-;;;;-1:-1:-1;;15324:28:1;;;;;;;;;15314:39;;15324:28;15314:39;;;;15437:20;;;;:10;:20;;;;;:29;;;15314:39;;-1:-1:-1;15437:29:1;;15433:435;;;15567:10;15581:9;15567:23;15559:52;;;;-1:-1:-1;;;15559:52:1;;765:2:4;15559:52:1;;;747:21:4;804:2;784:18;;;777:30;-1:-1:-1;;;823:18:4;;;816:46;879:18;;15559:52:1;;;;;;;;;15710:22;15723:8;15710:12;:22::i;:::-;15433:435;;;15835:21;15845:10;15835:9;:21::i;:::-;-1:-1:-1;;15927:9:1;;;;;;;;;-1:-1:-1;15927:9:1;;-1:-1:-1;4877:64:1;;;;;;;;;;-1:-1:-1;4877:64:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4877:64:1;;;;;;;;;;;;2508:25:4;;;2496:2;2481:18;4877:64:1;;;;;;;;5821:26;;;;;;;;;;-1:-1:-1;5821:26:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24527:307::-;;;;;;;;;;-1:-1:-1;24527:307:1;;;;;:::i;:::-;;:::i;:::-;;24404:114;;;;;;;;;;-1:-1:-1;24404:114:1;;;;;:::i;:::-;;:::i;2534:467:3:-;;;;;;;;;;-1:-1:-1;2534:467:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;5417:84:1:-;;;;;;;;;;-1:-1:-1;5417:84:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5417:84:1;;;;;;;;;;;;;;;;5933:36;;;;;;;;;;-1:-1:-1;5933:36:1;;;;;;4611:62;;;;;;;;;;-1:-1:-1;4611:62:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4611:62:1;;;;;;;;;244:20;;;;;;;;;;-1:-1:-1;244:20:1;;;;-1:-1:-1;;;;;244:20:1;;;;;;-1:-1:-1;;;;;5920:32:4;;;5902:51;;5890:2;5875:18;244:20:1;5756:203:4;1274:685:3;;;;;;;;;;-1:-1:-1;1274:685:3;;;;;:::i;:::-;;:::i;5690:49:1:-;;;;;;;;;;-1:-1:-1;5690:49:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;797:469:3:-;;;;;;;;;;-1:-1:-1;797:469:3;;;;;:::i;:::-;;:::i;194:239::-;;;;;;;;;;-1:-1:-1;194:239:3;;;;;:::i;:::-;;:::i;1967:561::-;;;;;;;;;;-1:-1:-1;1967:561:3;;;;;:::i;:::-;;:::i;8255:1950:1:-;8392:20;8415;;;:10;:20;;;;;8392:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8522:24;8549:12;8562:6;8549:20;;;;;;:::i;:::-;;;;;;;;;;;;;8522:47;;8689:5;:15;;;8676:9;:28;8668:61;;;;-1:-1:-1;;;8668:61:1;;10644:2:4;8668:61:1;;;10626:21:4;10683:2;10663:18;;;10656:30;-1:-1:-1;;;10702:18:4;;;10695:50;10762:18;;8668:61:1;10442:344:4;8668:61:1;8841:23;;;;:28;8837:226;;8964:5;:23;;;8945:5;:15;;;8912:10;8923:6;8912:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8931:10;8912:30;;;;;;;;;:48;;;;:::i;:::-;:75;;8886:165;;;;-1:-1:-1;;;8886:165:1;;11255:2:4;8886:165:1;;;11237:21:4;11294:2;11274:18;;;11267:30;11333;11313:18;;;11306:58;11381:18;;8886:165:1;11053:352:4;8886:165:1;9235:5;:15;;;9215:5;:15;;;9200:5;:12;;;:30;;;;:::i;:::-;9199:51;;9177:125;;;;-1:-1:-1;;;9177:125:1;;11612:2:4;9177:125:1;;;11594:21:4;11651:2;11631:18;;;11624:30;11690:26;11670:18;;;11663:54;11734:18;;9177:125:1;11410:348:4;9177:125:1;9380:5;:15;;;9364:5;:12;;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;9509:15:1;;;;9493:12;;;;:31;;9485:60;;;;-1:-1:-1;;;9485:60:1;;11965:2:4;9485:60:1;;;11947:21:4;12004:2;11984:18;;;11977:30;-1:-1:-1;;;12023:18:4;;;12016:46;12079:18;;9485:60:1;11763:340:4;9485:60:1;9662:8;9671:6;9662:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9679:10;9662:28;;;;;;;;;:33;;9658:84;;9729:1;9712:5;:13;;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;9658:84:1;9849:5;:15;;;9815:10;9826:6;9815:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9834:10;9815:30;;;;;;;;:49;;:30;;;:49;;;;;:::i;:::-;;;;-1:-1:-1;;9907:15:1;;;;9875:16;;:8;;:16;;9884:6;;9875:16;:::i;:::-;;;;;;;;;;;;;;;;9892:10;9875:28;;;;;;;;:47;;:28;;;:47;;;;;:::i;:::-;;;;-1:-1:-1;;10012:5:1;;9996:59;;-1:-1:-1;;;;;10012:5:1;10020:34;10040:9;10051:2;10020:19;:34::i;:::-;9996:7;:59::i;:::-;10145:14;;;;10129:68;;-1:-1:-1;;;;;10145:14:1;10162:34;10182:9;10193:2;10162:19;:34::i;10129:68::-;8312:1893;;8255:1950;:::o;15953:8443::-;16023:19;16053:32;16122:29;16139:7;16148:2;16122:16;:29::i;:::-;-1:-1:-1;16096:55:1;;-1:-1:-1;16096:55:1;-1:-1:-1;16170:40:1;;16162:72;;;;-1:-1:-1;;;16162:72:1;;12310:2:4;16162:72:1;;;12292:21:4;12349:2;12329:18;;;12322:30;-1:-1:-1;;;12368:18:4;;;12361:49;12427:18;;16162:72:1;12108:343:4;16162:72:1;16258:15;16276:110;16310:7;16332:6;16339:1;16332:9;;;;;;;;:::i;:::-;;;;;;;:15;;;16362:6;16369:1;16362:9;;;;;;;;:::i;:::-;;;;;;;:13;;;16276:19;:110::i;:::-;16258:128;;16397:18;16418:110;16452:7;16474:6;16481:1;16474:9;;;;;;;;:::i;:::-;;;;;;;:15;;;16504:6;16511:1;16504:9;;;;;;;;:::i;16418:110::-;16397:131;;16541:16;16560:110;16594:7;16616:6;16623:1;16616:9;;;;;;;;:::i;:::-;;;;;;;:15;;;16646:6;16653:1;16646:9;;;;;;;;:::i;16560:110::-;16541:129;;16681:18;16702:110;16736:7;16758:6;16765:1;16758:9;;;;;;;;:::i;:::-;;;;;;;:15;;;16788:6;16795:1;16788:9;;;;;;;;:::i;16702:110::-;1473:21;;-1:-1:-1;;;1473:21:1;;;12790:16:4;16681:131:1;;-1:-1:-1;12822:11:4;;1473:21:1;;;;;;;;;;;;1463:32;;;;;;16872:1;16855:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;16845:30;;;;;;:46;:122;;;;-1:-1:-1;1925:26:1;;-1:-1:-1;;;1925:26:1;;;13046:21:4;13083:11;;1925:26:1;;;;;;;;;;;;1915:37;;;;;;16939:4;16922:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;16912:33;;;;;;:55;16845:122;:191;;;;-1:-1:-1;1545:22:1;;-1:-1:-1;;;1545:22:1;;;13307:17:4;13340:11;;1545:22:1;;;;;;;;;;;;1535:33;;;;;;17015:2;16998:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;16988:31;;;;;;:48;16845:191;:264;;;;-1:-1:-1;1620:24:1;;-1:-1:-1;;;1620:24:1;;;13564:19:4;13599:11;;1620:24:1;;;;;;;;;;;;1610:35;;;;;;17084:4;17067:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;17057:33;;;;;;:52;16845:264;16823:339;;;;-1:-1:-1;;;16823:339:1;;13823:2:4;16823:339:1;;;13805:21:4;13862:2;13842:18;;;13835:30;13901:27;13881:18;;;13874:55;13946:18;;16823:339:1;13621:349:4;16823:339:1;16247:937;;;;17196:19;17218:110;17252:7;17274:6;17281:1;17274:9;;;;;;;;:::i;:::-;;;;;;;:15;;;17304:6;17311:1;17304:9;;;;;;;;:::i;17218:110::-;17196:132;;17339:21;17363:110;17397:7;17419:6;17426:1;17419:9;;;;;;;;:::i;:::-;;;;;;;:15;;;17449:6;17456:1;17449:9;;;;;;;;:::i;17363:110::-;2174:28;;-1:-1:-1;;;2174:28:1;;;14177:23:4;17339:134:1;;-1:-1:-1;14216:11:4;;2174:28:1;;;;;;;;;;;;2164:39;;;;;;17515:5;17498:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;17488:34;;;;;;:60;17484:6904;;17565:17;17585:126;17623:7;17649:6;17656:1;17649:9;;;;;;;;:::i;:::-;;;;;;;:15;;;17683:6;17690:1;17683:9;;;;;;;;:::i;17585:126::-;17565:146;;17726:19;17748:126;17786:7;17812:6;17819:1;17812:9;;;;;;;;:::i;:::-;;;;;;;:15;;;17846:6;17853:1;17846:9;;;;;;;;:::i;17748:126::-;2265:22;;-1:-1:-1;;;2265:22:1;;;14440:17:4;17726:148:1;;-1:-1:-1;14473:11:4;;2265:22:1;;;;;;;;;;;;2255:33;;;;;;17942:5;17925:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;17915:34;;;;;;:84;:159;;;;-1:-1:-1;1846:23:1;;-1:-1:-1;;;1846:23:1;;;14697:18:4;14731:11;;1846:23:1;;;;;;;;;;;;1836:34;;;;;;18051:3;18034:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;18024:32;;;;;;:50;17915:159;17889:248;;;;-1:-1:-1;;;17889:248:1;;14955:2:4;17889:248:1;;;14937:21:4;14994:2;14974:18;;;14967:30;15033:29;15013:18;;;15006:57;15080:18;;17889:248:1;14753:351:4;17889:248:1;18152:20;18175:126;18213:7;18239:6;18246:1;18239:9;;;;;;;;:::i;:::-;;;;;;;:15;;;18273:6;18280:1;18273:9;;;;;;;;:::i;18175:126::-;18152:149;;18316:19;18338:128;18376:7;18402:6;18409:2;18402:10;;;;;;;;:::i;:::-;;;;;;;:16;;;18437:6;18444:2;18437:10;;;;;;;;:::i;18338:128::-;18316:150;;18481:201;18514:7;18540:10;18569:33;18596:5;18569:26;:33::i;:::-;18629:37;18649:6;1357:2;18629:19;:37::i;:::-;18481:14;:201::i;:::-;17550:1146;;;;17484:6904;;;2008:26;;-1:-1:-1;;;2008:26:1;;;15311:21:4;15348:11;;2008:26:1;;;;;;;;;;;;1998:37;;;;;;18733:5;18716:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;18706:34;;;;;;:58;18702:5686;;18781:17;18801:126;18839:7;18865:6;18872:1;18865:9;;;;;;;;:::i;18801:126::-;18781:146;;18944:17;18964:126;19002:7;19028:6;19035:1;19028:9;;;;;;;;:::i;18964:126::-;18944:146;;19107:21;19131:128;19169:7;19195:6;19202:2;19195:10;;;;;;;;:::i;:::-;;;;;;;:16;;;19230:6;19237:2;19230:10;;;;;;;;:::i;19131:128::-;19107:152;;19276:23;19302:128;19340:7;19366:6;19373:2;19366:10;;;;;;;;:::i;:::-;;;;;;;:16;;;19401:6;19408:2;19401:10;;;;;;;;:::i;19302:128::-;19276:154;;19447:21;19471:128;19509:7;19535:6;19542:2;19535:10;;;;;;;;:::i;:::-;;;;;;;:16;;;19570:6;19577:2;19570:10;;;;;;;;:::i;19471:128::-;1696:23;;-1:-1:-1;;;1696:23:1;;;15572:18:4;19447:152:1;;-1:-1:-1;15606:11:4;;1696:23:1;;;;;;;;;;;;1686:34;;;;;;19669:3;19652:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;19642:32;;;;;;:50;:125;;;;-1:-1:-1;1771:23:1;;-1:-1:-1;;;1771:23:1;;;15830:18:4;15864:11;;1771:23:1;;;;;;;;;;;;1761:34;;;;;;19744:3;19727:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;19717:32;;;;;;:50;19642:125;:204;;;;-1:-1:-1;2428:27:1;;-1:-1:-1;;;2428:27:1;;;16088:22:4;16126:11;;2428:27:1;;;;;;;;;;;;2418:38;;;;;;19819:7;19802:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;19792:36;;;;;;:54;19642:204;:291;;;;-1:-1:-1;2509:29:1;;-1:-1:-1;;;2509:29:1;;;16350:24:4;16390:11;;2509:29:1;;;;;;;;;;;;2499:40;;;;;;19902:9;19885:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;19875:38;;;;;;:58;19642:291;:377;;;;-1:-1:-1;2589:27:1;;-1:-1:-1;;;2589:27:1;;;16614:22:4;16652:11;;2589:27:1;;;;;;;;;;;;2579:38;;;;;;19993:7;19976:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;19966:36;;;;;;:53;19642:377;19616:468;;;;-1:-1:-1;;;19616:468:1;;16876:2:4;19616:468:1;;;16858:21:4;16915:2;16895:18;;;16888:30;16954:31;16934:18;;;16927:59;17003:18;;19616:468:1;16674:353:4;19616:468:1;20101:20;20124:126;20162:7;20188:6;20195:1;20188:9;;;;;;;;:::i;:::-;;;;;;;:15;;;20222:6;20229:1;20222:9;;;;;;;;:::i;20124:126::-;20101:149;;20265:20;20288:128;20326:7;20352:6;20359:2;20352:10;;;;;;;;:::i;:::-;;;;;;;:16;;;20387:6;20394:2;20387:10;;;;;;;;:::i;20288:128::-;20265:151;;20431:21;20455:128;20493:7;20519:6;20526:2;20519:10;;;;;;;;:::i;:::-;;;;;;;:16;;;20554:6;20561:2;20554:10;;;;;;;;:::i;20455:128::-;20431:152;;20598:22;20623:128;20661:7;20687:6;20694:2;20687:10;;;;;;;;:::i;:::-;;;;;;;:16;;;20722:6;20729:2;20722:10;;;;;;;;:::i;20623:128::-;20598:153;;20766:24;20793:128;20831:7;20857:6;20864:2;20857:10;;;;;;;;:::i;:::-;;;;;;;:16;;;20892:6;20899:2;20892:10;;;;;;;;:::i;20793:128::-;20766:155;;20936:29;20968:10;:68;21007:26;21018:7;21026:6;21007:10;:26::i;:::-;20990:44;;;;;;;;:::i;:::-;;;;-1:-1:-1;;20990:44:1;;;;;;;;;20980:55;;20990:44;20980:55;;;;20968:68;;;;;;;;;;-1:-1:-1;20968:68:1;21074:4;21051:20;;;:27;;-1:-1:-1;;21051:27:1;;;;;;20968:68;-1:-1:-1;20968:68:1;21093:28;21114:7;20968:68;21093:28;:::i;:::-;;21136:384;21166:7;21200:37;21220:6;1357:2;21200:19;:37::i;:::-;21265;21285:6;1357:2;21265:19;:37::i;:::-;21330:38;21350:7;1357:2;21330:19;:38::i;:::-;21396:39;21416:8;1357:2;21396:19;:39::i;:::-;21463:41;21483:10;1357:2;21463:19;:41::i;:::-;21136:11;:384::i;:::-;18766:2766;;;;;;;;;;;18702:5686;;;2675:27;;-1:-1:-1;;;2675:27:1;;;19438:22:4;19476:11;;2675:27:1;;;;;;;;;;;;2665:38;;;;;;21569:5;21552:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;21542:34;;;;;;:59;21538:2850;;21618:17;21638:126;21676:7;21702:6;21709:1;21702:9;;;;;;;;:::i;21638:126::-;21618:146;;21779:19;21801:126;21839:7;21865:6;21872:1;21865:9;;;;;;;;:::i;21801:126::-;2265:22;;-1:-1:-1;;;2265:22:1;;;14440:17:4;21779:148:1;;-1:-1:-1;14473:11:4;;2265:22:1;;;;;;;;;;;;2255:33;;;;;;21995:5;21978:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;21968:34;;;;;;:84;:159;;;;-1:-1:-1;1846:23:1;;-1:-1:-1;;;1846:23:1;;;14697:18:4;14731:11;;1846:23:1;;;;;;;;;;;;1836:34;;;;;;22104:3;22087:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;22077:32;;;;;;:50;21968:159;21942:248;;;;-1:-1:-1;;;21942:248:1;;19700:2:4;21942:248:1;;;19682:21:4;19739:2;19719:18;;;19712:30;19778:29;19758:18;;;19751:57;19825:18;;21942:248:1;19498:351:4;21942:248:1;22205:20;22228:126;22266:7;22292:6;22299:1;22292:9;;;;;;;;:::i;22228:126::-;22205:149;;22369:19;22391:128;22429:7;22455:6;22462:2;22455:10;;;;;;;;:::i;22391:128::-;22369:150;;22534:190;22566:7;22592:10;22621:33;22648:5;22621:26;:33::i;:::-;22681:27;22701:6;22681:19;:27::i;:::-;22534:13;:190::i;21538:2850::-;2766:32;;-1:-1:-1;;;2766:32:1;;;20056:27:4;20099:12;;2766:32:1;;;;;;;;;;;;2756:43;;;;;;22773:5;22756:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;22746:34;;;;;;:64;22742:1646;;22827:17;22847:126;22885:7;22911:6;22918:1;22911:9;;;;;;;;:::i;22847:126::-;22827:146;;22988:19;23010:126;23048:7;23074:6;23081:1;23074:9;;;;;;;;:::i;23010:126::-;22988:148;;23151:21;23175:128;23213:7;23239:6;23246:2;23239:10;;;;;;;;:::i;23175:128::-;2265:22;;-1:-1:-1;;;2265:22:1;;;14440:17:4;23151:152:1;;-1:-1:-1;14473:11:4;;2265:22:1;;;;;;;;;;;;2255:33;;;;;;23371:5;23354:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;23344:34;;;;;;:63;:134;;;;-1:-1:-1;1846:23:1;;-1:-1:-1;;;1846:23:1;;;14697:18:4;14731:11;;1846:23:1;;;;;;;;;;;;1836:34;;;;;;23455:3;23438:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;23428:32;;;;;;:50;23344:134;:222;;;;-1:-1:-1;2352:24:1;;-1:-1:-1;;;2352:24:1;;;20324:19:4;20359:11;;2352:24:1;;;;;;;;;;;;2342:35;;;;;;23526:7;23509:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;23499:36;;;;;;:67;23344:222;23318:315;;;;-1:-1:-1;;;23318:315:1;;20583:2:4;23318:315:1;;;20565:21:4;20622:2;20602:18;;;20595:30;20661:33;20641:18;;;20634:61;20712:18;;23318:315:1;20381:355:4;23318:315:1;23648:20;23671:126;23709:7;23735:6;23742:1;23735:9;;;;;;;;:::i;:::-;;;;;;;:15;;;23769:6;23776:1;23769:9;;;;;;;;:::i;23671:126::-;23648:149;;23812:19;23834:128;23872:7;23898:6;23905:2;23898:10;;;;;;;;:::i;:::-;;;;;;;:16;;;23933:6;23940:2;23933:10;;;;;;;;:::i;23834:128::-;23812:150;;23977:21;24001:128;24039:7;24065:6;24072:2;24065:10;;;;;;;;:::i;:::-;;;;;;;:16;;;24100:6;24107:2;24100:10;;;;;;;;:::i;24001:128::-;23977:152;;24146:230;24183:7;24209:35;24236:7;24209:26;:35::i;:::-;24263:33;24290:5;24263:26;:33::i;:::-;24323:37;24343:6;1357:2;24323:19;:37::i;:::-;24146:18;:230::i;:::-;22812:1576;;;;;;22742:1646;16012:8384;;;;15953:8443;:::o;5821:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24527:307::-;985:5;;-1:-1:-1;;;;;985:5:1;971:10;:19;963:64;;;;-1:-1:-1;;;963:64:1;;20943:2:4;963:64:1;;;20925:21:4;;;20962:18;;;20955:30;21021:34;21001:18;;;20994:62;21073:18;;963:64:1;20741:356:4;963:64:1;24668:45:::1;::::0;;-1:-1:-1;;;;;21294:32:4;;;24668:45:1::1;::::0;::::1;21276:51:4::0;21343:18;;;;21336:34;;;24668:45:1;;;;;;;;;;21249:18:4;;;;24668:45:1;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;24668:45:1::1;-1:-1:-1::0;;;24668:45:1::1;::::0;;24657:57;;-1:-1:-1;;;;24657:10:1;;::::1;::::0;:57:::1;::::0;24668:45;24657:57:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24621:93;;;;24733:7;:57;;;;-1:-1:-1::0;24745:11:1;;:16;;:44:::1;;;24776:4;24765:24;;;;;;;;;;;;:::i;:::-;24725:101;;;::::0;-1:-1:-1;;;24725:101:1;;22157:2:4;24725:101:1::1;::::0;::::1;22139:21:4::0;22196:2;22176:18;;;22169:30;22235:33;22215:18;;;22208:61;22286:18;;24725:101:1::1;21955:355:4::0;24404:114:1;985:5;;-1:-1:-1;;;;;985:5:1;971:10;:19;963:64;;;;-1:-1:-1;;;963:64:1;;20943:2:4;963:64:1;;;20925:21:4;;;20962:18;;;20955:30;21021:34;21001:18;;;20994:62;21073:18;;963:64:1;20741:356:4;963:64:1;24489:21:::1;::::0;-1:-1:-1;;;;;24489:12:1;::::1;::::0;:21;::::1;;;::::0;24502:7;;24489:21:::1;::::0;;;24502:7;24489:12;:21;::::1;;;;;;;;;;;;;::::0;::::1;;;;2534:467:3::0;2667:18;2687:20;2720:15;:57;;;;;;;;;;;;;;;;;2788:29;;;;;;;;;;;;-1:-1:-1;;;2788:29:3;;;;;;;;2828:30;;;;;;;;;;-1:-1:-1;;;2828:30:3;;;;2869:22;;;;;;;;;;-1:-1:-1;;;2869:22:3;;;;2916:44;;2720:57;;-1:-1:-1;2788:29:3;;2828:30;;2869:22;2916:44;;2720:57;;2936:4;;2788:29;;2945:3;;2828:30;;2954:2;;2869:22;;2916:44;;:::i;:::-;;;;-1:-1:-1;;2916:44:3;;;;;;;;;;;;-1:-1:-1;2534:467:3;-1:-1:-1;;;;;;;;2534:467:3:o;1274:685::-;1505:18;1525:20;1558:16;:30;;;;;;;;;;;;;-1:-1:-1;;;1558:30:3;;;;;1599:16;:34;;;;;;;;;;;;;-1:-1:-1;;;1599:34:3;;;;;1644:16;:36;;;;;;;;;;;;;-1:-1:-1;;;1644:36:3;;;;;1691:16;:34;;;;;;;;;;;;;-1:-1:-1;;;1691:34:3;;;;;1736:15;:22;;;;;;;;;;;;;-1:-1:-1;;;1736:22:3;;;;;1769:15;1803:3;1808:2;1812:7;1821:2;1825:9;1836:2;1840:7;1849:1;1786:65;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1786:65:3;;;;;;1893:2;;;;;;;;;;1786:65;;-1:-1:-1;1893:2:3;1786:65;1893:2;;;1897:4;1903:2;;;;;;;;;;;;;-1:-1:-1;;;1903:2:3;;;1907:3;1912:2;1915;1876:42;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1876:42:3;;;;;;;;;;;;-1:-1:-1;1274:685:3;-1:-1:-1;;;;;;;;;;;;;1274:685:3:o;5690:49:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5690:49:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5690:49:1;;-1:-1:-1;;;;;;5690:49:1;;;;;;;;;;:::o;797:469:3:-;931:18;951:20;984:15;:58;;;;;;;;;;;;;;;;;1053:29;;;;;;;;;;;;-1:-1:-1;;;1053:29:3;;;;;;;;1093:30;;;;;;;;;;-1:-1:-1;;;1093:30:3;;;;1134:22;;;;;;;;;;-1:-1:-1;;;1134:22:3;;;;1181:44;;984:58;;-1:-1:-1;1053:29:3;;1093:30;;1134:22;1181:44;;984:58;;1201:4;;1053:29;;1210:3;;1093:30;;1219:2;;1134:22;;1181:44;;:::i;194:239::-;299:18;319:20;373;384:4;389:3;373:10;:20::i;:::-;366:27;;;-1:-1:-1;194:239:3;-1:-1:-1;;;194:239:3:o;1967:561::-;2135:18;2155:20;2188:15;:62;;;;;;;;;;;;;;;;;;;2261:15;:29;;;;;;;;;;;;;-1:-1:-1;;;2261:29:3;;;;;2301:16;:30;;;;;;;;;;;;;-1:-1:-1;;;2301:30:3;;;;;2343:16;:32;;;;;;;;;;;;;-1:-1:-1;;;2343:32:3;;;;;2386:15;:22;;;;;;;;;;;;;-1:-1:-1;;;2386:22:3;;;;;2450:1;2453:4;2459:1;2462:3;2467:2;2471;2475;2479:4;2485:1;2433:54;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2433:54:3;;;;;;;;;;;;-1:-1:-1;1967:561:3;-1:-1:-1;;;;;;;;;;1967:561:3:o;10545:207:1:-;10633:7;10741:3;10718:19;10727:10;10718:6;:19;:::i;:::-;10717:27;;;;:::i;:::-;10710:34;;10545:207;;;;;:::o;10213:324::-;10369:12;10387:9;-1:-1:-1;;;;;10387:14:1;10409:6;10387:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10368:52;;;10498:7;10490:39;;;;-1:-1:-1;;;10490:39:1;;29644:2:4;10490:39:1;;;29626:21:4;29683:2;29663:18;;;29656:30;-1:-1:-1;;;29702:18:4;;;29695:49;29761:18;;10490:39:1;29442:343:4;5613:5607:2;5732:7;5753:21;5788:7;5820:14;5843:4;5820:28;;5858:12;5880:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;5880:20:2;5929;5934:14;5929:4;:20::i;:::-;6026:14;;;;5910:39;;-1:-1:-1;5910:39:2;;-1:-1:-1;5991:9:2;;;6069:18;;:::i;:::-;6118:8;;6105:10;;:21;6098:5058;;;6156:8;6167:1;6169:6;:10;;;6167:13;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;6167:13:2;;-1:-1:-1;;;;6263:9:2;;;:22;;-1:-1:-1;;;;;;;;;;6276:9:2;;;6263:22;6259:619;;;6305:7;;;;:::i;:::-;;;;6349:29;6363:6;6371;6349:13;:29::i;:::-;6330:48;;-1:-1:-1;6330:48:2;-1:-1:-1;6330:48:2;6396:94;;-1:-1:-1;1451:1:2;;-1:-1:-1;6469:1:2;;-1:-1:-1;6432:39:2;;-1:-1:-1;;;;;;;6432:39:2;6396:94;6511:6;:15;;;-1:-1:-1;;6511:21:2;6507:107;;6556:6;6571;:15;;;6556:32;;;;;;;;:::i;:::-;;;;;;;:37;;:39;;;;;;;;:::i;:::-;;;;;-1:-1:-1;6507:107:2;-1:-1:-1;;;;;;;;;6649:9:2;;;:44;;6679:14;6649:44;;;6661:15;6649:44;6631:5;;:63;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;6726:10:2;;6712:11;;;;:24;;;;6771:4;6754:14;;;:21;;;6818:14;;;;:18;;6771:4;6818:18;:::i;:::-;6793:15;;;:44;-1:-1:-1;6855:8:2;;6259:619;-1:-1:-1;;;;;;;;;6949:9:2;;;;:22;;-1:-1:-1;;;;;;;;;;6962:9:2;;;6949:22;6945:1518;;;6991:18;-1:-1:-1;;;;;;;;;7034:9:2;;;:44;;7064:14;7034:44;;;7046:15;7034:44;6991:105;;7114:14;7180:1;7163:6;:14;;;:18;;;;:::i;:::-;7159:22;;7154:660;7226:6;7233:1;7226:9;;;;;;;;:::i;:::-;;;;;;;7218:17;;7261:5;:14;;;:31;;;;;7280:5;:12;;;7279:13;7261:31;7257:539;;;7342:9;7324:27;;;;;;;;:::i;:::-;:14;;:27;;;;;;;;:::i;:::-;;7320:230;;-1:-1:-1;1361:1:2;;-1:-1:-1;7521:1:2;;-1:-1:-1;7478:45:2;;-1:-1:-1;;;;;;;;;7478:45:2;7320:230;-1:-1:-1;;7575:15:2;;;:20;7637:10;;:14;;7650:1;7637:14;:::i;:::-;7621:6;7628:1;7621:9;;;;;;;;:::i;:::-;;;;;;;:13;;:30;;;;;7696:4;7677:6;7684:1;7677:9;;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;:16;;;;:23;-1:-1:-1;7738:4:2;7768:5;;7257:539;7191:3;;;;:::i;:::-;;;;7154:660;;;7836:9;7831:102;;-1:-1:-1;1361:1:2;;-1:-1:-1;7912:1:2;;-1:-1:-1;7869:45:2;;-1:-1:-1;;;;;;;;;7869:45:2;7831:102;7957:5;;7950:242;;7999:6;8006:1;7999:9;;;;;;;;:::i;:::-;;;;;;;7991:17;;8034:5;:14;;;:31;;;;;8053:5;:12;;;8052:13;8034:31;8030:144;;;8093:15;;;:27;;;8146:5;;8030:144;7964:3;;;;:::i;:::-;;;;7950:242;;;8214:1;8219;8214:6;8210:213;;8252:6;8259:1;8252:9;;;;;;;;:::i;:::-;;;;;;;8244:17;;8287:5;:14;;;:31;;;;;8306:5;:12;;;8305:13;8287:31;8283:122;;;8346:36;;;;:15;;;:36;8283:122;8440:8;;;;;6945:1518;-1:-1:-1;;;;;;8501:8:2;;-1:-1:-1;;;8501:8:2;8497:378;;8533:30;8545:6;8553;8561:1;8533:11;:30::i;:::-;8529:34;-1:-1:-1;8586:19:2;;8582:87;;-1:-1:-1;8637:1:2;;-1:-1:-1;8648:1:2;;-1:-1:-1;8629:21:2;;-1:-1:-1;;;;;;8629:21:2;8582:87;8723:7;;;;:::i;:::-;;;;8752:6;:15;;;-1:-1:-1;;8752:21:2;8748:86;;8795:6;8810;:15;;;8795:32;;;;;;;;:::i;:::-;;;;;;;:37;;:39;;;;;;;;:::i;:::-;;;;;-1:-1:-1;8748:86:2;8852:8;;;8497:378;-1:-1:-1;;;;;;;;;8924:8:2;;;;:21;;-1:-1:-1;;;;;;;;;;8936:9:2;;;8924:21;:34;;;-1:-1:-1;;;;;;;;;;8949:9:2;;;8924:34;:47;;;-1:-1:-1;;;;;;;;;;8962:9:2;;;8924:47;8920:94;;;8991:8;;;8920:94;-1:-1:-1;;;;;;9052:8:2;;-1:-1:-1;;;9052:8:2;9048:117;;9122:1;9105:6;:14;;;:18;;;;:::i;9048:117::-;-1:-1:-1;;;;;;9183:8:2;;-1:-1:-1;;;9183:8:2;9179:851;;9236:6;:15;;;-1:-1:-1;;9236:21:2;;:124;;;;-1:-1:-1;9346:14:2;9281:6;9296;:15;;;9281:32;;;;;;;;:::i;:::-;;;;;;;:41;;;:79;;;;;;;;:::i;:::-;;;9236:124;:208;;;;-1:-1:-1;9429:15:2;9384:6;9399;:15;;;9384:32;;;;;;;;:::i;:::-;;;;;;;:41;;;:60;;;;;;;;:::i;:::-;;;9236:208;9211:779;;;9511:1;9494:6;:14;;;:18;;;;:::i;:::-;9490:22;;9485:487;9608:14;9586:6;9593:1;9586:9;;;;;;;;:::i;:::-;;;;;;;:18;;;:36;;;;;;;;:::i;:::-;;:105;;;-1:-1:-1;9676:15:2;9654:6;9661:1;9654:9;;;;;;;;:::i;:::-;;;;;;;:18;;;:37;;;;;;;;:::i;:::-;;9586:105;9553:397;;;9752:6;9759:1;9752:9;;;;;;;;:::i;:::-;;;;;;;:18;;;:39;;;;;9775:6;9782:1;9775:9;;;;;;;;:::i;:::-;;;;;;;:16;;;9774:17;9752:39;9748:176;;;9827:15;;;:27;;;9888:5;;9748:176;9522:3;;;;:::i;:::-;;;;9485:487;;9179:851;-1:-1:-1;;;;;;;;;10091:8:2;;;;;;:20;;-1:-1:-1;;;;;;;;;;10103:8:2;;;;10091:20;10090:50;;;-1:-1:-1;;;;;;;;;;10132:8:2;;;10090:50;:78;;;-1:-1:-1;;;;;;;;;;10160:8:2;;;10090:78;:106;;;-1:-1:-1;;;;;;;;;;10188:8:2;;;10090:106;:134;;;-1:-1:-1;;;;;;;;;;10216:8:2;;;10090:134;10069:927;;;10261:6;:15;;;-1:-1:-1;;10261:21:2;10257:390;;10314:6;10329;:15;;;10314:32;;;;;;;;:::i;:::-;;;;;;;10306:40;;10415:15;10397:33;;;;;;;;:::i;:::-;:14;;:33;;;;;;;;:::i;:::-;;:115;;;-1:-1:-1;10477:15:2;10459:14;;:33;;;;;;;;:::i;:::-;;:52;;;;-1:-1:-1;10496:10:2;;;;:15;;;;10459:52;10368:261;;;-1:-1:-1;1361:1:2;;-1:-1:-1;10604:1:2;;-1:-1:-1;10561:45:2;;-1:-1:-1;;;;;;;10561:45:2;10368:261;10669:33;10684:6;10692;10700:1;10669:14;:33::i;10069:927::-;-1:-1:-1;;;;;;;;;11044:9:2;;;;;;:22;;-1:-1:-1;;;;;;;;;;11057:9:2;;;;11044:22;11040:106;;;-1:-1:-1;1361:1:2;;-1:-1:-1;11129:1:2;;-1:-1:-1;11086:45:2;;-1:-1:-1;;;;;;;11086:45:2;11040:106;6142:5014;6098:5058;6128:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;6098:5058:2;;;-1:-1:-1;;;;11198:14:2;;;1309:1;;-1:-1:-1;11198:14:2;-1:-1:-1;;;5613:5607:2;;;;;;:::o;11226:360::-;11345:13;11393:4;11370:14;11440:11;11446:5;11440:3;:11;:::i;:::-;11430:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11430:22:2;-1:-1:-1;11408:44:2;-1:-1:-1;11479:5:2;11462:87;11490:3;11486:1;:7;11462:87;;;11534:1;11536;11534:4;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;11534:4:2;11514:6;11521:9;11525:5;11521:1;:9;:::i;:::-;11514:17;;;;;;;;:::i;:::-;;;;:24;-1:-1:-1;;;;;11514:24:2;;;;;;;;-1:-1:-1;11495:3:2;;;;:::i;:::-;;;;11462:87;;;-1:-1:-1;11572:6:2;-1:-1:-1;;11226:360:2;;;;;;:::o;14436:1068::-;14528:7;14551:21;14581:4;14551:35;;14636:2;14617:8;:15;:21;;:46;;;;;14661:2;14642:8;:15;:21;;14617:46;14596:107;;;;-1:-1:-1;;;14596:107:2;;30718:2:4;14596:107:2;;;30700:21:4;30757:2;30737:18;;;30730:30;-1:-1:-1;;;30776:18:4;;;30769:44;30830:18;;14596:107:2;30516:338:4;14596:107:2;14735:13;14762:18;14798:8;14807:1;14798:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;14798:11:2;-1:-1:-1;;;14798:18:2;;:40;;;14820:8;14829:1;14820:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;14820:11:2;-1:-1:-1;;;14820:18:2;14798:40;14794:80;;;14862:1;14854:9;;14794:80;14931:17;14962:24;15007:5;14989:8;:15;:23;;;;:::i;:::-;14962:50;;15026:16;15046:2;15026:22;15022:117;;15077:25;15084:8;15093:7;;;;:::i;:::-;;;15084:17;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;15084:17:2;15077:6;:25::i;:::-;15064:38;;;;;;:::i;:::-;;-1:-1:-1;15116:12:2;;;;:::i;:::-;;;;15022:117;15185:10;15168:294;15201:2;15197:1;:6;15168:294;;;15238:1;15224:15;-1:-1:-1;;;;;15224:15:2;;;;;15253:10;15266:23;15273:8;15282:5;15273:15;;;;;;;;:::i;15266:23::-;15253:36;-1:-1:-1;15303:10:2;15316:27;15323:8;15332:9;:5;15340:1;15332:9;:::i;:::-;15323:19;;;;;;;;:::i;15316:27::-;15303:40;-1:-1:-1;15357:14:2;15374:18;15303:40;15375:9;15383:1;15375:9;;;;15374:18;:::i;:::-;15357:35;-1:-1:-1;15406:21:2;;;;;;:::i;:::-;;-1:-1:-1;15441:10:2;15450:1;15441:10;;:::i;:::-;;;15210:252;;;15205:3;;;;;:::i;:::-;;;;15168:294;;;-1:-1:-1;15487:9:2;;14436:1068;-1:-1:-1;;;;;;14436:1068:2:o;11754:858::-;11849:6;11900:2;11849:6;;;;12000:507;12024:7;:14;12020:1;:18;12000:507;;;12064:6;;12063:31;;;;;12076:7;12084:1;12076:10;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;12076:10:2;-1:-1:-1;;;12076:17:2;12063:31;12059:85;;;12125:4;12114:15;;12059:85;12183:2;12168:7;12176:1;12168:10;;;;;;;;:::i;:::-;;;;;;;12162:23;;;;12161:54;;;12212:2;12197:7;12205:1;12197:10;;;;;;;;:::i;:::-;;;;;;;12191:23;;12161:54;12157:339;;;12239:8;12235:104;;;12271:49;;12284:5;12271:49;12316:4;;;;:::i;:::-;;;;12271:49;12356:10;12364:2;12356:10;;:::i;:::-;;;12427:2;12413:7;12421:1;12413:10;;;;;;;;:::i;:::-;;;;;12407:22;;;12413:10;;12407:22;:::i;:::-;12384:47;;12399:31;;12384:47;;:::i;:::-;;;12157:339;;;12462:7;12470:1;12462:10;;;;;;;;:::i;:::-;;;;;;;12477:2;12456:23;12452:44;;12492:4;12481:15;;12452:44;12040:3;;;;:::i;:::-;;;;12000:507;;;-1:-1:-1;12520:6:2;;12516:34;;12543:6;12547:2;12543;:6;:::i;:::-;12528:22;;;;:::i;:::-;;;12516:34;12564:8;12560:24;;;12574:10;-1:-1:-1;;12574:10:2;;:::i;:::-;;;12560:24;-1:-1:-1;12601:4:2;;11754:858;-1:-1:-1;;;;;11754:858:2:o;10760:1405:1:-;11220:21;11244:8;11253:6;11244:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11244:22:1;;;;;;;;;;;;-1:-1:-1;11360:23:1;;;;11352:69;;;;-1:-1:-1;;;11352:69:1;;33394:2:4;11352:69:1;;;33376:21:4;33433:2;33413:18;;;33406:30;33472:34;33452:18;;;33445:62;-1:-1:-1;;;33523:18:4;;;33516:31;33564:19;;11352:69:1;33192:397:4;11352:69:1;11593:6;11577:13;:22;11552:8;11561:6;11552:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11552:22:1;;;;;;;;;:47;;;;11720:8;;:16;;11729:6;;11720:16;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11720:22:1;;;;;;;;;;;:27;;11716:93;;11796:1;11764:12;11777:6;11764:20;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;11716:93:1;11948:8;11957:6;11948:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11948:20:1;;;;;;;;;;;:25;:39;;;;;11986:1;11977:6;:10;11948:39;11944:105;;;12036:1;12004:12;12017:6;12004:20;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;11944:105:1;12151:6;12127:8;12136:6;12127:16;;;;;;:::i;:::-;;;;;;;;;;;;;:20;12144:2;-1:-1:-1;;;;;12127:20:1;-1:-1:-1;;;;;12127:20:1;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;10760:1405:1:o;441:345:3:-;553:18;589:15;:54;;;;;;;;;;;;;;;;;654:29;;;;;;;;;;;-1:-1:-1;;;654:29:3;;;;;;;;694:22;;;;;;;;;;-1:-1:-1;;;694:22:3;;;;741:36;;589:54;;-1:-1:-1;654:29:3;;741:36;;589:54;;761:4;;654:29;;770:3;;694:22;;741:36;;:::i;:::-;;;;;;;;;;;;;727:51;;578:208;;;441:345;;;;:::o;5978:2269:1:-;6639:10;6626:9;:23;;6618:63;;;;-1:-1:-1;;;6618:63:1;;34918:2:4;6618:63:1;;;34900:21:4;34957:2;34937:18;;;34930:30;34996:29;34976:18;;;34969:57;35043:18;;6618:63:1;34716:351:4;6618:63:1;6773:27;6803:12;6816:6;6803:20;;;;;;:::i;:::-;;;;;;;;;;;;;;6937:17;;;;6803:20;;-1:-1:-1;;;;;;6937:17:1;:31;6929:64;;;;-1:-1:-1;;;6929:64:1;;35274:2:4;6929:64:1;;;35256:21:4;35313:2;35293:18;;;35286:30;-1:-1:-1;;;35332:18:4;;;35325:50;35392:18;;6929:64:1;35072:344:4;6929:64:1;7079:8;:22;7095:6;7079:8;:22;:::i;:::-;-1:-1:-1;7112:18:1;;;:30;;;7153:18;;;:30;;;7194:17;;;:30;;-1:-1:-1;;;;;;7194:30:1;7214:10;7194:30;;;7304:15;7282:19;;;:37;7368:26;;;;:46;;;7425:18;;;:30;;;7466:16;;;:26;;;7579:24;;1059:19:0;;1077:1;1059:19;;;970:127;7579:24:1;7676:10;:23;;;;;;;-1:-1:-1;7676:23:1;;;;;;;7692:6;7676:23;;:::i;:::-;-1:-1:-1;7801:5:1;;7785:34;;-1:-1:-1;;;;;7801:5:1;7809:9;7785:7;:34::i;:::-;7917:12;;7913:327;;7978:7;7946:8;7955:6;7946:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7963:10;7946:28;;;;;;;;:39;;:28;;;:39;;;;;:::i;:::-;;;;;;;;8074:7;8055:8;:15;;;:26;;;;;;;:::i;:::-;;;;;;;;8176:1;8156:8;:16;;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;7913:327:1;6526:1721;5978:2269;;;;;;:::o;11608:106:2:-;11667:6;11692:15;11701:2;11705:1;11692:8;:15::i;12650:515:1:-;13151:6;13120:10;13131:6;13120:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13120:24:1;;;;;;;;;;;;;:28;;;;;;;;;;;;;:37;-1:-1:-1;;12650:515:1:o;13751:678::-;14263:1;14223:10;14234:6;14223:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14223:24:1;;;;;;;;;;;;14248:10;14223:36;;;;;;;;:41;;14215:76;;;;-1:-1:-1;;;14215:76:1;;35623:2:4;14215:76:1;;;35605:21:4;35662:2;35642:18;;;35635:30;-1:-1:-1;;;35681:18:4;;;35674:52;35743:18;;14215:76:1;35421:346:4;14215:76:1;14381:40;14396:6;14404:4;14410:2;14414:6;14381:14;:40::i;:::-;13751:678;;;;:::o;1718:234:2:-;1795:13;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;1795:13:2;1810:14;1840:15;1858:16;;;;;;;;1865:1;1858:16;;;;1868:1;1858:16;;;;-1:-1:-1;;1858:16:2;;;1840:34;;1884:16;1915:6;1903:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;1940:1:2;;1884:38;;-1:-1:-1;1718:234:2;;-1:-1:-1;;;1718:234:2:o;1958:472::-;2073:4;2079:12;;:::i;:::-;2129:6;:13;2111:6;:14;;;:31;2107:142;;2205:5;2212:6;2235:1;2219:6;:13;:17;;;;:::i;:::-;2212:25;;;;;;;;:::i;:::-;;;;;;;2197:41;;;;;;2107:142;2279:48;;;;;;;;-1:-1:-1;2279:48:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2344:14;;;;2337:22;;2279:48;;2337:6;;:22;;;;;;:::i;:::-;;;;;;:30;;;;2377:6;:14;;:16;;;;;;;;:::i;:::-;;;-1:-1:-1;2411:4:2;;-1:-1:-1;2417:5:2;-1:-1:-1;1958:472:2;;;;;;:::o;2760:1601::-;2930:10;;2895:7;;;2972:18;;:::i;:::-;3000:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;3023:1270:2;3043:8;;3030:10;;:21;3023:1270;;;3081:8;3092:1;3094:6;:10;;;3092:13;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;3092:13:2;;-1:-1:-1;;;;3162:8:2;;;3158:346;;3209:29;3223:6;3231;3209:13;:29::i;:::-;3190:48;;-1:-1:-1;3190:48:2;-1:-1:-1;3190:48:2;3256:121;;-1:-1:-1;;;3292:18:2;;-1:-1:-1;1451:1:2;3332:26;;3256:121;3394:56;3404:5;3411:15;3428:9;:5;3436:1;3428:9;:::i;:::-;3439:10;;3394:9;:56::i;:::-;1309:1;3468:21;;;;;;;;3158:346;3534:2;3522:8;;;;:14;:43;;;;-1:-1:-1;3557:8:2;;3540:10;;:14;;3553:1;3540:14;:::i;:::-;:25;3522:43;3518:765;;;3644:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;3701:10:2;;3699:13;;:1;;3701:10;3699:13;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3699:13:2;-1:-1:-1;;;3699:20:2;;:64;;;3743:1;3745:6;:10;;;3743:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3743:13:2;-1:-1:-1;;;3743:20:2;3699:64;:109;;;;3787:1;3789:6;:10;;;3787:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3787:13:2;-1:-1:-1;;;3787:21:2;3699:109;:153;;;;3832:1;3834:6;:10;;;3832:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3832:13:2;-1:-1:-1;;;3832:20:2;3699:153;:197;;;;3876:1;3878:6;:10;;;3876:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3876:13:2;-1:-1:-1;;;3876:20:2;3699:197;:241;;;;3920:1;3922:6;:10;;;3920:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3920:13:2;-1:-1:-1;;;3920:20:2;3699:241;:285;;;;3964:1;3966:6;:10;;;3964:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3964:13:2;-1:-1:-1;;;3964:20:2;3699:285;:329;;;;4008:1;4010:6;:10;;;4008:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4008:13:2;-1:-1:-1;;;4008:20:2;3699:329;3674:595;;;4069:8;;;3674:595;-1:-1:-1;;;4176:18:2;;-1:-1:-1;1361:1:2;4216:34;;3674:595;3067:1226;3023:1270;3053:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;3023:1270:2;;;-1:-1:-1;;4302:18:2;;-1:-1:-1;1405:1:2;2760:1601;;;;;:::o;4367:1240::-;4568:10;;4505:7;;;;;;4628:18;;:::i;:::-;4676:8;;4663:10;;:21;4656:535;;;4718:1;4720:6;:10;;;4718:13;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4718:13:2;;-1:-1:-1;;;;4766:8:2;;;:37;;-1:-1:-1;;;;;;;;;;4794:9:2;;;4766:37;:66;;;-1:-1:-1;;;;;;;;;;4823:9:2;;;4766:66;:95;;;-1:-1:-1;;;;;;;;;;4852:9:2;;;4766:95;:123;;;-1:-1:-1;;;;;;;;;;4881:8:2;;;4766:123;:152;;;-1:-1:-1;;;;;;;;;;4909:9:2;;;4766:152;:181;;;-1:-1:-1;;;;;;;;;;4938:9:2;;;4766:181;4745:285;;;4988:4;4980:12;;5010:5;;4745:285;5058:2;5047:8;;;;:13;;:31;;-1:-1:-1;5075:3:2;5064:8;;;;:14;5047:31;5043:138;;;-1:-1:-1;;;5098:18:2;;-1:-1:-1;1361:1:2;;-1:-1:-1;5134:32:2;;5043:138;4686:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;4656:535:2;;;5205:5;5200:93;;-1:-1:-1;;;5226:18:2;;-1:-1:-1;1405:1:2;;-1:-1:-1;5258:24:2;;5200:93;5347:29;5361:6;5369;5347:13;:29::i;:::-;5328:48;;-1:-1:-1;5328:48:2;-1:-1:-1;5328:48:2;5386:97;;-1:-1:-1;;;5414:18:2;;-1:-1:-1;1451:1:2;;-1:-1:-1;5446:26:2;;5386:97;5492:55;5502:5;5509:18;5529:5;5536:6;:10;;;5492:9;:55::i;:::-;5557:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;1309:1:2;;4367:1240;-1:-1:-1;;;;;;;;;4367:1240:2:o;15510:317::-;15560:5;15589:10;;;;15634:2;15627:9;;;;;:22;;;15647:2;15640:3;:9;;;;15627:22;15623:68;;;15672:8;15678:2;15672:3;:8;:::i;15623:68::-;15725:2;15718:3;:9;;;;:22;;;;;15738:2;15731:3;:9;;;;15718:22;15714:68;;;15763:8;15769:2;15763:3;:8;:::i;15714:68::-;15812:8;15818:2;15812:3;:8;:::i;2436:318::-;2584:5;2601:8;2584:25;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2619:11:2;;;:19;;;;2665:4;2648:14;;;:21;;;2679:9;;;:15;;;;2704:12;;;:19;-1:-1:-1;2648:21:2;2733:10;;;;:14;2436:318::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:250:4:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:4;238:16;;231:27;14:250::o;269:289::-;400:3;438:6;432:13;454:66;513:6;508:3;501:4;493:6;489:17;454:66;:::i;:::-;536:16;;;;;269:289;-1:-1:-1;;269:289:4:o;908:127::-;969:10;964:3;960:20;957:1;950:31;1000:4;997:1;990:15;1024:4;1021:1;1014:15;1040:719;1083:5;1136:3;1129:4;1121:6;1117:17;1113:27;1103:55;;1154:1;1151;1144:12;1103:55;1190:6;1177:20;1216:18;1253:2;1249;1246:10;1243:36;;;1259:18;;:::i;:::-;1334:2;1328:9;1302:2;1388:13;;-1:-1:-1;;1384:22:4;;;1408:2;1380:31;1376:40;1364:53;;;1432:18;;;1452:22;;;1429:46;1426:72;;;1478:18;;:::i;:::-;1518:10;1514:2;1507:22;1553:2;1545:6;1538:18;1599:3;1592:4;1587:2;1579:6;1575:15;1571:26;1568:35;1565:55;;;1616:1;1613;1606:12;1565:55;1680:2;1673:4;1665:6;1661:17;1654:4;1646:6;1642:17;1629:54;1727:1;1720:4;1715:2;1707:6;1703:15;1699:26;1692:37;1747:6;1738:15;;;;;;1040:719;;;;:::o;1764:131::-;-1:-1:-1;;;;;1839:31:4;;1829:42;;1819:70;;1885:1;1882;1875:12;1819:70;1764:131;:::o;1900:457::-;1978:6;1986;2039:2;2027:9;2018:7;2014:23;2010:32;2007:52;;;2055:1;2052;2045:12;2007:52;2095:9;2082:23;2128:18;2120:6;2117:30;2114:50;;;2160:1;2157;2150:12;2114:50;2183;2225:7;2216:6;2205:9;2201:22;2183:50;:::i;:::-;2173:60;;;2283:2;2272:9;2268:18;2255:32;2296:31;2321:5;2296:31;:::i;:::-;2346:5;2336:15;;;1900:457;;;;;:::o;2544:180::-;2603:6;2656:2;2644:9;2635:7;2631:23;2627:32;2624:52;;;2672:1;2669;2662:12;2624:52;-1:-1:-1;2695:23:4;;2544:180;-1:-1:-1;2544:180:4:o;2729:271::-;2771:3;2809:5;2803:12;2836:6;2831:3;2824:19;2852:76;2921:6;2914:4;2909:3;2905:14;2898:4;2891:5;2887:16;2852:76;:::i;:::-;2982:2;2961:15;-1:-1:-1;;2957:29:4;2948:39;;;;2989:4;2944:50;;2729:271;-1:-1:-1;;2729:271:4:o;3005:220::-;3154:2;3143:9;3136:21;3117:4;3174:45;3215:2;3204:9;3200:18;3192:6;3174:45;:::i;3230:456::-;3307:6;3315;3323;3376:2;3364:9;3355:7;3351:23;3347:32;3344:52;;;3392:1;3389;3382:12;3344:52;3431:9;3418:23;3450:31;3475:5;3450:31;:::i;:::-;3500:5;-1:-1:-1;3557:2:4;3542:18;;3529:32;3570:33;3529:32;3570:33;:::i;:::-;3230:456;;3622:7;;-1:-1:-1;;;3676:2:4;3661:18;;;;3648:32;;3230:456::o;3691:323::-;3767:6;3775;3828:2;3816:9;3807:7;3803:23;3799:32;3796:52;;;3844:1;3841;3834:12;3796:52;3883:9;3870:23;3902:31;3927:5;3902:31;:::i;:::-;3952:5;4004:2;3989:18;;;;3976:32;;-1:-1:-1;;;3691:323:4:o;4019:743::-;4126:6;4134;4142;4195:2;4183:9;4174:7;4170:23;4166:32;4163:52;;;4211:1;4208;4201:12;4163:52;4251:9;4238:23;4280:18;4321:2;4313:6;4310:14;4307:34;;;4337:1;4334;4327:12;4307:34;4360:50;4402:7;4393:6;4382:9;4378:22;4360:50;:::i;:::-;4350:60;;4463:2;4452:9;4448:18;4435:32;4419:48;;4492:2;4482:8;4479:16;4476:36;;;4508:1;4505;4498:12;4476:36;4531:52;4575:7;4564:8;4553:9;4549:24;4531:52;:::i;:::-;4521:62;;4636:2;4625:9;4621:18;4608:32;4592:48;;4665:2;4655:8;4652:16;4649:36;;;4681:1;4678;4671:12;4649:36;;4704:52;4748:7;4737:8;4726:9;4722:24;4704:52;:::i;:::-;4694:62;;;4019:743;;;;;:::o;4767:381::-;4962:2;4951:9;4944:21;4925:4;4988:45;5029:2;5018:9;5014:18;5006:6;4988:45;:::i;:::-;5081:9;5073:6;5069:22;5064:2;5053:9;5049:18;5042:50;5109:33;5135:6;5127;5109:33;:::i;:::-;5101:41;4767:381;-1:-1:-1;;;;;4767:381:4:o;5153:598::-;5240:6;5248;5256;5309:2;5297:9;5288:7;5284:23;5280:32;5277:52;;;5325:1;5322;5315:12;5277:52;5365:9;5352:23;5398:18;5390:6;5387:30;5384:50;;;5430:1;5427;5420:12;5384:50;5453;5495:7;5486:6;5475:9;5471:22;5453:50;:::i;:::-;5443:60;;;5553:2;5542:9;5538:18;5525:32;5566:31;5591:5;5566:31;:::i;:::-;5616:5;-1:-1:-1;5673:2:4;5658:18;;5645:32;5686:33;5645:32;5686:33;:::i;:::-;5738:7;5728:17;;;5153:598;;;;;:::o;5964:1346::-;6128:6;6136;6144;6152;6160;6168;6221:3;6209:9;6200:7;6196:23;6192:33;6189:53;;;6238:1;6235;6228:12;6189:53;6278:9;6265:23;6307:18;6348:2;6340:6;6337:14;6334:34;;;6364:1;6361;6354:12;6334:34;6387:50;6429:7;6420:6;6409:9;6405:22;6387:50;:::i;:::-;6377:60;;6490:2;6479:9;6475:18;6462:32;6446:48;;6519:2;6509:8;6506:16;6503:36;;;6535:1;6532;6525:12;6503:36;6558:52;6602:7;6591:8;6580:9;6576:24;6558:52;:::i;:::-;6548:62;;6663:2;6652:9;6648:18;6635:32;6619:48;;6692:2;6682:8;6679:16;6676:36;;;6708:1;6705;6698:12;6676:36;6731:52;6775:7;6764:8;6753:9;6749:24;6731:52;:::i;:::-;6721:62;;6836:2;6825:9;6821:18;6808:32;6792:48;;6865:2;6855:8;6852:16;6849:36;;;6881:1;6878;6871:12;6849:36;6904:52;6948:7;6937:8;6926:9;6922:24;6904:52;:::i;:::-;6894:62;;7009:3;6998:9;6994:19;6981:33;6965:49;;7039:2;7029:8;7026:16;7023:36;;;7055:1;7052;7045:12;7023:36;7078:52;7122:7;7111:8;7100:9;7096:24;7078:52;:::i;:::-;7068:62;;7183:3;7172:9;7168:19;7155:33;7139:49;;7213:2;7203:8;7200:16;7197:36;;;7229:1;7226;7219:12;7197:36;;7252:52;7296:7;7285:8;7274:9;7270:24;7252:52;:::i;:::-;7242:62;;;5964:1346;;;;;;;;:::o;7315:322::-;7384:6;7437:2;7425:9;7416:7;7412:23;7408:32;7405:52;;;7453:1;7450;7443:12;7405:52;7493:9;7480:23;7526:18;7518:6;7515:30;7512:50;;;7558:1;7555;7548:12;7512:50;7581;7623:7;7614:6;7603:9;7599:22;7581:50;:::i;:::-;7571:60;7315:322;-1:-1:-1;;;;7315:322:4:o;7642:913::-;8006:4;8035:3;8065:2;8054:9;8047:21;8085:45;8126:2;8115:9;8111:18;8103:6;8085:45;:::i;:::-;8161:2;8146:18;;8139:34;;;;-1:-1:-1;;8204:2:4;8189:18;;8182:34;;;;8247:2;8232:18;;8225:34;;;;-1:-1:-1;;;;;8296:32:4;;;;8290:3;8275:19;;8268:61;8316:3;8345:19;;8338:35;;;;8404:3;8389:19;;8382:35;8448:3;8433:19;;8426:35;8492:3;8477:19;;8470:35;8536:3;8521:19;;;8514:35;8077:53;7642:913;-1:-1:-1;7642:913:4:o;8560:543::-;8648:6;8656;8709:2;8697:9;8688:7;8684:23;8680:32;8677:52;;;8725:1;8722;8715:12;8677:52;8765:9;8752:23;8794:18;8835:2;8827:6;8824:14;8821:34;;;8851:1;8848;8841:12;8821:34;8874:50;8916:7;8907:6;8896:9;8892:22;8874:50;:::i;:::-;8864:60;;8977:2;8966:9;8962:18;8949:32;8933:48;;9006:2;8996:8;8993:16;8990:36;;;9022:1;9019;9012:12;8990:36;;9045:52;9089:7;9078:8;9067:9;9063:24;9045:52;:::i;:::-;9035:62;;;8560:543;;;;;:::o;9108:944::-;9234:6;9242;9250;9258;9311:3;9299:9;9290:7;9286:23;9282:33;9279:53;;;9328:1;9325;9318:12;9279:53;9368:9;9355:23;9397:18;9438:2;9430:6;9427:14;9424:34;;;9454:1;9451;9444:12;9424:34;9477:50;9519:7;9510:6;9499:9;9495:22;9477:50;:::i;:::-;9467:60;;9580:2;9569:9;9565:18;9552:32;9536:48;;9609:2;9599:8;9596:16;9593:36;;;9625:1;9622;9615:12;9593:36;9648:52;9692:7;9681:8;9670:9;9666:24;9648:52;:::i;:::-;9638:62;;9753:2;9742:9;9738:18;9725:32;9709:48;;9782:2;9772:8;9769:16;9766:36;;;9798:1;9795;9788:12;9766:36;9821:52;9865:7;9854:8;9843:9;9839:24;9821:52;:::i;:::-;9811:62;;9926:2;9915:9;9911:18;9898:32;9882:48;;9955:2;9945:8;9942:16;9939:36;;;9971:1;9968;9961:12;9939:36;;9994:52;10038:7;10027:8;10016:9;10012:24;9994:52;:::i;:::-;9984:62;;;9108:944;;;;;;;:::o;10057:380::-;10136:1;10132:12;;;;10179;;;10200:61;;10254:4;10246:6;10242:17;10232:27;;10200:61;10307:2;10299:6;10296:14;10276:18;10273:38;10270:161;;10353:10;10348:3;10344:20;10341:1;10334:31;10388:4;10385:1;10378:15;10416:4;10413:1;10406:15;10270:161;;10057:380;;;:::o;10791:127::-;10852:10;10847:3;10843:20;10840:1;10833:31;10883:4;10880:1;10873:15;10907:4;10904:1;10897:15;10923:125;10988:9;;;11009:10;;;11006:36;;;11022:18;;:::i;12456:127::-;12517:10;12512:3;12508:20;12505:1;12498:31;12548:4;12545:1;12538:15;12572:4;12569:1;12562:15;17158:545;17260:2;17255:3;17252:11;17249:448;;;17296:1;17321:5;17317:2;17310:17;17366:4;17362:2;17352:19;17436:2;17424:10;17420:19;17417:1;17413:27;17407:4;17403:38;17472:4;17460:10;17457:20;17454:47;;;-1:-1:-1;17495:4:4;17454:47;17550:2;17545:3;17541:12;17538:1;17534:20;17528:4;17524:31;17514:41;;17605:82;17623:2;17616:5;17613:13;17605:82;;;17668:17;;;17649:1;17638:13;17605:82;;;17609:3;;;17158:545;;;:::o;17879:1352::-;18005:3;17999:10;18032:18;18024:6;18021:30;18018:56;;;18054:18;;:::i;:::-;18083:97;18173:6;18133:38;18165:4;18159:11;18133:38;:::i;:::-;18127:4;18083:97;:::i;:::-;18235:4;;18299:2;18288:14;;18316:1;18311:663;;;;19018:1;19035:6;19032:89;;;-1:-1:-1;19087:19:4;;;19081:26;19032:89;-1:-1:-1;;17836:1:4;17832:11;;;17828:24;17824:29;17814:40;17860:1;17856:11;;;17811:57;19134:81;;18281:944;;18311:663;17105:1;17098:14;;;17142:4;17129:18;;-1:-1:-1;;18347:20:4;;;18465:236;18479:7;18476:1;18473:14;18465:236;;;18568:19;;;18562:26;18547:42;;18660:27;;;;18628:1;18616:14;;;;18495:19;;18465:236;;;18469:3;18729:6;18720:7;18717:19;18714:201;;;18790:19;;;18784:26;-1:-1:-1;;18873:1:4;18869:14;;;18885:3;18865:24;18861:37;18857:42;18842:58;18827:74;;18714:201;-1:-1:-1;;;;;18961:1:4;18945:14;;;18941:22;18928:36;;-1:-1:-1;17879:1352:4:o;21673:277::-;21740:6;21793:2;21781:9;21772:7;21768:23;21764:32;21761:52;;;21809:1;21806;21799:12;21761:52;21841:9;21835:16;21894:5;21887:13;21880:21;21873:5;21870:32;21860:60;;21916:1;21913;21906:12;22315:1540;22734:3;22772:6;22766:13;22798:4;22811:64;22868:6;22863:3;22858:2;22850:6;22846:15;22811:64;:::i;:::-;22938:13;;22897:16;;;;22960:68;22938:13;22897:16;22995:15;;;22960:68;:::i;:::-;23095:13;;23050:20;;;23117:68;23095:13;23050:20;23152:15;;;23117:68;:::i;:::-;23252:13;;23207:20;;;23274:68;23252:13;23207:20;23309:15;;;23274:68;:::i;:::-;23409:13;;23364:20;;;23431:68;23409:13;23364:20;23466:15;;;23431:68;:::i;:::-;23566:13;;23521:20;;;23588:68;23566:13;23521:20;23623:15;;;23588:68;:::i;:::-;23723:13;;23678:20;;;23745:68;23723:13;23678:20;23780:15;;;23745:68;:::i;:::-;23829:20;;;;;22315:1540;-1:-1:-1;;;;;;;;;;22315:1540:4:o;23860:1745::-;24327:3;24365:6;24359:13;24391:4;24404:64;24461:6;24456:3;24451:2;24443:6;24439:15;24404:64;:::i;:::-;24531:13;;24490:16;;;;24553:68;24531:13;24490:16;24588:15;;;24553:68;:::i;:::-;24688:13;;24643:20;;;24710:68;24688:13;24643:20;24745:15;;;24710:68;:::i;:::-;24845:13;;24800:20;;;24867:68;24845:13;24800:20;24902:15;;;24867:68;:::i;:::-;25002:13;;24957:20;;;25024:68;25002:13;24957:20;25059:15;;;25024:68;:::i;:::-;25159:13;;25114:20;;;25181:68;25159:13;25114:20;25216:15;;;25181:68;:::i;:::-;25316:13;;25271:20;;;25338:68;25316:13;25271:20;25373:15;;;25338:68;:::i;:::-;25473:13;;25428:20;;;25495:68;25473:13;25428:20;25530:15;;;25495:68;:::i;:::-;25579:20;;;;;23860:1745;-1:-1:-1;;;;;;;;;;;23860:1745:4:o;25610:1333::-;25979:3;26017:6;26011:13;26043:4;26056:64;26113:6;26108:3;26103:2;26095:6;26091:15;26056:64;:::i;:::-;26183:13;;26142:16;;;;26205:68;26183:13;26142:16;26240:15;;;26205:68;:::i;:::-;26340:13;;26295:20;;;26362:68;26340:13;26295:20;26397:15;;;26362:68;:::i;:::-;26497:13;;26452:20;;;26519:68;26497:13;26452:20;26554:15;;;26519:68;:::i;:::-;26654:13;;26609:20;;;26676:68;26654:13;26609:20;26711:15;;;26676:68;:::i;:::-;26811:13;;26766:20;;;26833:68;26811:13;26766:20;26868:15;;;26833:68;:::i;:::-;26917:20;;;;;25610:1333;-1:-1:-1;;;;;;;;;25610:1333:4:o;26948:1884::-;27463:3;27501:6;27495:13;27517:66;27576:6;27571:3;27564:4;27556:6;27552:17;27517:66;:::i;:::-;27614:6;27608:13;27630:81;27702:8;27693:6;27688:3;27684:16;27677:4;27669:6;27665:17;27630:81;:::i;:::-;27789:13;;27737:16;;;27733:31;;27811:70;27789:13;27733:31;27858:4;27846:17;;27811:70;:::i;:::-;27912:6;27906:13;27928:85;28004:8;27993;27986:5;27982:20;27975:4;27967:6;27963:17;27928:85;:::i;:::-;28095:13;;28039:20;;;;28035:35;;28117:70;28095:13;28035:35;28164:4;28152:17;;28117:70;:::i;:::-;28218:6;28212:13;28234:85;28310:8;28299;28292:5;28288:20;28281:4;28273:6;28269:17;28234:85;:::i;:::-;28401:13;;28345:20;;;;28341:35;;28423:70;28401:13;28341:35;28470:4;28458:17;;28423:70;:::i;:::-;28524:6;28518:13;28540:85;28616:8;28605;28598:5;28594:20;28587:4;28579:6;28575:17;28540:85;:::i;:::-;28704:13;;28648:20;;;;28644:35;;28726:67;28704:13;28644:35;28773:4;28761:17;;28726:67;:::i;:::-;28809:17;;26948:1884;-1:-1:-1;;;;;;;;;;;26948:1884:4:o;28837:168::-;28910:9;;;28941;;28958:15;;;28952:22;;28938:37;28928:71;;28979:18;;:::i;29010:217::-;29050:1;29076;29066:132;;29120:10;29115:3;29111:20;29108:1;29101:31;29155:4;29152:1;29145:15;29183:4;29180:1;29173:15;29066:132;-1:-1:-1;29212:9:4;;29010:217::o;29790:135::-;29829:3;29850:17;;;29847:43;;29870:18;;:::i;:::-;-1:-1:-1;29917:1:4;29906:13;;29790:135::o;29930:175::-;29967:3;30011:4;30004:5;30000:16;30040:4;30031:7;30028:17;30025:43;;30048:18;;:::i;:::-;30097:1;30084:15;;29930:175;-1:-1:-1;;29930:175:4:o;30110:127::-;30171:10;30166:3;30162:20;30159:1;30152:31;30202:4;30199:1;30192:15;30226:4;30223:1;30216:15;30242:128;30309:9;;;30330:11;;;30327:37;;;30344:18;;:::i;30375:136::-;30414:3;30442:5;30432:39;;30451:18;;:::i;:::-;-1:-1:-1;;;30487:18:4;;30375:136::o;30859:182::-;-1:-1:-1;;;;;30966:10:4;;;30978;;;30962:27;;31001:11;;;30998:37;;;31015:18;;:::i;:::-;30998:37;30859:182;;;;:::o;31046:148::-;31134:4;31113:12;;;31127;;;31109:31;;31152:13;;31149:39;;;31168:18;;:::i;31199:237::-;31271:9;;;31238:7;31296:9;;-1:-1:-1;;;31307:18:4;;31292:34;31289:60;;;31329:18;;:::i;:::-;31402:1;31393:7;31388:16;31385:1;31382:23;31378:1;31371:9;31368:38;31358:72;;31410:18;;:::i;31441:151::-;31531:4;31524:12;;;31510;;;31506:31;;31549:14;;31546:40;;;31566:18;;:::i;31597:216::-;31661:9;;;31689:11;;;31636:3;31719:9;;31747:10;;31743:19;;31772:10;;31764:19;;31740:44;31737:70;;;31787:18;;:::i;:::-;31737:70;;31597:216;;;;:::o;31818:422::-;31907:1;31950:5;31907:1;31964:270;31985:7;31975:8;31972:21;31964:270;;;32044:4;32040:1;32036:6;32032:17;32026:4;32023:27;32020:53;;;32053:18;;:::i;:::-;32103:7;32093:8;32089:22;32086:55;;;32123:16;;;;32086:55;32202:22;;;;32162:15;;;;31964:270;;;31968:3;31818:422;;;;;:::o;32245:806::-;32294:5;32324:8;32314:80;;-1:-1:-1;32365:1:4;32379:5;;32314:80;32413:4;32403:76;;-1:-1:-1;32450:1:4;32464:5;;32403:76;32495:4;32513:1;32508:59;;;;32581:1;32576:130;;;;32488:218;;32508:59;32538:1;32529:10;;32552:5;;;32576:130;32613:3;32603:8;32600:17;32597:43;;;32620:18;;:::i;:::-;-1:-1:-1;;32676:1:4;32662:16;;32691:5;;32488:218;;32790:2;32780:8;32777:16;32771:3;32765:4;32762:13;32758:36;32752:2;32742:8;32739:16;32734:2;32728:4;32725:12;32721:35;32718:77;32715:159;;;-1:-1:-1;32827:19:4;;;32859:5;;32715:159;32906:34;32931:8;32925:4;32906:34;:::i;:::-;32976:6;32972:1;32968:6;32964:19;32955:7;32952:32;32949:58;;;32987:18;;:::i;:::-;33025:20;;32245:806;-1:-1:-1;;;32245:806:4:o;33056:131::-;33116:5;33145:36;33172:8;33166:4;33145:36;:::i;33594:1117::-;33917:3;33955:6;33949:13;33971:66;34030:6;34025:3;34018:4;34010:6;34006:17;33971:66;:::i;:::-;34100:13;;34059:16;;;;34122:70;34100:13;34059:16;34169:4;34157:17;;34122:70;:::i;:::-;34259:13;;34214:20;;;34281:70;34259:13;34214:20;34328:4;34316:17;;34281:70;:::i;:::-;34418:13;;34373:20;;;34440:70;34418:13;34373:20;34487:4;34475:17;;34440:70;:::i;:::-;34577:13;;34532:20;;;34599:70;34577:13;34532:20;34646:4;34634:17;;34599:70;:::i;:::-;34685:20;;33594:1117;-1:-1:-1;;;;;;;33594:1117:4:o
Swarm Source
ipfs://2514d7d118e1eba90983b9f9186ef581a9ba36c8e0c56b47f6eb90257980b118
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.