Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Worm1000Artwork
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * ,--------.,--. ,--. ,--. ,--. ,---. ,--. * '--. .--'| ,---. ,---. | | | | ,---. ,--.--.,--,--,--. ,---. `--'/ .-',-' '-. ,---. * | | | .-. || .-. : | |.'.| || .-. || .--'| | | .-. |,--.| `-,'-. .-'( .-' * | | | | | |\ --. | ,'. |' '-' '| | | | | | ' '-' '| || .-' | | .-' `) * `--' `--' `--' `----' '--' '--' `---' `--' `--`--`--' .`- / `--'`--' `--' `----' * ,--. ,--. ,--. ,--. ,--. ,--. `---' * ,-' '-.| ,---. `--' ,---. | |-. | | ,---. ,---. ,---. `--',--,--, ,---. * '-. .-'| .-. |,--.( .-' | .-. '| || .-. :( .-' ( .-' ,--.| \| .-. | * | | | | | || |.-' `) | `-' || |\ --..-' `).-' `)| || || |' '-' ' * `--' `--' `--'`--'`----' `---' `--' `----'`----' `----' `--'`--''--'.`- / * ,--. ,--. ,--. ,---.,--. ,--.`---' * ,-' '-. ,---. ,-' '-.| ,---. ,---. / .-'`--',--.--. ,---.,-' '-. * '-. .-'| .-. | '-. .-'| .-. || .-. : | `-,,--.| .--'( .-''-. .-' * | | ' '-' ' | | | | | |\ --. | .-'| || | .-' `) | | * `--' `---' `--' `--' `--' `----' `--' `--'`--' `----' `--' * ,--. ,--. ,--. ,--. ,------. ,--. ,--. ,--. * / | / \ / \ / \ | .-. \ `--' ,---. ,---.`--' ,---. | | ,---. ,---. * `| || () || () || () | | | \ :,--.( .-' | .--',--.| .-. || || .-. :( .-' * | | \ / \ / \ / | '--' /| |.-' `)\ `--.| || '-' '| |\ --..-' `).--. * `--' `--' `--' `--' `-------' `--'`----' `---'`--'| |-' `--' `----'`----' '--' * `--' * * @title Worm1000Artwork * @author minimizer <[email protected]>; https://minimizer.art/ * * Praise Be! The Worm hereby offers this gift to the first 1000 Disciples that have helped It with Its mission * to visit every wallet on the Ethereum blockchain. * * The Worm, The Ambition Team, and minimizer have teamed together to produce this 100% fully on-chain generative artwork. * For the fully on-chain appreciators, the entire artwork for all 1000 pieces can be created from a single contract, * created in a single transaction, with no additional data subsequently uploaded, in a fun exercise of solidity golfing. * * The main contract offers the tokenURI method which will generate a full base64-encoded JSON metadata for the token including * the artwork in SVG format. The art is precomputed, however the holder of the token can acquire more lights and the artwork * will be updated to include them, and therefore the number of lights held is a parameter to the tokenURI method. * There is also an option to generate each frame of an animation of all 1000 pieces which depicts how all 1000 Disciples have * come together to build the loving community around The Worm. * * Apart from the lights held, the artwork is effectively frozen with the owner of this contract, minimizer, having no * ability to make any changes to the art in the future. */ import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/Base64.sol"; import "./lib/Storage.sol"; import "./lib/XML.sol"; import "./IWorm1000Artwork.sol"; import "./HeartField.sol"; import "./Visuals.sol"; import "./Renderer.sol"; import "./StringFragments.sol"; contract Worm1000Artwork is IWorm1000Artwork, Ownable { // The token contract is the only contract allowed to make an on-chain call to the artwork. // Upon deployment this setting will be frozen forever address public tokenContract; bool public tokenContractFrozen = false; // The address to which a split of royalties is sent address public royaltyRecipient; // All the data below is used to generate the artwork, passed into the constructor and frozen mapping(uint=>uint) private discipleStartingPointsPacked; mapping(uint=>uint) private discipleChapterNumbersPacked; mapping(uint=>uint) private discipleSpeedLevelsPacked; mapping(uint=>uint) private discipleSelfiePacked; mapping(uint=>string) private chapterNames; uint256 private chapterColorsPacked; uint256 private chapterShapesPacked; mapping(uint=>uint) private heartAngles; mapping(uint=>string) private stringFragments; uint private constant TOKENURI_MAX_LENGTH = 400000; // Constructor stores all artwork data for use in tokenURI. The data is packed efficiently to save gas constructor(uint256[] memory discipleStartingPointsPacked_, uint256[] memory discipleChapterNumbersPacked_, uint256[] memory discipleSpeedLevelsPacked_, uint256[] memory discipleSelfiePacked_, bytes memory chapterNamesPacked_, uint256 chapterColorsPacked_, uint256 chapterShapesPacked_, uint256[] memory heartAngles_, bytes memory stringFragmentsPacked_) { Storage.fillUintMapping(discipleStartingPointsPacked_, discipleStartingPointsPacked); Storage.fillUintMapping(discipleChapterNumbersPacked_, discipleChapterNumbersPacked); Storage.fillUintMapping(discipleSpeedLevelsPacked_, discipleSpeedLevelsPacked); Storage.fillUintMapping(discipleSelfiePacked_, discipleSelfiePacked); Storage.unpackAndFillStringMapping(chapterNamesPacked_, chapterNames); chapterColorsPacked = chapterColorsPacked_; chapterShapesPacked = chapterShapesPacked_; Storage.fillUintMapping(heartAngles_, heartAngles); Storage.unpackAndFillStringMapping(stringFragmentsPacked_, stringFragments); royaltyRecipient = owner(); } // Admin function to be used during deployment, to point the artwork to the token contract function setTokenContract(address tokenContract_) public onlyOwner { requireOrError(!tokenContractFrozen, StringFragment.ERROR_TOKEN_CONTRACT_FROZEN); tokenContract = tokenContract_; } // Upon successful deployment, the token contract is frozen function freezeTokenContract() public onlyOwner { tokenContractFrozen = true; } // Which address to direct royalties to, this setting is read by the token contract function setRoyaltyRecipient(address royaltyRecipient_) public onlyOwner { requireOrError(!Address.isContract(royaltyRecipient_), StringFragment.ERROR_ROYALTY_ADDRESS_IS_CONTRACT); royaltyRecipient = royaltyRecipient_; } // The below methods all extract and unpack if necessary the data for each disciple / chapter function getDiscipleChapter(uint discipleNumber) private view returns (uint) { unchecked { return Storage.getUnpacked((discipleNumber-1), 8, discipleChapterNumbersPacked); } } function getDiscipleSpeedLevel(uint discipleNumber) private view returns (uint) { unchecked { return Storage.getUnpacked((discipleNumber-1), 4, discipleSpeedLevelsPacked); } } function getDiscipleSelfie(uint discipleNumber) private view returns (bool) { unchecked { return Storage.getUnpacked((discipleNumber-1), 1, discipleSelfiePacked) > 0; } } function getStringFragmentWithOffset(StringFragment index, uint offset) private view returns (string memory) { unchecked { return stringFragments[uint(index)+offset]; } } function populateLineWithDiscipleInfo(uint discipleNumber, Line memory line) private view { unchecked { line.number = discipleNumber; line.chapter = getDiscipleChapter(discipleNumber); line.color = Color(Storage.extractBits(line.chapter, 4, chapterColorsPacked)); line.shape = Shape(Storage.extractBits(line.chapter, 4, chapterShapesPacked)); line.speedLevel = getDiscipleSpeedLevel(discipleNumber); setPointTo(line.startingPoint, int(Storage.getUnpacked((discipleNumber-1)*2 , 16, discipleStartingPointsPacked)), int(Storage.getUnpacked((discipleNumber-1)*2+1, 16, discipleStartingPointsPacked)) ); } } // The main method for generating the art. It takes 3 arguments: // mainDiscipleNumber: 1-1000 // numberOfLightsByLumenLevel: an array of 4 values indiciting the number of lights held at lumen levels 0, 1, 2 and 3 // animationView: boolean // false - generate the artwork as intended for each token // true - generate one frame of the composite animation // // This method can only be called on-chain from the token contract, but can be called by any end-user account without restriction function tokenURI(uint mainDiscipleNumber, uint[4] calldata numberOfLightsByLumenLevel, bool animationView) public view returns (string memory) { unchecked { requireOrError(msg.sender == tx.origin || msg.sender == tokenContract, StringFragment.ERROR_ONCHAIN_CALL_NOT_FROM_TOKEN_CONTRACT); requireOrError(mainDiscipleNumber >= 1 && mainDiscipleNumber <= 1000, StringFragment.ERROR_INVALID_DISCIPLE); Renderer.RenderData memory renderData = Renderer.initializeData(mainDiscipleNumber); renderData.fragments.getStringFragmentWithOffset = getStringFragmentWithOffset; HeartField memory field = HeartFieldLib.createField(Visuals.centerX, Visuals.centerY, heartAngles); uint maxDiscipleToDrawSmall = animationView ? mainDiscipleNumber : mainDiscipleNumber - 1; for(uint i=1;i<=maxDiscipleToDrawSmall;i++) { populateLineWithDiscipleInfo(i, renderData.discipleLine); Visuals.buildDiscipleLine(renderData.discipleLine, field); Renderer.addCurrentDiscipleLine(renderData); Renderer.updateDataToIncludeLine(renderData, renderData.discipleLine, renderData.discipleLine.numPoints, renderData.discipleLine.width/2); } if(!animationView) { populateLineWithDiscipleInfo(mainDiscipleNumber, renderData.discipleLine); populateLineWithDiscipleInfo(mainDiscipleNumber, renderData.wormLine); bool isSelfie = getDiscipleSelfie(mainDiscipleNumber) && !animationView; Visuals.buildMainDiscipleAndWormLines(renderData.discipleLine, renderData.wormLine, field, isSelfie); Renderer.updateDataToIncludeMainLine(renderData, renderData.discipleLine, isSelfie); Renderer.updateDataToIncludeMainLine(renderData, renderData.wormLine, isSelfie); } Renderer.calcResultFrames(renderData, animationView?200:0); Random memory starsRandom = RNG.createRandom(int32(uint32(mainDiscipleNumber))); uint starSize = Visuals.starSize(renderData.starsFrame); for(int lumenLevel=3;lumenLevel>=0;lumenLevel--) { uint lightSize = Visuals.lightSize(starSize, uint(lumenLevel)); Renderer.addStars(renderData, renderData.lights, lightSize, numberOfLightsByLumenLevel[uint(lumenLevel)], 300, starsRandom); } Renderer.addStars(renderData, renderData.stars, starSize, 50, 100, starsRandom); return generateTokenURI(mainDiscipleNumber, numberOfLightsByLumenLevel, Renderer.renderAll(renderData, animationView)); } } // Helper method to wrap the svg up into the metadata function generateTokenURI(uint mainDiscipleNumber, uint[4] calldata numberOfLightsByLumenLevel, string memory svg) private view returns (string memory) { unchecked { uint totalLights = numberOfLightsByLumenLevel[0]+numberOfLightsByLumenLevel[1]+numberOfLightsByLumenLevel[2]+numberOfLightsByLumenLevel[3]; uint highestLightTier = numberOfLightsByLumenLevel[3]>0?3 : numberOfLightsByLumenLevel[2]>0?2 : numberOfLightsByLumenLevel[1]>0?1 : 0; StringBuffer memory json = StringBufferLib.create(TOKENURI_MAX_LENGTH); append(json, StringFragment.JSON_1_NAME); json.add(uint16(mainDiscipleNumber)); append(json, StringFragment.JSON_2_DESCRIPTION_START); json.add(uint16(mainDiscipleNumber)); append(json, StringFragment.JSON_3_DESCRIPTION_END_CHAPTER); json.add(chapterNames[getDiscipleChapter(mainDiscipleNumber)]); if(totalLights>0) { append(json, StringFragment.JSON_4_TOTAL_LIGHTS); json.add(uint16(totalLights)); append(json, StringFragment.JSON_5_HIGHEST_LIGHT_TIER); appendOffset(json, StringFragment.LIGHT_TIER_0, highestLightTier); } append(json, StringFragment.JSON_6_SPEED); appendOffset(json, StringFragment.SPEED_NAME_1, getDiscipleSpeedLevel(mainDiscipleNumber)-1); append(json, StringFragment.JSON_7_EVOLUTION); appendOffset(json, StringFragment.EVOLUTION_THEWORM, uint(Visuals.evolution(mainDiscipleNumber))); append(json, StringFragment.JSON_8_EVOLUTION_CLOSE); if(getDiscipleSelfie(mainDiscipleNumber)) { append(json, StringFragment.JSON_9_SELFIE); } append(json, StringFragment.JSON_10_IMAGE); json.add(Base64.encode(bytes(svg))); append(json, StringFragment.JSON_11_IMAGE_CLOSE); return string(abi.encodePacked(getStringFragmentWithOffset(StringFragment.JSON_ENCODING, 0), Base64.encode(bytes(json.toString())))); } } //helper functions for tokenURI function appendOffset(StringBuffer memory buffer, StringFragment index, uint offset) private view { buffer.add(getStringFragmentWithOffset(index, offset)); } function append(StringBuffer memory buffer, StringFragment index) private view { appendOffset(buffer, index, 0); } //helper method for require function requireOrError(bool test, StringFragment message) private view { require(test, getStringFragmentWithOffset(message, 0)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol) pragma solidity ^0.8.0; /** * @dev Provides a set of functions to operate with Base64 strings. * * _Available since v4.5._ */ library Base64 { /** * @dev Base64 Encoding/Decoding Table */ string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /** * @dev Converts a `bytes` to its Bytes64 `string` representation. */ function encode(bytes memory data) internal pure returns (string memory) { /** * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol */ if (data.length == 0) return ""; // Loads the table into memory string memory table = _TABLE; // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter // and split into 4 numbers of 6 bits. // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up // - `data.length + 2` -> Round up // - `/ 3` -> Number of 3-bytes chunks // - `4 *` -> 4 characters for each chunk string memory result = new string(4 * ((data.length + 2) / 3)); /// @solidity memory-safe-assembly assembly { // Prepare the lookup table (skip the first "length" byte) let tablePtr := add(table, 1) // Prepare result pointer, jump over length let resultPtr := add(result, 32) // Run over the input, 3 bytes at a time for { let dataPtr := data let endPtr := add(data, mload(data)) } lt(dataPtr, endPtr) { } { // Advance 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // To write each character, shift the 3 bytes (18 bits) chunk // 4 times in blocks of 6 bits for each character (18, 12, 6, 0) // and apply logical AND with 0x3F which is the number of // the previous character in the ASCII table prior to the Base64 Table // The result is then added to the table to get the character to write, // and finally write it in the result pointer but with a left shift // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F)))) resultPtr := add(resultPtr, 1) // Advance } // When data `bytes` is not exactly 3 bytes long // it is padded with `=` characters at the end switch mod(mload(data), 3) case 1 { mstore8(sub(resultPtr, 1), 0x3d) mstore8(sub(resultPtr, 2), 0x3d) } case 2 { mstore8(sub(resultPtr, 1), 0x3d) } } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title HeartField * @author minimizer <[email protected]>; https://minimizer.art/ * * A simple flow field which goes around in a circle, or in a heart, or a blend of the two */ import "./lib/Coords.sol"; import "./lib/Trig.sol"; import "./lib/Storage.sol"; using HeartFieldLib for HeartField global; struct HeartField { Point center; uint16[361] heartAngles; } library HeartFieldLib { function createField(int centerX, int centerY, mapping(uint=>uint) storage heartAngles) internal view returns (HeartField memory field) { unchecked { setPointTo(field.center, centerX, centerY); for(uint i=0;i<=360;i++) { field.heartAngles[i] = uint16(Storage.getUnpacked(i, 16, heartAngles)); } } } function setNextPoint(HeartField memory field, Point memory current, int distance, int angleShift, uint pctHeart, Point memory result) internal pure { unchecked { uint angle = uint((Trig.atan2(field.center.y - current.y, current.x - field.center.x) / 1000) + 90 + 360) % 360; int direction = angleShift + int(((angle+90) * (100 - pctHeart) + field.heartAngles[angle] * pctHeart) * 1000 / 100); setPointTo(result, int16(current.x+(Trig.sin(direction)*distance)/1000), int16(current.y+(Trig.cos(direction)*distance)/1000) ); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title IWorm1000Artwork * @author minimizer <[email protected]>; https://minimizer.art/ * * Interface for the Worm1000Artwork, to be used by the Token Contract */ interface IWorm1000Artwork { function tokenURI(uint mainDiscipleNumber, uint[4] memory numberOfLightsByLumenLevel, bool animationView) external view returns (string memory); function royaltyRecipient() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title CollisionGrid * @author minimizer <[email protected]>; https://minimizer.art/ * * Allows tracking for collisions on a 2D space. Points can be added to the grid (addPoint) * which marks them and occupied. Subsequently collisions can be checked (isValidPoint). * Points are treated as squares rather than circles for simplicity. */ import "./Math.sol"; import "./Coords.sol"; struct CollisionGrid { Frame frame; uint size; uint xUnit; uint yUnit; uint[] marks; } using CollisionGridLib for CollisionGrid global; library CollisionGridLib { function createGrid(Frame memory frame, uint size) internal pure returns (CollisionGrid memory grid) { unchecked { grid.frame = frame; grid.size = size; grid.xUnit = uint(frame.width)/size + 1; grid.yUnit = uint(frame.height)/size + 1; grid.marks = new uint[](size+1); } } function addPoint(CollisionGrid memory grid, Point memory pt, uint r) internal pure { unchecked { for (uint i = xLower(grid, pt, r); i <= xUpper(grid, pt, r); i++) { for (uint j = yLower(grid, pt, r); j <= yUpper(grid, pt, r); j++) { grid.marks[i] |= 1 << j; } } } } function isValidPoint(CollisionGrid memory grid, Point memory pt, uint r) internal pure returns(bool) { unchecked { for (uint i = xLower(grid, pt, r); i <= xUpper(grid, pt, r); i++) { for (uint j = yLower(grid, pt, r); j <= yUpper(grid, pt, r); j++) { if((grid.marks[i] >> j & 1) == 1) { return false; } } } return true; } } function xLower(CollisionGrid memory grid, Point memory pt, uint r) private pure returns (uint) { unchecked { return bound(pt.x, -int(r), grid.frame.x1, grid.xUnit, grid.size); } } function xUpper(CollisionGrid memory grid, Point memory pt, uint r) private pure returns (uint) { unchecked { return bound(pt.x, int(r), grid.frame.x1, grid.xUnit, grid.size); } } function yLower(CollisionGrid memory grid, Point memory pt, uint r) private pure returns (uint) { unchecked { return bound(pt.y, -int(r), grid.frame.y1, grid.yUnit, grid.size); } } function yUpper(CollisionGrid memory grid, Point memory pt, uint r) private pure returns (uint) { unchecked { return bound(pt.y, int(r), grid.frame.y1, grid.yUnit, grid.size); } } function bound(int v, int r, int v1, uint vUnit, uint size) private pure returns (uint) { unchecked { return min(size, uint(max(0, (v+r-v1)/int(vUnit)))); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title Coords * @author minimizer <[email protected]>; https://minimizer.art/ * * Base classes for geometry: Point(x,y), Circle((x,y),diameter), Frame(x1,y1,y2,y2,width,height) */ struct Point { int x; int y; } struct Circle { Point center; uint diameter; } struct Frame { int x1; int y1; int x2; int y2; int width; int height; } function setPointTo(Point memory target, int x, int y) pure { target.x = x; target.y = y; } function setPointTo(Point memory target, Point memory source) pure { setPointTo(target, source.x, source.y); } function setFrameTo(Frame memory target, int x1, int y1, int x2, int y2) pure { unchecked { target.x1 = x1; target.y1 = y1; target.x2 = x2; target.y2 = y2; target.width = x2-x1; target.height = y2-y1; } } function setFrameToSquareAtCenterAndSize(Frame memory frame, int centerX, int centerY, uint halfSize) pure { unchecked { setFrameTo(frame, centerX-int(halfSize), centerY-int(halfSize), centerX+int(halfSize), centerY+int(halfSize) ); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title Math * @author minimizer <[email protected]>; https://minimizer.art/ * * Convenience math functions: abs, sign, max, min, avg */ function abs(int v) pure returns (uint) { unchecked { return uint(v < 0 ? -v : v); } } function sign(int v) pure returns (int) { return v>0?int(1):v<0?-1:int(0); } function max(int a, int b) pure returns (int) { unchecked { return a > b ? a : b; } } function max(uint a, uint b) pure returns (uint) { unchecked { return a > b ? a : b; } } function min(int a, int b) pure returns (int) { unchecked { return a < b ? a : b; } } function min(uint a, uint b) pure returns (uint) { unchecked { return a < b ? a : b; } } function avg(int a, int b) pure returns (int) { unchecked { return (a+b)/2; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title RNG * @author minimizer <[email protected]>; https://minimizer.art/ * * Simple 32-bit seeded psuedorandom number generator */ struct Random { int32 seed; } using RNG for Random global; library RNG { function initializeRandom(Random memory random, int32 seed) internal pure { random.seed = seed; } function createRandom(int32 seed) internal pure returns (Random memory) { return Random(seed); } function next(Random memory random, int lower, int upper) internal pure returns (int) { unchecked { random.seed ^= random.seed << 13; random.seed ^= random.seed >> 17; random.seed ^= random.seed << 5; return ((random.seed < 0 ? ~random.seed + 1 : random.seed)%(upper-lower+1))+lower; } } function boolean(Random memory random) internal pure returns (bool) { return next(random, 0, 1) == 1; } function sign(Random memory random) internal pure returns (int) { return next(random, 0, 1) == 0 ? -1 : int(1); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title Storage * @author minimizer <[email protected]>; https://minimizer.art/ * * Convenience methods for transferring arrays and strings into storage, and unpacking packed data */ library Storage { function fillUintMapping(uint[] memory source, mapping(uint=>uint) storage target) internal { unchecked { for(uint i=0;i<source.length;i++) { target[i] = source[i]; } } } //source structure: 30 bytes padding, uint16 string1Length, bytes of string1, uint16 string2Length, bytes of string2, ... //memory efficient but destructive to the original source as it is written to along the way function unpackAndFillStringMapping(bytes memory source, mapping(uint=>string) storage target) internal { unchecked { uint sourceIndex = 30; uint targetIndex = 0; uint currentStringLength; bytes memory currentString; while(sourceIndex < source.length) { currentStringLength = (uint16(uint8(source[sourceIndex])) << 8) + uint8(source[sourceIndex+1]); sourceIndex += 2; assembly { currentString := add(source, sourceIndex) //point the current string to the right section of the original mstore(currentString, currentStringLength) //write the length of the current string at the beginning (this is the destructive part) } target[targetIndex++] = string(currentString); sourceIndex+= currentStringLength; } } } function extractBits(uint position, uint numBits, uint packedData) internal pure returns (uint) { unchecked { return packedData << 256-(position+1)*numBits >> 256-numBits; } } function getUnpacked(uint index, uint numBits, mapping(uint=>uint) storage packedDataMapping) internal view returns (uint) { unchecked { uint packedData = packedDataMapping[index*numBits/256]; uint position = index%(256/numBits); return extractBits(position, numBits, packedData); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title StringBuffer * @author minimizer <[email protected]>; https://minimizer.art/ * * Allows for efficiently and incrementally building a string. * Memory is pre-allocated upfront and can be written to serially. * toString() will return the resulting string truncated for only the size used. */ struct StringBuffer { bytes chars; uint length; } using StringBufferLib for StringBuffer global; library StringBufferLib { function create(uint maxLength) internal pure returns (StringBuffer memory buffer) { buffer.chars = new bytes(maxLength); buffer.length = 0; } function add(StringBuffer memory buffer, bytes memory segment) internal pure { unchecked { for(uint i=0;i<segment.length;i++) { buffer.chars[buffer.length++]=segment[i]; } } } function add(StringBuffer memory buffer, string memory segment) internal pure { add(buffer, bytes(segment)); } function add(StringBuffer memory buffer, bytes1 oneByte) internal pure { unchecked { buffer.chars[buffer.length++]=oneByte; } } function addByte(StringBuffer memory buffer, bytes1 oneByte) internal pure { add(buffer, oneByte); //for convenience } bytes10 private constant digits = '0123456789'; function add(StringBuffer memory buffer, uint16 segment) internal pure { unchecked { if(segment==0) { add(buffer, digits[0]); return; } uint8 length = 0; uint temp = segment; while (temp > 0) { length++; temp /= 10; } uint exp; temp = segment; while (length > 0) { length--; exp = 10**length; add(buffer, digits[temp/exp]); temp %= exp; } } } function add(StringBuffer memory buffer, int segment) internal pure { unchecked { if(segment < 0) { addByte(buffer, '-'); add(buffer, uint16(int16(-segment))); } else { add(buffer, uint16(int16(segment))); } } } function toString(StringBuffer memory buffer) internal pure returns (string memory) { uint length = buffer.length; bytes memory chars = buffer.chars; assembly { mstore(chars, length) } return string(buffer.chars); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title Trig * @author minimizer <[email protected]>; https://minimizer.art/ * * Approximations for sine, cosine, and 2-argument arctangent, designed to be gas efficient */ import "./Math.sol"; library Trig { function sinCurve(int degreesTimes1000) private pure returns (int) { unchecked { return 4000 * degreesTimes1000 * (180000 - degreesTimes1000) / (40500000000 - degreesTimes1000 * (180000 - degreesTimes1000) ); } } function sin(int degreesTimes1000) internal pure returns (int) { unchecked { int boundedDegreesTimes1000 = (degreesTimes1000+360000*10000000) % 360000; return boundedDegreesTimes1000 <= 180000 ? sinCurve(boundedDegreesTimes1000) : -sinCurve(boundedDegreesTimes1000 - 180000); } } function cos(int degreesTimes1000) internal pure returns (int) { unchecked { return sin(degreesTimes1000+90000); } } function atanHelper(int y, int x) private pure returns (int) { unchecked { int d = (1000 * y) / x; return (45 * d - ((d * int(int(abs(d)) - 1000) * int(14020277 + 3798 * abs(d))) / 1000000000)); } } function atan2(int y, int x) internal pure returns (int) { unchecked { return abs(y) < abs(x) ? atanHelper(y, x) + 180000 * (x < 0 ? (y < 0 ? -1 : int(1)) : int(0)) : -atanHelper(x, y) + 90000 * sign(y); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title XML * @author minimizer <[email protected]>; https://minimizer.art/ * * Convenience class to generate XML */ import "./StringBuffer.sol"; using XMLLib for XML global; struct XML { StringBuffer buffer; string[20] tags; uint8 currentDepth; bool currentTagHasChildren; } library XMLLib { bytes1 private constant LT = '<'; bytes1 private constant GT = '>'; bytes private constant LT_SLASH = '</'; bytes private constant SLASH_GT = '/>'; bytes1 private constant SPACE = ' '; bytes1 private constant EQUAL = '='; bytes1 private constant QUOTE = '"'; function create(uint maxLength) internal pure returns (XML memory xml) { xml.buffer = StringBufferLib.create(maxLength); xml.currentDepth = 0; xml.currentTagHasChildren = false; } function prepareForChildren(XML memory xml) internal pure { if(xml.currentDepth>0&&!xml.currentTagHasChildren) { xml.buffer.add(GT); } xml.currentTagHasChildren = true; } function startTag(XML memory xml, string memory tag) internal pure { unchecked { prepareForChildren(xml); xml.tags[xml.currentDepth++] = tag; xml.buffer.add(LT); xml.buffer.add(tag); xml.currentTagHasChildren = false; } } function endTag(XML memory xml) internal pure { unchecked { xml.currentDepth--; if(xml.currentTagHasChildren) { xml.buffer.add(LT_SLASH); xml.buffer.add(xml.tags[xml.currentDepth]); xml.buffer.add(GT); } else { xml.buffer.add(SLASH_GT); } xml.currentTagHasChildren = true; } } function startAttribute(XML memory xml, string memory name) internal pure { xml.buffer.add(SPACE); xml.buffer.add(name); xml.buffer.add(EQUAL); xml.buffer.add(QUOTE); } function endAttribute(XML memory xml) internal pure { xml.buffer.add(QUOTE); } function addAttribute(XML memory xml, string memory name, string memory value) internal pure { startAttribute(xml, name); xml.buffer.add(value); endAttribute(xml); } function addAttribute(XML memory xml, string memory name, uint16 value) internal pure { startAttribute(xml, name); xml.buffer.add(value); endAttribute(xml); } function addAttribute(XML memory xml, string memory name, int value) internal pure { startAttribute(xml, name); xml.buffer.add(value); endAttribute(xml); } function addPreformattedElement(XML memory xml, string memory element) internal pure { prepareForChildren(xml); xml.buffer.add(element); } function toString(XML memory xml) internal pure returns (string memory) { return xml.buffer.toString(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title Renderer * @author minimizer <[email protected]>; https://minimizer.art/ * * Main logic to convert from Visuals to SVG. */ import "./lib/CollisionGrid.sol"; import "./lib/XML.sol"; import "./Visuals.sol"; import "./StringFragments.sol"; library Renderer { uint private constant MAX_SVG_SIZE = 250000; uint private constant MAX_SVG_DISCIPLE_GROUP_SIZE = 35000; struct DiscipleColorGroup { Color color; uint width; XML content; } struct Circles { Circle[50] list; uint count; } struct RenderData { uint mainDiscipleNumber; Line discipleLine; Line wormLine; DiscipleColorGroup[7] discipleGroups; uint[10] groupIndicesPlusOne; uint numGroups; Frame linesFrame; Frame pieceFrame; Frame starsFrame; Frame backgroundFrame; CollisionGrid grid; Circles lights; Circles stars; Fragments fragments; } function initializeData(uint mainDiscipleNumber) internal pure returns (RenderData memory renderData) { unchecked { renderData.mainDiscipleNumber = mainDiscipleNumber; setFrameToSquareAtCenterAndSize(renderData.linesFrame, Visuals.centerX, Visuals.centerY, 0); Frame memory collisionGridFrame; setFrameToSquareAtCenterAndSize(collisionGridFrame, Visuals.centerX, Visuals.centerY, mainDiscipleNumber*4+2000); renderData.grid = CollisionGridLib.createGrid(collisionGridFrame, 100); } } function getColorCode(Color color, Fragments memory fragments) private view returns (string memory) { return fragments.get(StringFragment.COLOR_CODE_NONE, uint(color)); } function addCurrentDiscipleLine(RenderData memory renderData) internal view { unchecked { uint indexPlusOne = renderData.groupIndicesPlusOne[uint(renderData.discipleLine.color)]; if(indexPlusOne == 0) { renderData.numGroups++; indexPlusOne = renderData.numGroups; prepareGroup(renderData.discipleGroups[indexPlusOne-1], renderData.discipleLine.color, getColorCode(renderData.discipleLine.color, renderData.fragments), renderData.discipleLine.width); renderData.groupIndicesPlusOne[uint(renderData.discipleLine.color)] = indexPlusOne; } addDiscipleLine(renderData.discipleGroups[indexPlusOne-1].content, renderData.discipleLine, renderData.fragments); } } function prepareGroup(DiscipleColorGroup memory group, Color color, string memory colorCode, uint width) internal pure { group.color = color; group.width = width; XML memory content = XMLLib.create(MAX_SVG_DISCIPLE_GROUP_SIZE); content.startTag('g'); if(group.color == Color.BLACK) { content.startAttribute('id'); content.buffer.add(string('black_')); content.buffer.add(uint16(width)); content.endAttribute(); } else { writeColorAndWidth(content, colorCode, width); } group.content = content; } function addStrokeAttribute(XML memory svg, string memory colorCode) private pure { svg.addAttribute('stroke', colorCode); } function addStrokeWidthAttribute(XML memory svg, uint width) private pure { svg.addAttribute('stroke-width', uint16(width)); } function writeColorAndWidth(XML memory svg, string memory colorCode, uint width) private pure { addStrokeAttribute(svg, colorCode); addStrokeWidthAttribute(svg, width); } function writePoint(XML memory svg, int x, int y) private pure { svg.buffer.add(int16(x)); svg.buffer.addByte(' '); svg.buffer.add(int16(y)); } function addAttributeWithUrlValueForId(XML memory svg, string memory attribute, string memory id) private pure { svg.addAttribute(attribute, string(abi.encodePacked('url(#',id,')'))); } function addEndMarker(XML memory svg, string memory markerId) private pure { addAttributeWithUrlValueForId(svg, 'marker-end', markerId); } function startPath(XML memory svg) private pure { svg.startTag('path'); } function endPath(XML memory svg, Line memory line, uint startPoint, uint endPoint, string memory colorCode, uint width) private pure { writeColorAndWidth(svg, colorCode, width); writePathD(svg, line, startPoint, endPoint); svg.endTag(); } function idOfColor(string memory id, bool isFelixColor) private pure returns (string memory) { return string(abi.encodePacked(id, isFelixColor?'_felix':'')); } function addDiscipleLine(XML memory svg, Line memory line, Fragments memory fragments) internal view { unchecked { if(line.number == 794 || line.number == 795) { startPath(svg); addEndMarker(svg, fragments.get(StringFragment.ITEM_NAME_HORNS, 0)); writePathD(svg, line, 0, line.numPoints); svg.endTag(); } startPath(svg); svg.startAttribute('id'); svg.buffer.addByte('D'); svg.buffer.add(uint16(line.number)); svg.endAttribute(); addEndMarker(svg, idOfColor(fragments.get(StringFragment.FACE_NAME_1_SLEEPING, line.number==794?6:line.number==795?7:line.speedLevel-1),line.color==Color.BLACK)); writePathD(svg, line, 0, line.numPoints); svg.endTag(); } } function addWormLine(XML memory svg, Line memory line, Fragments memory fragments) internal view { unchecked { Evolution evolution = Visuals.evolution(line.number); Color bodyColor = Color.PINK; uint width = line.width; if(evolution==Evolution.RESURRECTEDWORM || evolution == Evolution.MECHSUIT) { startPath(svg); addEndMarker(svg, fragments.get(evolution==Evolution.RESURRECTEDWORM ? StringFragment.ITEM_NAME_HALO : StringFragment.ITEM_NAME_MECHHALO, 0)); endPath(svg, line, 4, line.numPoints, getColorCode(Color.NONE, fragments), width); bodyColor = Color.WHITE; } startPath(svg); svg.addAttribute('id', 'W'); addEndMarker(svg, fragments.get(StringFragment.FACE_NAME_1_SLEEPING, line.number==794?5:line.number==795?2:line.speedLevel-1)); endPath(svg, line, 0, line.numPoints, getColorCode(bodyColor, fragments), width); if(evolution == Evolution.MECHSUIT) { bool isSimplified = line.numPoints == 7; startPath(svg); endPath(svg, line, 0, 3, getColorCode(Color.PINK, fragments), width); startPath(svg); svg.addAttribute('stroke-linecap', 'butt'); endPath(svg, line, 1, isSimplified?6:10, getColorCode(Color.PINK, fragments), width); startPath(svg); endPath(svg, line, isSimplified?1:2, isSimplified?4:6, getColorCode(Color.BLACK, fragments), width/10); string memory suitId = 'item_suit'; string memory markerMid = 'marker-mid'; startPath(svg); addEndMarker(svg, suitId); addAttributeWithUrlValueForId(svg, 'marker-start', suitId); endPath(svg, line, isSimplified?1:2, isSimplified?4:6, getColorCode(Color.NONE, fragments), width); startPath(svg); addAttributeWithUrlValueForId(svg, markerMid, suitId); endPath(svg, line, isSimplified?2:5, isSimplified?6:9, getColorCode(Color.NONE, fragments), width); startPath(svg); addAttributeWithUrlValueForId(svg, markerMid, suitId); endPath(svg, line, isSimplified?3:7, isSimplified?7:11, getColorCode(Color.NONE, fragments), width); } } } function writePathD(XML memory svg, Line memory line, uint startPoint, uint endPoint) private pure { unchecked { svg.startAttribute('d'); svg.buffer.add(string('M ')); writePoint(svg, avg(line.points[startPoint].x, line.points[startPoint+1].x), avg(line.points[startPoint].y, line.points[startPoint+1].y)); for(uint i=startPoint+1;i<endPoint-1;i++) { svg.buffer.add(string(' Q ')); writePoint(svg, line.points[i].x, line.points[i].y); svg.buffer.addByte(' '); writePoint(svg, avg(line.points[i].x, line.points[i+1].x), avg(line.points[i].y, line.points[i+1].y)); } svg.endAttribute(); } } function addUseForBlackGroup(DiscipleColorGroup memory group, string memory colorCode, uint strokeWidth) private pure { XML memory content = group.content; content.startTag('use'); content.startAttribute('href'); content.buffer.add(string('#black_')); content.buffer.add(uint16(group.width)); content.endAttribute(); writeColorAndWidth(content, colorCode, strokeWidth); content.endTag(); } function endGroupAndWriteToSVG(XML memory svg, DiscipleColorGroup memory group, Fragments memory fragments) internal view { unchecked { group.content.endTag(); if(group.color == Color.BLACK) { addUseForBlackGroup(group, getColorCode(Color.FELIX, fragments), max(28,group.width*12/10)); addUseForBlackGroup(group, getColorCode(Color.BLACK, fragments), group.width); } svg.addPreformattedElement(group.content.toString()); } } function startRectWithDims(XML memory svg, Frame memory frame) private pure { unchecked { svg.startTag('rect'); svg.addAttribute('x', frame.x1); svg.addAttribute('y', frame.y1); svg.addAttribute('width', frame.width); svg.addAttribute('height', frame.height); } } function updateDataToIncludeLine(RenderData memory renderData, Line memory line, uint numPointsFromEnd, uint width) internal pure { unchecked { Frame memory linesFrame = renderData.linesFrame; for(uint i=line.numPoints-numPointsFromEnd;i<line.numPoints;i++) { Point memory point = line.points[i]; setFrameTo(linesFrame, min(linesFrame.x1, point.x-int(width)), min(linesFrame.y1, point.y-int(width)), max(linesFrame.x2, point.x+int(width)), max(linesFrame.y2, point.y+int(width)) ); } updateGridToIncludeLine(renderData, line); } } function updateDataToIncludeMainLine(RenderData memory renderData, Line memory line, bool isSelfie) internal pure { unchecked { updateDataToIncludeLine(renderData, line, isSelfie?1:line.numPoints, line.width*(isSelfie?3:1)/2); } } function updateGridToIncludeLine(RenderData memory renderData, Line memory line) private pure { unchecked { Point memory tmpPoint = line.tmpPoint; for(uint i=1;i<line.numPoints;i++) { setPointTo(tmpPoint, avg(line.points[i-1].x, line.points[i].x), avg(line.points[i-1].y, line.points[i].y) ); renderData.grid.addPoint(tmpPoint, line.width); } } } function addStars(RenderData memory renderData, Circles memory circles, uint size, uint count, uint numTries, Random memory random) internal pure { unchecked { uint numAdded = 0; Frame memory starsFrame = renderData.starsFrame; for(uint i=0;i<numTries && circles.count < circles.list.length && numAdded < count;i++) { Circle memory newCircle = circles.list[circles.count]; setPointTo(newCircle.center, random.next(starsFrame.x1, starsFrame.x2), random.next(starsFrame.y1, starsFrame.y2) ); newCircle.diameter = size; if(renderData.grid.isValidPoint(newCircle.center, size*2)) { circles.count++; numAdded++; renderData.grid.addPoint(newCircle.center, newCircle.diameter); } } } } function calcResultFrames(RenderData memory renderData, uint extraPadding) internal pure { unchecked { Frame memory linesFrame = renderData.linesFrame; Frame memory pieceFrame = renderData.pieceFrame; int centerX = avg(linesFrame.x1, linesFrame.x2); int centerY = avg(linesFrame.y1, linesFrame.y2); uint size = uint(max(linesFrame.width, linesFrame.height))+extraPadding; setFrameToSquareAtCenterAndSize(pieceFrame, centerX, centerY, size*12/20); setFrameToSquareAtCenterAndSize(renderData.starsFrame, centerX, centerY, size*11/20); uint backgroundFrameSize = uint(max(max(Visuals.centerX-pieceFrame.x1, Visuals.centerY-pieceFrame.y1), max(pieceFrame.x2-Visuals.centerX, pieceFrame.y2-Visuals.centerY))); setFrameToSquareAtCenterAndSize(renderData.backgroundFrame, Visuals.centerX, Visuals.centerY, backgroundFrameSize); } } function renderLights(XML memory svg, Circles memory lights, string memory whiteColorCode, Random memory random) private pure { unchecked { svg.startTag('g'); addAttributeWithUrlValueForId(svg, 'fill', 'light'); for(uint i=0;i<lights.count;i++) { Circle memory light = lights.list[i]; svg.startTag('circle'); svg.addAttribute('cx', light.center.x); svg.addAttribute('cy', light.center.y); svg.addAttribute('r', uint16(light.diameter*10)); svg.startTag('animate'); svg.addAttribute('attributeName', 'opacity'); svg.addAttribute('values', '0;1;0'); svg.addAttribute('repeatCount', 'indefinite'); svg.startAttribute('dur'); svg.buffer.add(random.next(5000, 20000)); svg.buffer.add(string('ms')); svg.endAttribute(); svg.endTag(); svg.endTag(); } svg.endTag(); renderStars(svg, lights, whiteColorCode); } } function renderStars(XML memory svg, Circles memory stars, string memory whiteColorCode) private pure { unchecked { svg.startTag('g'); addStrokeAttribute(svg, whiteColorCode); for(uint i=0;i<stars.count;i++) { Circle memory star = stars.list[i]; startPath(svg); addStrokeWidthAttribute(svg, star.diameter); svg.startAttribute('d'); svg.buffer.add(string('M ')); writePoint(svg, star.center.x, star.center.y); svg.buffer.add(string(' l 0 0')); svg.endAttribute(); svg.endTag(); } svg.endTag(); } } function startMarker(XML memory svg, Fragments memory fragments, StringFragment id, StringFragment markerAttribs, bool isFelixColor) private view { svg.startTag('marker'); svg.addAttribute('id', idOfColor(fragments.get(id, 0), isFelixColor)); svg.buffer.add(fragments.get(markerAttribs, 0)); } function addPathWithColor(XML memory svg, Fragments memory fragments, Color color, StringFragment path, StringFragment extraAttributes) private view { startPath(svg); addStrokeAttribute(svg, getColorCode(color, fragments)); svg.addAttribute('stroke-width', '.18'); svg.buffer.add(fragments.get(extraAttributes, 0)); svg.addAttribute('d', fragments.get(path, 0)); svg.endTag(); } function addSinglePathMarker(XML memory svg, Fragments memory fragments, StringFragment id, Color color, StringFragment path) private view { addSinglePathMarker(svg, fragments, id, color, path, StringFragment.NONE); } function addSinglePathMarker(XML memory svg, Fragments memory fragments, StringFragment id, Color color, StringFragment path, StringFragment extraAttributes) private view { startMarker(svg, fragments, id, StringFragment.SVG_MARKER_ATTRIB, color==Color.FELIX); addPathWithColor(svg, fragments, color, path, extraAttributes); svg.endTag(); } function addCommonFaces(XML memory svg, Fragments memory fragments, Color color) private view { addSinglePathMarker(svg, fragments, StringFragment.FACE_NAME_5_EXCITED, color, StringFragment.PATH_FACE_EXCITED); addSinglePathMarker(svg, fragments, StringFragment.FACE_NAME_4_HAPPY, color, StringFragment.PATH_FACE_HAPPY); addSinglePathMarker(svg, fragments, StringFragment.FACE_NAME_3_NORMAL, color, StringFragment.PATH_FACE_NORMAL); addSinglePathMarker(svg, fragments, StringFragment.FACE_NAME_2_UNAMUSED, color, StringFragment.PATH_FACE_UNAMUSED); addSinglePathMarker(svg, fragments, StringFragment.FACE_NAME_1_SLEEPING, color, StringFragment.PATH_FACE_SLEEPING); } function addWrigglerFace(XML memory svg, Fragments memory fragments, StringFragment id, StringFragment path) private view { startMarker(svg, fragments, id, StringFragment.SVG_MARKER_ATTRIB, false); addPathWithColor(svg, fragments, Color.WHITE, StringFragment.PATH_FACE_WHITE_EYES, StringFragment.NONE); addPathWithColor(svg, fragments, Color.BLACK, path, StringFragment.NONE); svg.endTag(); } function addMarkers(XML memory svg, Fragments memory fragments) private view { addCommonFaces(svg, fragments, Color.BLACK); addSinglePathMarker(svg, fragments, StringFragment.FACE_NAME_FROWNY, Color.BLACK, StringFragment.PATH_FACE_FROWNY); addCommonFaces(svg, fragments, Color.FELIX); addWrigglerFace(svg, fragments, StringFragment.FACE_NAME_SINISTER, StringFragment.PATH_FACE_SINISTER); addWrigglerFace(svg, fragments, StringFragment.FACE_NAME_DEFEATED, StringFragment.PATH_FACE_DEFEATED); addSinglePathMarker(svg, fragments, StringFragment.ITEM_NAME_HALO, Color.WHITE, StringFragment.PATH_ITEM_HALO); addSinglePathMarker(svg, fragments, StringFragment.ITEM_NAME_MECHHALO, Color.PINK, StringFragment.PATH_ITEM_MECHHALO); addSinglePathMarker(svg, fragments, StringFragment.ITEM_NAME_HORNS, Color.RED, StringFragment.PATH_ITEM_HORNS, StringFragment.SVG_HORNS_ATTRIB); startMarker(svg, fragments, StringFragment.ITEM_NAME_SUIT, StringFragment.SVG_SUIT_MARKER_ATTRIB, false); addPathWithColor(svg, fragments, Color.BLACK, StringFragment.PATH_ITEM_SUIT, StringFragment.NONE); svg.endTag(); } function renderAll(RenderData memory renderData, bool animationView) internal view returns (string memory) { unchecked { string memory round = 'round'; string memory frame = 'frame'; string memory fill = 'fill'; Fragments memory fragments = renderData.fragments; XML memory svg = XMLLib.create(MAX_SVG_SIZE); svg.startTag('svg'); svg.addAttribute('xmlns', 'http://www.w3.org/2000/svg'); svg.startAttribute('viewBox'); Frame memory pieceFrame = renderData.pieceFrame; writePoint(svg, pieceFrame.x1, pieceFrame.y1); svg.buffer.addByte(' '); writePoint(svg, pieceFrame.width, pieceFrame.height); svg.endAttribute(); svg.addAttribute('stroke-linecap',round); svg.addAttribute('stroke-linejoin',round); svg.addAttribute(fill,getColorCode(Color.NONE, fragments)); svg.startTag('defs'); svg.startTag('clipPath'); svg.addAttribute('id', frame); startRectWithDims(svg, pieceFrame); svg.endTag(); svg.endTag(); svg.addPreformattedElement(fragments.get(StringFragment.SVG_GRADIENTS,0)); addMarkers(svg, fragments); svg.endTag(); svg.startTag('g'); addAttributeWithUrlValueForId(svg, 'clip-path', frame); startRectWithDims(svg, renderData.backgroundFrame); addAttributeWithUrlValueForId(svg, fill, 'bg'); svg.endTag(); renderLights(svg, renderData.lights, getColorCode(Color.WHITE, fragments), RNG.createRandom(int32(uint32(renderData.mainDiscipleNumber)))); renderStars(svg, renderData.stars, getColorCode(Color.WHITE, fragments)); if(!animationView) { addWormLine(svg, renderData.wormLine, fragments); } DiscipleColorGroup memory group; for(uint i=0;i<renderData.discipleGroups.length;i++) { group = renderData.discipleGroups[i]; if(group.width>0) { Renderer.endGroupAndWriteToSVG(svg, group, fragments); } } if(!animationView) { Renderer.prepareGroup(group, renderData.discipleLine.color, getColorCode(renderData.discipleLine.color, fragments), renderData.discipleLine.width); Renderer.addDiscipleLine(group.content, renderData.discipleLine, fragments); Renderer.endGroupAndWriteToSVG(svg, group, fragments); } svg.endTag(); svg.endTag(); return svg.toString(); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title StringFragments * @author minimizer <[email protected]>; https://minimizer.art/ * * Some parts of the final outputs are static strings, this make it convenient to access them. */ enum StringFragment { NONE, JSON_ENCODING, JSON_1_NAME, JSON_2_DESCRIPTION_START, JSON_3_DESCRIPTION_END_CHAPTER, JSON_4_TOTAL_LIGHTS, JSON_5_HIGHEST_LIGHT_TIER, JSON_6_SPEED, JSON_7_EVOLUTION, JSON_8_EVOLUTION_CLOSE, JSON_9_SELFIE, JSON_10_IMAGE, JSON_11_IMAGE_CLOSE, LIGHT_TIER_0, LIGHT_TIER_1, LIGHT_TIER_2, LIGHT_TIER_3, SPEED_NAME_1, SPEED_NAME_2, SPEED_NAME_3, SPEED_NAME_4, SPEED_NAME_5, EVOLUTION_THEWORM, EVOLUTION_RESURRECTEDWORM, EVOLUTION_BIGWORM, EVOLUTION_MECHSUIT, SVG_GRADIENTS, SVG_MARKER_ATTRIB, SVG_SUIT_MARKER_ATTRIB, SVG_HORNS_ATTRIB, PATH_FACE_SLEEPING, PATH_FACE_UNAMUSED, PATH_FACE_NORMAL, PATH_FACE_HAPPY, PATH_FACE_EXCITED, PATH_FACE_FROWNY, PATH_FACE_WHITE_EYES, PATH_FACE_SINISTER, PATH_FACE_DEFEATED, PATH_ITEM_HALO, PATH_ITEM_MECHHALO, PATH_ITEM_HORNS, PATH_ITEM_SUIT, FACE_NAME_1_SLEEPING, FACE_NAME_2_UNAMUSED, FACE_NAME_3_NORMAL, FACE_NAME_4_HAPPY, FACE_NAME_5_EXCITED, FACE_NAME_FROWNY, FACE_NAME_SINISTER, FACE_NAME_DEFEATED, ITEM_NAME_HALO, ITEM_NAME_MECHHALO, ITEM_NAME_HORNS, ITEM_NAME_SUIT, COLOR_CODE_NONE, COLOR_CODE_FELIX, COLOR_CODE_GOLD, COLOR_CODE_PURPLE, COLOR_CODE_BLUE, COLOR_CODE_ORANGE, COLOR_CODE_RED, COLOR_CODE_BLACK, COLOR_CODE_WHITE, COLOR_CODE_PINK, ERROR_INVALID_DISCIPLE, ERROR_ONCHAIN_CALL_NOT_FROM_TOKEN_CONTRACT, ERROR_ROYALTY_ADDRESS_IS_CONTRACT, ERROR_TOKEN_CONTRACT_FROZEN, LENGTH } struct Fragments { function(StringFragment, uint) view returns (string memory) getStringFragmentWithOffset; } using FragmentsLib for Fragments global; library FragmentsLib { function get(Fragments memory fragments, StringFragment stringFragment, uint offset) internal view returns (string memory) { return fragments.getStringFragmentWithOffset(stringFragment, offset); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* * @title Visuals * @author minimizer <[email protected]>; https://minimizer.art/ * * Main logic for how to calculate the shapes of all Disciples and the Worm. */ import "./lib/RNG.sol"; import "./HeartField.sol"; // Each chapter has a shape the reflects the average speed of transfer of all the Disciples in the chapter. // Shapes are calculated as such: // // 1. Calculate transfer speed: time sent - time received in seconds, set to 0 for Arsonic, Disciple #1, Praise Be! // // 2. Calculate speed level based on transfer speed: // 0 seconds : 5 Lightning (fastest) // < 5 minutes: 4 Swift // < 6 hours : 3 Nimble // < 72 hours : 2 Reluctant // otherwise : 1 Time Out (slowest) // Speed levels determine the expression of The Disciple, as well as the size of The Disciple and The Worm in their piece // // 3. Rank chapters separately by average transfer speed and by speed level // // 4. Blend the two rankings, and assign chapters to shapes in order of ranking to get about 200 Disciples per shape. // // The chapter shapes are: // - Line (looks like the letter 'l'), fastest // - Undulating (looks like the letter 'u') // - Wiggly (looks like the letter 'w') // - Squiggly (looks like the letter 's') // - Curly (looks like the letter 'c'), slowest // // Also the shape of Selfie is used in the code for Disciples who get the selfie enum Shape { NONE, LINE, UNDULATING, WIGGLY, SQUIGGLY, CURLY, SELFIE } // Each chapter has one of 7 colors (Felix through Black below). colors are pre-set for some chapters, // and for others, they are chosen to create the maximum visual distance between chapters of similar colors and shapes enum Color { NONE, FELIX, //a special green GOLD, PURPLE, BLUE, ORANGE, RED, BLACK, WHITE, PINK } // The Worm has evolved through its journey, this indicates which visual style to draw it in enum Evolution { THEWORM, RESURRECTEDWORM, BIGWORM, MECHSUIT } struct Line { uint number; uint chapter; Color color; Shape shape; uint speedLevel; Point startingPoint; uint spacing; uint width; uint pctHeart; Random random; Point tmpPoint; uint numSegments; uint numPoints; Point[13] points; } library Visuals { int internal constant centerX = 5000; int internal constant centerY = 5000; uint internal constant othersSize = 20; function mainSize(uint discipleNumber, uint speedLevel, bool selfie) internal pure returns (uint) { unchecked { uint mainDiscipleBaseSize = max(60,(discipleNumber+300)*15/100); return mainDiscipleBaseSize*(selfie?2:1)*speedLevel/2; } } function evolution(uint discipleNumber) internal pure returns (Evolution) { return discipleNumber >= 431 && discipleNumber <= 454 ? Evolution.BIGWORM : discipleNumber < 273 ? Evolution.THEWORM : discipleNumber < 827 ? Evolution.RESURRECTEDWORM : Evolution.MECHSUIT; } function calcPercentHeart(uint discipleNumber) private pure returns (uint) { unchecked { return discipleNumber < 300 ? 0 : discipleNumber < 800 ? (discipleNumber - 300) / 5 : 100; } } function buildSimplifiedLineWithAngleFunction(Line memory line, HeartField memory field, function(uint, uint, int) pure returns (int) getAngle, int randomValue) private pure { unchecked { line.numPoints = line.numSegments; for(uint i=1;i<line.numPoints;i++) { int angle = getAngle(i, line.numPoints, randomValue); field.setNextPoint(line.points[i-1], int(line.spacing), angle, line.pctHeart, line.tmpPoint); field.setNextPoint(line.tmpPoint, int(line.spacing), angle, line.pctHeart, line.points[i]); } } } function buildDetailedLineWithAngleFunction(Line memory line, HeartField memory field, function(uint, uint, int, int) pure returns (int) getAngle, int randomValue1, int randomValue2) private pure { unchecked { line.numPoints = line.numSegments*2-1; for(uint i=1;i<line.numPoints;i++) { field.setNextPoint(line.points[i-1], int(line.spacing), getAngle(i, line.numPoints, randomValue1, randomValue2), line.pctHeart, line.points[i]); } } } function buildLineAsShapeSelfie(Line memory line, HeartField memory field) private pure { unchecked { line.numPoints = line.numSegments; setPointTo(line.points[line.numPoints-1], line.startingPoint); for(uint i=line.numPoints-1;i>0;i--) { field.setNextPoint(line.points[i], int(line.spacing), 270000, line.pctHeart, line.tmpPoint); field.setNextPoint(line.tmpPoint, int(line.spacing), 270000, line.pctHeart, line.points[i-1]); } } } function angleForLineShape(uint, uint, int) private pure returns (int) { return 0; } function buildLineAsShapeLine(Line memory line, HeartField memory field) private pure { unchecked { buildSimplifiedLineWithAngleFunction(line, field, angleForLineShape, 0); } } function angleForUndulatingShape(uint i, uint n, int randomValue) private pure returns (int) { unchecked { return (int(n)-int(i)*2)*randomValue; } } function buildLineAsShapeUndulating(Line memory line, HeartField memory field) private pure { unchecked { int randomValue = line.random.boolean()?line.random.next(12000,15000):-line.random.next(8000,11000); field.setNextPoint(line.startingPoint, randomValue*int(line.width)/10000/2, 270000, line.pctHeart, line.points[0]); buildSimplifiedLineWithAngleFunction(line, field, angleForUndulatingShape, randomValue); } } function angleForWigglyShape(uint i, uint n, int randomValue) private pure returns (int) { unchecked { return (int((n+i+1)%2)*2-int(1))*randomValue; } } function buildLineAsShapeWiggly(Line memory line, HeartField memory field) private pure { unchecked { int randomValue = line.random.sign(); randomValue *= line.random.next(35000,50000); buildSimplifiedLineWithAngleFunction(line, field, angleForWigglyShape, randomValue); } } function angleForSquigglyShape(uint i, uint n, int randomValue1, int) private pure returns (int) { unchecked { return (int((min(i, n-i)-1)*(n==13?26:44))-100)*randomValue1; } } function buildLineAsShapeSquiggly(Line memory line, HeartField memory field) private pure { unchecked { int randomValue = line.random.sign(); randomValue *= line.random.next(800, 1200); field.setNextPoint(line.startingPoint, randomValue*int(line.width)*2/1000, 90000, line.pctHeart, line.points[0]); buildDetailedLineWithAngleFunction(line, field, angleForSquigglyShape, randomValue, 0); } } function angleForCurlyShape(uint i, uint, int randomValue1, int randomValue2) private pure returns (int) { unchecked { return randomValue1/int(14+(i-1))+randomValue2; } } function buildLineAsShapeCurly(Line memory line, HeartField memory field) private pure { unchecked { int randomValue1 = line.random.sign(); randomValue1 *= line.random.next(11000000,13000000); int randomValue2 = line.random.next(0,360)*1000; buildDetailedLineWithAngleFunction(line, field, angleForCurlyShape, randomValue1, randomValue2); } } function buildLine(Line memory line, HeartField memory field) private pure { unchecked { RNG.initializeRandom(line.random, int32(uint32(line.number+uint(line.startingPoint.x)))); setPointTo(line.points[0], line.startingPoint); ( line.shape==Shape.LINE ? buildLineAsShapeLine : line.shape==Shape.UNDULATING ? buildLineAsShapeUndulating : line.shape==Shape.WIGGLY ? buildLineAsShapeWiggly : line.shape==Shape.SQUIGGLY ? buildLineAsShapeSquiggly : line.shape==Shape.CURLY ? buildLineAsShapeCurly : buildLineAsShapeSelfie)(line, field); } } function buildDiscipleLine(Line memory line, HeartField memory field) internal pure { unchecked { line.spacing = othersSize; line.width = othersSize; line.pctHeart = calcPercentHeart(line.number); line.numSegments = 5; buildLine(line, field); } } function buildMainDiscipleAndWormLines(Line memory mainDiscipleLine, Line memory wormLine, HeartField memory field, bool selfie) internal pure { unchecked { Random memory discipleRandom = RNG.createRandom(int16(mainDiscipleLine.startingPoint.x)); Random memory wormRandom = RNG.createRandom(int16(mainDiscipleLine.startingPoint.y)); mainDiscipleLine.spacing = mainSize(mainDiscipleLine.number, mainDiscipleLine.speedLevel, selfie); mainDiscipleLine.width = mainDiscipleLine.spacing; mainDiscipleLine.pctHeart = calcPercentHeart(mainDiscipleLine.number/2); mainDiscipleLine.numSegments = 5; if(selfie) { mainDiscipleLine.shape = Shape.SELFIE; mainDiscipleLine.spacing = mainDiscipleLine.spacing * 8 / 10; field.setNextPoint(mainDiscipleLine.startingPoint, int(mainDiscipleLine.width)*15/10, 270000, mainDiscipleLine.pctHeart, mainDiscipleLine.startingPoint); } else { field.setNextPoint(mainDiscipleLine.startingPoint, int(mainDiscipleLine.width)*discipleRandom.next(200,500)/100, 270000+discipleRandom.next(-30000,30000), mainDiscipleLine.pctHeart, mainDiscipleLine.startingPoint); } buildLine(mainDiscipleLine, field); bool isBigWorm = evolution(mainDiscipleLine.number) == Evolution.BIGWORM; wormLine.spacing = mainDiscipleLine.spacing * (isBigWorm ? 2 : 1); wormLine.width = mainDiscipleLine.width * (isBigWorm ? 25 : 10) / 10; wormLine.pctHeart = mainDiscipleLine.pctHeart; wormLine.numSegments = 7; if(selfie) { wormLine.shape = Shape.SELFIE; field.setNextPoint(mainDiscipleLine.points[4], int(wormLine.width)*12/10, int24(wormRandom.boolean()?20000:160000), wormLine.pctHeart, wormLine.startingPoint); } else { field.setNextPoint(mainDiscipleLine.points[uint(wormRandom.next(0, int(mainDiscipleLine.numPoints-1)))], int(wormLine.spacing)*wormRandom.next(300,500)/100, 270000+wormRandom.next(-90000,45000), wormLine.pctHeart, wormLine.startingPoint); } buildLine(wormLine, field); } } function starSize(Frame memory starsFrame) internal pure returns (uint) { unchecked { return uint(starsFrame.width)/300; } } function lightSize(uint computedStarSize, uint lumenLevel) internal pure returns (uint) { unchecked { return computedStarSize*[1,2,3,5][lumenLevel]; } } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256[]","name":"discipleStartingPointsPacked_","type":"uint256[]"},{"internalType":"uint256[]","name":"discipleChapterNumbersPacked_","type":"uint256[]"},{"internalType":"uint256[]","name":"discipleSpeedLevelsPacked_","type":"uint256[]"},{"internalType":"uint256[]","name":"discipleSelfiePacked_","type":"uint256[]"},{"internalType":"bytes","name":"chapterNamesPacked_","type":"bytes"},{"internalType":"uint256","name":"chapterColorsPacked_","type":"uint256"},{"internalType":"uint256","name":"chapterShapesPacked_","type":"uint256"},{"internalType":"uint256[]","name":"heartAngles_","type":"uint256[]"},{"internalType":"bytes","name":"stringFragmentsPacked_","type":"bytes"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"freezeTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"royaltyRecipient_","type":"address"}],"name":"setRoyaltyRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenContract_","type":"address"}],"name":"setTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenContractFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mainDiscipleNumber","type":"uint256"},{"internalType":"uint256[4]","name":"numberOfLightsByLumenLevel","type":"uint256[4]"},{"internalType":"bool","name":"animationView","type":"bool"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600160146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162006a0a38038062006a0a833981810160405281019062000052919062000615565b62000072620000666200016460201b60201c565b6200016c60201b60201c565b620000858960036200023060201b60201c565b620000988860046200023060201b60201c565b620000ab8760056200023060201b60201c565b620000be8660066200023060201b60201c565b620000d18560076200028460201b60201c565b8360088190555082600981905550620000f282600a6200023060201b60201c565b6200010581600b6200028460201b60201c565b620001156200034360201b60201c565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505062000b24565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b82518110156200027f57828181518110620002535762000252620007cd565b5b602002602001015182600083815260200190815260200160002081905550808060010191505062000233565b505050565b6000601e905060008060605b85518410156200033b57856001850181518110620002b357620002b2620007cd565b5b602001015160f81c60f81b60f81c60ff166008878681518110620002dc57620002db620007cd565b5b602001015160f81c60f81b60f81c60ff1661ffff16901b0161ffff16915060028401935083860190508181528085600085806001019650815260200190815260200160002090816200032f919062000a3d565b50818401935062000290565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003d08262000385565b810181811067ffffffffffffffff82111715620003f257620003f162000396565b5b80604052505050565b6000620004076200036c565b9050620004158282620003c5565b919050565b600067ffffffffffffffff82111562000438576200043762000396565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b62000463816200044e565b81146200046f57600080fd5b50565b600081519050620004838162000458565b92915050565b6000620004a06200049a846200041a565b620003fb565b90508083825260208201905060208402830185811115620004c657620004c562000449565b5b835b81811015620004f35780620004de888262000472565b845260208401935050602081019050620004c8565b5050509392505050565b600082601f83011262000515576200051462000380565b5b81516200052784826020860162000489565b91505092915050565b600080fd5b600067ffffffffffffffff82111562000553576200055262000396565b5b6200055e8262000385565b9050602081019050919050565b60005b838110156200058b5780820151818401526020810190506200056e565b60008484015250505050565b6000620005ae620005a88462000535565b620003fb565b905082815260208101848484011115620005cd57620005cc62000530565b5b620005da8482856200056b565b509392505050565b600082601f830112620005fa57620005f962000380565b5b81516200060c84826020860162000597565b91505092915050565b60008060008060008060008060006101208a8c0312156200063b576200063a62000376565b5b60008a015167ffffffffffffffff8111156200065c576200065b6200037b565b5b6200066a8c828d01620004fd565b99505060208a015167ffffffffffffffff8111156200068e576200068d6200037b565b5b6200069c8c828d01620004fd565b98505060408a015167ffffffffffffffff811115620006c057620006bf6200037b565b5b620006ce8c828d01620004fd565b97505060608a015167ffffffffffffffff811115620006f257620006f16200037b565b5b620007008c828d01620004fd565b96505060808a015167ffffffffffffffff8111156200072457620007236200037b565b5b620007328c828d01620005e2565b95505060a0620007458c828d0162000472565b94505060c0620007588c828d0162000472565b93505060e08a015167ffffffffffffffff8111156200077c576200077b6200037b565b5b6200078a8c828d01620004fd565b9250506101008a015167ffffffffffffffff811115620007af57620007ae6200037b565b5b620007bd8c828d01620005e2565b9150509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200084f57607f821691505b60208210810362000865576200086462000807565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008cf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000890565b620008db868362000890565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200091e6200091862000912846200044e565b620008f3565b6200044e565b9050919050565b6000819050919050565b6200093a83620008fd565b62000952620009498262000925565b8484546200089d565b825550505050565b600090565b620009696200095a565b620009768184846200092f565b505050565b5b818110156200099e57620009926000826200095f565b6001810190506200097c565b5050565b601f821115620009ed57620009b7816200086b565b620009c28462000880565b81016020851015620009d2578190505b620009ea620009e18562000880565b8301826200097b565b50505b505050565b600082821c905092915050565b600062000a1260001984600802620009f2565b1980831691505092915050565b600062000a2d8383620009ff565b9150826002028217905092915050565b62000a4882620007fc565b67ffffffffffffffff81111562000a645762000a6362000396565b5b62000a70825462000836565b62000a7d828285620009a2565b600060209050601f83116001811462000ab5576000841562000aa0578287015190505b62000aac858262000a1f565b86555062000b1c565b601f19841662000ac5866200086b565b60005b8281101562000aef5784890151825560018201915060208501945060208101905062000ac8565b8683101562000b0f578489015162000b0b601f891682620009ff565b8355505b6001600288020188555050505b505050505050565b615ed68062000b346000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610135578063b033ebf814610153578063bbcd5bbe14610171578063cd93a4851461018d578063f2fde38b146101975761009e565b806341e42f30146100a35780634c00de82146100bf57806355a373d6146100dd578063715018a6146100fb5780637f63a72214610105575b600080fd5b6100bd60048036038101906100b89190615801565b6101b3565b005b6100c7610213565b6040516100d4919061583d565b60405180910390f35b6100e5610239565b6040516100f2919061583d565b60405180910390f35b61010361025f565b005b61011f600480360381019061011a91906158ed565b610273565b60405161012c91906159d0565b60405180910390f35b61013d610526565b60405161014a919061583d565b60405180910390f35b61015b61054f565b6040516101689190615a01565b60405180910390f35b61018b60048036038101906101869190615801565b610562565b005b6101956105c9565b005b6101b160048036038101906101ac9190615801565b6105ed565b005b6101bb610670565b6101cf6101c7826106ee565b156043610711565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610267610670565b6102716000610763565b565b60606103063273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102ff5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6042610711565b6103236001851015801561031c57506103e88511155b6041610711565b600061032e85610827565b9050610883816101a001516000019067ffffffffffffffff16908167ffffffffffffffff1681525050600061036761138880600a61093d565b9050600084610379576001870361037b565b865b90506000600190505b8181116103ef576103998185602001516109ac565b6103a7846020015184610aba565b6103b084610b01565b6103e2848560200151866020015161018001516002886020015160e00151816103dc576103db615a1c565b5b04610c20565b8080600101915050610384565b508461045c576104038784602001516109ac565b6104118784604001516109ac565b600061041c88610cdd565b8015610426575085155b905061043c846020015185604001518584610cf8565b61044b848560200151836110f6565b61045a848560400151836110f6565b505b610477838661046c57600061046f565b60c85b60ff16611141565b600061048288611239565b9050600061049485610100015161125a565b90506000600390505b600081126104ee5760006104b1838361127a565b90506104df87886101600151838d86600481106104d1576104d0615a4b565b5b602002013561012c896112d1565b5080806001900391505061049d565b50610504858661018001518360326064876112d1565b6105188989610513888b6113f7565b611a34565b955050505050509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160149054906101000a900460ff1681565b61056a610670565b610585600160149054906101000a900460ff16156044610711565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6105d1610670565b60018060146101000a81548160ff021916908315150217905550565b6105f5610670565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b90615aec565b60405180910390fd5b61066d81610763565b50565b610678611d5f565b73ffffffffffffffffffffffffffffffffffffffff16610696610526565b73ffffffffffffffffffffffffffffffffffffffff16146106ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e390615b58565b60405180910390fd5b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8161071d826000610883565b9061075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075591906159d0565b60405180910390fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61082f615399565b8181600001818152505061084c8160c00151611388806000611d67565b610854615450565b61086981611388806107d06004880201611d67565b610874816064611d82565b82610140018190525050919050565b6060600b60008385604581111561089d5761089c615b78565b5b01815260200190815260200160002080546108b790615bd6565b80601f01602080910402602001604051908101604052809291908181526020018280546108e390615bd6565b80156109305780601f1061090557610100808354040283529160200191610930565b820191906000526020600020905b81548152906001019060200180831161091357829003601f168201915b5050505050905092915050565b610945615486565b61095481600001518585611e39565b60005b61016881116109a45761096c81601085611e52565b826020015182610169811061098457610983615a4b565b5b602002019061ffff16908161ffff16815250508080600101915050610957565b509392505050565b818160000181815250506109bf82611ebb565b8160200181815250506109da81602001516004600854611ed4565b60098111156109ec576109eb615b78565b5b81604001906009811115610a0357610a02615b78565b5b90816009811115610a1757610a16615b78565b5b81525050610a2d81602001516004600954611ed4565b6006811115610a3f57610a3e615b78565b5b81606001906006811115610a5657610a55615b78565b5b90816006811115610a6a57610a69615b78565b5b81525050610a7782611ef3565b816080018181525050610ab68160a00151610a9b6002600186030260106003611e52565b610ab16001600260018803020160106003611e52565b611e39565b5050565b60148260c001818152505060148260e0018181525050610add8260000151611f0c565b82610100018181525050600582610160018181525050610afd8282611f4d565b5050565b600081608001518260200151604001516009811115610b2357610b22615b78565b5b600a8110610b3457610b33615a4b565b5b6020020151905060008103610be6578160a0018051809190600101815250508160a001519050610baa82606001516001830360078110610b7757610b76615a4b565b5b6020020151836020015160400151610b9c856020015160400151866101a001516120c6565b856020015160e001516120f8565b8082608001518360200151604001516009811115610bcb57610bca615b78565b5b600a8110610bdc57610bdb615a4b565b5b6020020181815250505b610c1c82606001516001830360078110610c0357610c02615a4b565b5b6020020151604001518360200151846101a0015161228e565b5050565b60008460c0015190506000838561018001510390505b846101800151811015610ccb576000856101a0015182600d8110610c5d57610c5c615a4b565b5b60200201519050610cbd83610c7c856000015187856000015103612441565b610c90866020015188866020015103612441565b610ca487604001518987600001510161245a565b610cb888606001518a88602001510161245a565b612473565b508080600101915050610c36565b50610cd685856124ba565b5050505050565b600080610cf06001840360016006611e52565b119050919050565b6000610d0e8560a001516000015160010b611239565b90506000610d268660a001516020015160010b611239565b9050610d3b86600001518760800151856125ac565b8660c00181815250508560c001518660e0018181525050610d706002876000015181610d6a57610d69615a1c565b5b04611f0c565b866101000181815250506005866101600181815250508215610e2757600686606001906006811115610da557610da4615b78565b5b90816006811115610db957610db8615b78565b5b81525050600a60088760c001510281610dd557610dd4615a1c565b5b048660c0018181525050610e228660a00151600a600f8960e001510281610dff57610dfe615a1c565b5b0562041eb08961010001518a60a00151896126059095949392919063ffffffff16565b610eb9565b610eb88660a001516064610e4960c86101f4876126ff9092919063ffffffff16565b8960e001510281610e5d57610e5c615a1c565b5b05610e957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8ad0617530876126ff9092919063ffffffff16565b62041eb0018961010001518a60a00151896126059095949392919063ffffffff16565b5b610ec38685611f4d565b600060026003811115610ed957610ed8615b78565b5b610ee688600001516127b0565b6003811115610ef857610ef7615b78565b5b14905080610f07576001610f0a565b60025b60ff168760c00151028660c0018181525050600a81610f2a57600a610f2d565b60195b60ff168860e001510281610f4457610f43615a1c565b5b048660e001818152505086610100015186610100018181525050600786610160018181525050831561101b57600686606001906006811115610f8957610f88615b78565b5b90816006811115610f9d57610f9c615b78565b5b81525050611016876101a001516004600d8110610fbd57610fbc615a4b565b5b6020020151600a600c8960e001510281610fda57610fd9615a1c565b5b05610fe4856127fd565b610ff15762027100610ff5565b614e205b60020b8961010001518a60a001518a6126059095949392919063ffffffff16565b6110e3565b6110e2876101a00151611042600060018b610180015103866126ff9092919063ffffffff16565b600d811061105357611052615a4b565b5b6020020151606461107361012c6101f4876126ff9092919063ffffffff16565b8960c00151028161108757611086615a1c565b5b056110bf7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea07061afc8876126ff9092919063ffffffff16565b62041eb0018961010001518a60a001518a6126059095949392919063ffffffff16565b5b6110ed8686611f4d565b50505050505050565b61113c83838361110b5784610180015161110e565b60015b60028561111c57600161111f565b60035b60ff168760e00151028161113657611135615a1c565b5b04610c20565b505050565b60008260c00151905060008360e001519050600061116783600001518460400151612816565b9050600061117d84602001518560600151612816565b905060008561119486608001518760a0015161245a565b0190506111b78484846014600c8602816111b1576111b0615a1c565b5b04611d67565b6111dc87610100015184846014600b8602816111d6576111d5615a1c565b5b04611d67565b600061121a6111fb86600001516113880387602001516113880361245a565b61121561138888604001510361138889606001510361245a565b61245a565b905061122f8861012001516113888084611d67565b5050505050505050565b6112416154ac565b60405180602001604052808360030b8152509050919050565b600061012c82608001518161127257611271615a1c565b5b049050919050565b60006040518060800160405280600160ff168152602001600260ff168152602001600360ff168152602001600560ff1681525082600481106112bf576112be615a4b565b5b602002015160ff168302905092915050565b600080876101000151905060005b84811080156112f8575087600001515060328860200151105b801561130357508583105b156113ec576000886000015189602001516032811061132557611324615a4b565b5b60200201519050611373816000015161135185600001518660400151896126ff9092919063ffffffff16565b61136e866020015187606001518a6126ff9092919063ffffffff16565b611e39565b8781602001818152505061139e816000015160028a028c61014001516128349092919063ffffffff16565b156113de578860200180518091906001018152505083806001019450506113dd816000015182602001518c61014001516128d59092919063ffffffff16565b5b5080806001019150506112df565b505050505050505050565b606060006040518060400160405280600581526020017f726f756e64000000000000000000000000000000000000000000000000000000815250905060006040518060400160405280600581526020017f6672616d65000000000000000000000000000000000000000000000000000000815250905060006040518060400160405280600481526020017f66696c6c0000000000000000000000000000000000000000000000000000000081525090506000866101a00151905060006114bf6203d090612966565b90506115096040518060400160405280600381526020017f7376670000000000000000000000000000000000000000000000000000000000815250826129a890919063ffffffff16565b6115886040518060400160405280600581526020017f786d6c6e730000000000000000000000000000000000000000000000000000008152506040518060400160405280601a81526020017f687474703a2f2f7777772e77332e6f72672f323030302f73766700000000000081525083612a4b9092919063ffffffff16565b6115d06040518060400160405280600781526020017f76696577426f780000000000000000000000000000000000000000000000000081525082612a7a90919063ffffffff16565b60008860e0015190506115ec8282600001518360200151612b3a565b6116237f20000000000000000000000000000000000000000000000000000000000000008360000151612baa90919063ffffffff16565b6116368282608001518360a00151612b3a565b61163f82612bb8565b6116896040518060400160405280600e81526020017f7374726f6b652d6c696e656361700000000000000000000000000000000000008152508784612a4b9092919063ffffffff16565b6116d36040518060400160405280600f81526020017f7374726f6b652d6c696e656a6f696e00000000000000000000000000000000008152508784612a4b9092919063ffffffff16565b6116f2846116e26000866120c6565b84612a4b9092919063ffffffff16565b61173a6040518060400160405280600481526020017f6465667300000000000000000000000000000000000000000000000000000000815250836129a890919063ffffffff16565b6117826040518060400160405280600881526020017f636c697050617468000000000000000000000000000000000000000000000000815250836129a890919063ffffffff16565b6117cc6040518060400160405280600281526020017f69640000000000000000000000000000000000000000000000000000000000008152508684612a4b9092919063ffffffff16565b6117d68282612bf2565b6117df82612d76565b6117e882612d76565b611811611802601a600086612eb99092919063ffffffff16565b83612ed690919063ffffffff16565b61181b8284612efa565b61182482612d76565b61186c6040518060400160405280600181526020017f6700000000000000000000000000000000000000000000000000000000000000815250836129a890919063ffffffff16565b6118ac826040518060400160405280600981526020017f636c69702d70617468000000000000000000000000000000000000000000000081525087612f9d565b6118bb828a6101200151612bf2565b6118fb82856040518060400160405280600281526020017f6267000000000000000000000000000000000000000000000000000000000000815250612f9d565b61190482612d76565b61192b828a61016001516119196008876120c6565b6119268d60000151611239565b612fd6565b611945828a61018001516119406008876120c6565b6134cb565b8761195a57611959828a604001518561368d565b5b6119626154c2565b60005b8a606001515060078110156119b8578a60600151816007811061198b5761198a615a4b565b5b602002015191506000826020015111156119ab576119aa848387613b87565b5b8080600101915050611965565b5088611a0a576119eb818b60200151604001516119dd8d6020015160400151886120c6565b8d6020015160e001516120f8565b6119fe81604001518b602001518661228e565b611a09838286613b87565b5b611a1383612d76565b611a1c83612d76565b611a2583613c39565b97505050505050505092915050565b6060600083600360048110611a4c57611a4b615a4b565b5b602002013584600260048110611a6557611a64615a4b565b5b602002013585600160048110611a7e57611a7d615a4b565b5b602002013586600060048110611a9757611a96615a4b565b5b6020020135010101905060008085600360048110611ab857611ab7615a4b565b5b602002013511611b1957600085600260048110611ad857611ad7615a4b565b5b602002013511611b1157600085600160048110611af857611af7615a4b565b5b602002013511611b09576000611b0c565b60015b611b14565b60025b611b1c565b60035b60ff1690506000611b2f62061a80613c4f565b9050611b3c816002613cbc565b611b4f8782613ccc90919063ffffffff16565b611b5a816003613cbc565b611b6d8782613ccc90919063ffffffff16565b611b78816004613cbc565b611c2e60076000611b888a611ebb565b81526020019081526020016000208054611ba190615bd6565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcd90615bd6565b8015611c1a5780601f10611bef57610100808354040283529160200191611c1a565b820191906000526020600020905b815481529060010190602001808311611bfd57829003601f168201915b505050505082613deb90919063ffffffff16565b6000831115611c6d57611c42816005613cbc565b611c558382613ccc90919063ffffffff16565b611c60816006613cbc565b611c6c81600d84613df9565b5b611c78816007613cbc565b611c8f8160116001611c898b611ef3565b03613df9565b611c9a816008613cbc565b611cc0816016611ca98a6127b0565b6003811115611cbb57611cba615b78565b5b613df9565b611ccb816009613cbc565b611cd487610cdd565b15611ce557611ce481600a613cbc565b5b611cf081600b613cbc565b611d0b611cfc86613e1a565b82613deb90919063ffffffff16565b611d1681600c613cbc565b611d2260016000610883565b611d33611d2e83613f7d565b613e1a565b604051602001611d44929190615c43565b60405160208183030381529060405293505050509392505050565b600033905090565b611d7c84828503838503848701858701612473565b50505050565b611d8a6154fb565b82816000018190525081816020018181525050600182846080015181611db357611db2615a1c565b5b04018160400181815250506001828460a0015181611dd457611dd3615a1c565b5b04018160600181815250506001820167ffffffffffffffff811115611dfc57611dfb615c67565b5b604051908082528060200260200182016040528015611e2a5781602001602082028036833780820191505090505b50816080018190525092915050565b8183600001818152505080836020018181525050505050565b60008082600061010086880281611e6c57611e6b615a1c565b5b04815260200190815260200160002054905060008461010081611e9257611e91615a1c565b5b048681611ea257611ea1615a1c565b5b069050611eb0818684611ed4565b925050509392505050565b6000611ecd6001830360086004611e52565b9050919050565b600082610100038360018601026101000383901b901c90509392505050565b6000611f056001830360046005611e52565b9050919050565b600061012c8210611f43576103208210611f27576064611f3e565b600561012c830381611f3c57611f3b615a1c565b5b045b611f46565b60005b9050919050565b611f6a8261012001518360a0015160000151846000015101613fa2565b611f95826101a001516000600d8110611f8657611f85615a4b565b5b60200201518360a00151613fb8565b6120c2828260016006811115611fae57611fad615b78565b5b85606001516006811115611fc557611fc4615b78565b5b146120b65760026006811115611fde57611fdd615b78565b5b85606001516006811115611ff557611ff4615b78565b5b146120ad576003600681111561200e5761200d615b78565b5b8560600151600681111561202557612024615b78565b5b146120a4576004600681111561203e5761203d615b78565b5b8560600151600681111561205557612054615b78565b5b1461209b576005600681111561206e5761206d615b78565b5b8560600151600681111561208557612084615b78565b5b1461209257613fcf612096565b6140ce5b61209f565b61413e5b6120a8565b6141e65b6120b1565b61422d5b6120ba565b6143085b63ffffffff16565b5050565b60606120f060378460098111156120e0576120df615b78565b5b84612eb99092919063ffffffff16565b905092915050565b82846000019060098111156121105761210f615b78565b5b9081600981111561212457612123615b78565b5b8152505080846020018181525050600061213f6188b8612966565b90506121896040518060400160405280600181526020017f6700000000000000000000000000000000000000000000000000000000000000815250826129a890919063ffffffff16565b6007600981111561219d5761219c615b78565b5b856000015160098111156121b4576121b3615b78565b5b03612272576122016040518060400160405280600281526020017f696400000000000000000000000000000000000000000000000000000000000081525082612a7a90919063ffffffff16565b61224d6040518060400160405280600681526020017f626c61636b5f00000000000000000000000000000000000000000000000000008152508260000151613deb90919063ffffffff16565b612264828260000151613ccc90919063ffffffff16565b61226d81612bb8565b61227e565b61227d81848461431b565b5b8085604001819052505050505050565b61031a826000015114806122a7575061031b8260000151145b156122f1576122b583614334565b6122d5836122d06035600085612eb99092919063ffffffff16565b61437f565b6122e7838360008561018001516143c3565b6122f083612d76565b5b6122fa83614334565b6123426040518060400160405280600281526020017f696400000000000000000000000000000000000000000000000000000000000081525084612a7a90919063ffffffff16565b6123797f44000000000000000000000000000000000000000000000000000000000000008460000151612baa90919063ffffffff16565b61239482600001518460000151613ccc90919063ffffffff16565b61239d83612bb8565b6124218361241c6123eb602b61031a8760000151146123d85761031b8760000151146123d05760018760800151036123d3565b60075b6123db565b60065b86612eb99092919063ffffffff16565b600760098111156123ff576123fe615b78565b5b8660400151600981111561241657612415615b78565b5b1461469c565b61437f565b612433838360008561018001516143c3565b61243c83612d76565b505050565b60008183126124505781612452565b825b905092915050565b6000818313612469578161246b565b825b905092915050565b838560000181815250508285602001818152505081856040018181525050808560600181815250508382038560800181815250508281038560a00181815250505050505050565b600081610140015190506000600190505b8261018001518110156125a65761257b82612529856101a0015160018503600d81106124fa576124f9615a4b565b5b602002015160000151866101a0015185600d811061251b5761251a615a4b565b5b602002015160000151612816565b612576866101a0015160018603600d811061254757612546615a4b565b5b602002015160200151876101a0015186600d811061256857612567615a4b565b5b602002015160200151612816565b611e39565b612599828460e001518661014001516128d59092919063ffffffff16565b80806001019150506124cb565b50505050565b6000806125d2603c6064600f61012c890102816125cc576125cb615a1c565b5b04614718565b9050600284846125e35760016125e6565b60025b60ff16830202816125fa576125f9615a1c565b5b049150509392505050565b600061016880605a6103e86126368a602001518c6000015160200151038c60000151600001518c6000015103614731565b8161264457612643615a1c565b5b0501018161265557612654615a1c565b5b069050600060646103e8858a6020015185610169811061267857612677615a4b565b5b602002015161ffff160286606403605a86010201028161269b5761269a615a1c565b5b04850190506126f5836103e8886126b1856147c5565b02816126c0576126bf615a1c565b5b0589600001510160010b6103e8896126d786614819565b02816126e6576126e5615a1c565b5b058a602001510160010b611e39565b5050505050505050565b6000600d846000015160030b901b846000018181511891509060030b908160030b815250506011846000015160030b901d846000018181511891509060030b908160030b815250506005846000015160030b901b846000018181511891509060030b908160030b81525050826001848403016000866000015160030b1261278a578560000151612794565b6001866000015119015b60030b816127a5576127a4615a1c565b5b070190509392505050565b60006101af82101580156127c657506101c68211155b6127f35761011182106127eb5761033b82106127e35760036127e6565b60015b6127ee565b60005b6127f6565b60025b9050919050565b6000600161280e83600060016126ff565b149050919050565b600060028284018161282b5761282a615a1c565b5b05905092915050565b600080612842858585614830565b90505b61285085858561485f565b81116128c857600061286386868661488b565b90505b6128718686866148ba565b81116128ba57600180828860800151858151811061289257612891615a4b565b5b6020026020010151901c16036128ad576000925050506128ce565b8080600101915050612866565b508080600101915050612845565b50600190505b9392505050565b60006128e2848484614830565b90505b6128f084848461485f565b811161296057600061290385858561488b565b90505b6129118585856148ba565b811161295257806001901b8560800151838151811061293357612932615a4b565b5b6020026020010181815117915081815250508080600101915050612906565b5080806001019150506128e5565b50505050565b61296e615530565b61297782613c4f565b81600001819052506000816040019060ff16908160ff16815250506000816060019015159081151581525050919050565b6129b1826148e6565b80826020015183604001805180919060010160ff1660ff1681525060ff16601481106129e0576129df615a4b565b5b6020020181905250612a1f7f3c00000000000000000000000000000000000000000000000000000000000000836000015161495090919063ffffffff16565b612a36818360000151613deb90919063ffffffff16565b60008260600190151590811515815250505050565b612a558383612a7a565b612a6c818460000151613deb90919063ffffffff16565b612a7583612bb8565b505050565b612ab17f2000000000000000000000000000000000000000000000000000000000000000836000015161495090919063ffffffff16565b612ac8818360000151613deb90919063ffffffff16565b612aff7f3d00000000000000000000000000000000000000000000000000000000000000836000015161495090919063ffffffff16565b612b367f2200000000000000000000000000000000000000000000000000000000000000836000015161495090919063ffffffff16565b5050565b612b548260010b84600001516149a990919063ffffffff16565b612b8b7f20000000000000000000000000000000000000000000000000000000000000008460000151612baa90919063ffffffff16565b612ba58160010b84600001516149a990919063ffffffff16565b505050565b612bb48282614950565b5050565b612bef7f2200000000000000000000000000000000000000000000000000000000000000826000015161495090919063ffffffff16565b50565b612c3a6040518060400160405280600481526020017f7265637400000000000000000000000000000000000000000000000000000000815250836129a890919063ffffffff16565b612c886040518060400160405280600181526020017f78000000000000000000000000000000000000000000000000000000000000008152508260000151846149fd9092919063ffffffff16565b612cd66040518060400160405280600181526020017f79000000000000000000000000000000000000000000000000000000000000008152508260200151846149fd9092919063ffffffff16565b612d246040518060400160405280600581526020017f77696474680000000000000000000000000000000000000000000000000000008152508260800151846149fd9092919063ffffffff16565b612d726040518060400160405280600681526020017f68656967687400000000000000000000000000000000000000000000000000008152508260a00151846149fd9092919063ffffffff16565b5050565b8060400180518091906001900360ff1660ff1681525050806060015115612e5857612de36040518060400160405280600281526020017f3c2f0000000000000000000000000000000000000000000000000000000000008152508260000151614a2c90919063ffffffff16565b612e1c8160200151826040015160ff1660148110612e0457612e03615a4b565b5b60200201518260000151613deb90919063ffffffff16565b612e537f3e00000000000000000000000000000000000000000000000000000000000000826000015161495090919063ffffffff16565b612ea5565b612ea46040518060400160405280600281526020017f2f3e0000000000000000000000000000000000000000000000000000000000008152508260000151614a2c90919063ffffffff16565b5b600181606001901515908115158152505050565b6060612ecd8383866000015163ffffffff16565b90509392505050565b612edf826148e6565b612ef6818360000151613deb90919063ffffffff16565b5050565b612f0682826007614abc565b612f168282603060076023614b0c565b612f2282826001614abc565b612f30828260316025614b22565b612f3e828260326026614b22565b612f4e8282603360086027614b0c565b612f5e8282603460096028614b0c565b612f708282603560066029601d614b5f565b612f8082826036601c6000614bb2565b612f9082826007602a6000614c95565b612f9982612d76565b5050565b612fd18282604051602001612fb29190615d2e565b60405160208183030381529060405285612a4b9092919063ffffffff16565b505050565b61301e6040518060400160405280600181526020017f6700000000000000000000000000000000000000000000000000000000000000815250856129a890919063ffffffff16565b613093846040518060400160405280600481526020017f66696c6c000000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f6c69676874000000000000000000000000000000000000000000000000000000815250612f9d565b60005b83602001518110156134b0576000846000015182603281106130bb576130ba615a4b565b5b6020020151905061310a6040518060400160405280600681526020017f636972636c650000000000000000000000000000000000000000000000000000815250876129a890919063ffffffff16565b61315c6040518060400160405280600281526020017f6378000000000000000000000000000000000000000000000000000000000000815250826000015160000151886149fd9092919063ffffffff16565b6131ae6040518060400160405280600281526020017f6379000000000000000000000000000000000000000000000000000000000000815250826000015160200151886149fd9092919063ffffffff16565b6131ff6040518060400160405280600181526020017f7200000000000000000000000000000000000000000000000000000000000000815250600a83602001510288614dcb9092919063ffffffff16565b6132476040518060400160405280600781526020017f616e696d61746500000000000000000000000000000000000000000000000000815250876129a890919063ffffffff16565b6132c66040518060400160405280600d81526020017f6174747269627574654e616d65000000000000000000000000000000000000008152506040518060400160405280600781526020017f6f7061636974790000000000000000000000000000000000000000000000000081525088612a4b9092919063ffffffff16565b6133456040518060400160405280600681526020017f76616c75657300000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f303b313b3000000000000000000000000000000000000000000000000000000081525088612a4b9092919063ffffffff16565b6133c46040518060400160405280600b81526020017f726570656174436f756e740000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f696e646566696e6974650000000000000000000000000000000000000000000081525088612a4b9092919063ffffffff16565b61340c6040518060400160405280600381526020017f647572000000000000000000000000000000000000000000000000000000000081525087612a7a90919063ffffffff16565b61343b613428611388614e20866126ff9092919063ffffffff16565b87600001516149a990919063ffffffff16565b6134876040518060400160405280600281526020017f6d730000000000000000000000000000000000000000000000000000000000008152508760000151613deb90919063ffffffff16565b61349086612bb8565b61349986612d76565b6134a286612d76565b508080600101915050613096565b506134ba84612d76565b6134c58484846134cb565b50505050565b6135136040518060400160405280600181526020017f6700000000000000000000000000000000000000000000000000000000000000815250846129a890919063ffffffff16565b61351d8382614dfa565b60005b826020015181101561367e5760008360000151826032811061354557613544615a4b565b5b6020020151905061355585614334565b613563858260200151614e48565b6135ab6040518060400160405280600181526020017f640000000000000000000000000000000000000000000000000000000000000081525086612a7a90919063ffffffff16565b6135f76040518060400160405280600281526020017f4d200000000000000000000000000000000000000000000000000000000000008152508660000151613deb90919063ffffffff16565b61361285826000015160000151836000015160200151612b3a565b61365e6040518060400160405280600681526020017f206c2030203000000000000000000000000000000000000000000000000000008152508660000151613deb90919063ffffffff16565b61366785612bb8565b61367085612d76565b508080600101915050613520565b5061368883612d76565b505050565b600061369c83600001516127b0565b905060006009905060008460e001519050600160038111156136c1576136c0615b78565b5b8360038111156136d4576136d3615b78565b5b148061370357506003808111156136ee576136ed615b78565b5b83600381111561370157613700615b78565b5b145b156137885761371186614334565b613765866137606001600381111561372c5761372b615b78565b5b86600381111561373f5761373e615b78565b5b1461374b57603461374e565b60335b600088612eb99092919063ffffffff16565b61437f565b6137838686600488610180015161377d60008a6120c6565b86614e96565b600891505b61379186614334565b6138106040518060400160405280600281526020017f69640000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f570000000000000000000000000000000000000000000000000000000000000081525088612a4b9092919063ffffffff16565b6138608661385b602b61031a8960000151146138485761031b896000015114613840576001896080015103613843565b60025b61384b565b60055b88612eb99092919063ffffffff16565b61437f565b61387d86866000886101800151613877878a6120c6565b86614e96565b6003808111156138905761388f615b78565b5b8360038111156138a3576138a2615b78565b5b03613b7f57600060078661018001511490506138be87614334565b6138d88787600060036138d260098b6120c6565b87614e96565b6138e187614334565b6139606040518060400160405280600e81526020017f7374726f6b652d6c696e656361700000000000000000000000000000000000008152506040518060400160405280600481526020017f627574740000000000000000000000000000000000000000000000000000000081525089612a4b9092919063ffffffff16565b61398a878760018461397357600a613976565b60065b60ff1661398460098b6120c6565b87614e96565b61399387614334565b6139de8787836139a45760026139a7565b60015b60ff16846139b65760066139b9565b60045b60ff166139c760078b6120c6565b600a88816139d8576139d7615a1c565b5b04614e96565b60006040518060400160405280600981526020017f6974656d5f737569740000000000000000000000000000000000000000000000815250905060006040518060400160405280600a81526020017f6d61726b65722d6d6964000000000000000000000000000000000000000000008152509050613a5b89614334565b613a65898361437f565b613aa5896040518060400160405280600c81526020017f6d61726b65722d7374617274000000000000000000000000000000000000000081525084612f9d565b613adf898985613ab6576002613ab9565b60015b60ff1686613ac8576006613acb565b60045b60ff16613ad960008d6120c6565b89614e96565b613ae889614334565b613af3898284612f9d565b613b2d898985613b04576005613b07565b60025b60ff1686613b16576009613b19565b60065b60ff16613b2760008d6120c6565b89614e96565b613b3689614334565b613b41898284612f9d565b613b7b898985613b52576007613b55565b60035b60ff1686613b6457600b613b67565b60075b60ff16613b7560008d6120c6565b89614e96565b5050505b505050505050565b613b948260400151612d76565b60076009811115613ba857613ba7615b78565b5b82600001516009811115613bbf57613bbe615b78565b5b03613c1557613bfb82613bd36001846120c6565b613bf6601c600a600c88602001510281613bf057613bef615a1c565b5b04614718565b614ebe565b613c1482613c0a6007846120c6565b8460200151614ebe565b5b613c34613c258360400151613c39565b84612ed690919063ffffffff16565b505050565b6060613c488260000151613f7d565b9050919050565b613c57615569565b8167ffffffffffffffff811115613c7157613c70615c67565b5b6040519080825280601f01601f191660200182016040528015613ca35781602001600182028036833780820191505090505b5081600001819052506000816020018181525050919050565b613cc882826000613df9565b5050565b60008161ffff1603613d1e57613d19827f30313233343536373839000000000000000000000000000000000000000000006000600a8110613d1057613d0f615a4b565b5b1a60f81b614950565b613de7565b6000808261ffff1690505b6000811115613d53578180600101925050600a8181613d4b57613d4a615a1c565b5b049050613d29565b60008361ffff1691505b60008360ff161115613de3578280600190039350508260ff16600a0a9050613dcb857f3031323334353637383900000000000000000000000000000000000000000000838581613db057613daf615a1c565b5b04600a8110613dc257613dc1615a4b565b5b1a60f81b614950565b808281613ddb57613dda615a1c565b5b069150613d5d565b5050505b5050565b613df58282614a2c565b5050565b613e15613e068383610883565b84613deb90919063ffffffff16565b505050565b60606000825103613e3c57604051806020016040528060008152509050613f78565b6000604051806060016040528060408152602001615e616040913990506000600360028551613e6b9190615d8a565b613e759190615dbe565b6004613e819190615def565b67ffffffffffffffff811115613e9a57613e99615c67565b5b6040519080825280601f01601f191660200182016040528015613ecc5781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015613f38576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050613edd565b5050600386510660018114613f545760028114613f6757613f6f565b603d6001830353603d6002830353613f6f565b603d60018303535b50505080925050505b919050565b6060600082602001519050600083600001519050818152836000015192505050919050565b80826000019060030b908160030b815250505050565b613fcb8282600001518360200151611e39565b5050565b81610160015182610180018181525050614011826101a00151600184610180015103600d811061400257614001615a4b565b5b60200201518360a00151613fb8565b600060018361018001510390505b60008111156140c957614070836101a0015182600d811061404357614042615a4b565b5b60200201518460c0015162041eb0866101000151876101400151876126059095949392919063ffffffff16565b6140bb8361014001518460c0015162041eb0866101000151876101a0015160018703600d81106140a3576140a2615a4b565b5b6020020151876126059095949392919063ffffffff16565b80806001900391505061401f565b505050565b60006140de836101200151614fe1565b905061410062a7d8c062c65d408561012001516126ff9092919063ffffffff16565b8102905060006103e861412660006101688761012001516126ff9092919063ffffffff16565b0290506141388484615026858561504b565b50505050565b600061414e836101200151614fe1565b905061416e6103206104b08561012001516126ff9092919063ffffffff16565b810290506141d18360a001516103e860028660e001518502028161419557614194615a1c565b5b0562015f90866101000151876101a001516000600d81106141b9576141b8615a4b565b5b6020020151876126059095949392919063ffffffff16565b6141e183836150fd84600061504b565b505050565b60006141f6836101200151614fe1565b90506142166188b861c3508561012001516126ff9092919063ffffffff16565b8102905061422883836151338461515c565b505050565b600061423d8361012001516127fd565b6142675761425f611f40612af88561012001516126ff9092919063ffffffff16565b600003614286565b614285612ee0613a988561012001516126ff9092919063ffffffff16565b5b90506142f58360a0015160026127108660e001518502816142aa576142a9615a1c565b5b05816142b9576142b8615a1c565b5b0562041eb0866101000151876101a001516000600d81106142dd576142dc615a4b565b5b6020020151876126059095949392919063ffffffff16565b614303838361523a8461515c565b505050565b614317828261524d600061515c565b5050565b6143258383614dfa565b61432f8382614e48565b505050565b61437c6040518060400160405280600481526020017f7061746800000000000000000000000000000000000000000000000000000000815250826129a890919063ffffffff16565b50565b6143bf826040518060400160405280600a81526020017f6d61726b65722d656e640000000000000000000000000000000000000000000081525083612f9d565b5050565b61440b6040518060400160405280600181526020017f640000000000000000000000000000000000000000000000000000000000000081525085612a7a90919063ffffffff16565b6144576040518060400160405280600281526020017f4d200000000000000000000000000000000000000000000000000000000000008152508560000151613deb90919063ffffffff16565b6144fa846144a8856101a0015185600d811061447657614475615a4b565b5b602002015160000151866101a0015160018701600d811061449a57614499615a4b565b5b602002015160000151612816565b6144f5866101a0015186600d81106144c3576144c2615a4b565b5b602002015160200151876101a0015160018801600d81106144e7576144e6615a4b565b5b602002015160200151612816565b612b3a565b60006001830190505b6001820381101561468c5761455a6040518060400160405280600381526020017f20512000000000000000000000000000000000000000000000000000000000008152508660000151613deb90919063ffffffff16565b6145a585856101a0015183600d811061457657614575615a4b565b5b602002015160000151866101a0015184600d811061459757614596615a4b565b5b602002015160200151612b3a565b6145dc7f20000000000000000000000000000000000000000000000000000000000000008660000151612baa90919063ffffffff16565b61467f8561462d866101a0015184600d81106145fb576145fa615a4b565b5b602002015160000151876101a0015160018601600d811061461f5761461e615a4b565b5b602002015160000151612816565b61467a876101a0015185600d811061464857614647615a4b565b5b602002015160200151886101a0015160018701600d811061466c5761466b615a4b565b5b602002015160200151612816565b612b3a565b8080600101915050614503565b5061469684612bb8565b50505050565b606082826146b957604051806020016040528060008152506146f0565b6040518060400160405280600681526020017f5f66656c697800000000000000000000000000000000000000000000000000008152505b604051602001614701929190615c43565b604051602081830303815290604052905092915050565b60008183116147275781614729565b825b905092915050565b600061473c82615256565b61474584615256565b1061476b5761475383615271565b62015f900261476283856152ba565b600003016147bd565b6000821261477a5760006147ac565b600083126147895760016147ab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b5b6202bf20026147bb84846152ba565b015b905092915050565b60008062057e4065034630b8a0008401816147e3576147e2615a1c565b5b0790506202bf20811315614807576147ff6202bf208203615318565b600003614811565b61481081615318565b5b915050919050565b600061482962015f9083016147c5565b9050919050565b60006148568360000151836000038660000151600001518760400151886020015161534b565b90509392505050565b60006148828360000151838660000151600001518760400151886020015161534b565b90509392505050565b60006148b18360200151836000038660000151602001518760600151886020015161534b565b90509392505050565b60006148dd8360200151838660000151602001518760600151886020015161534b565b90509392505050565b6000816040015160ff161180156148ff57508060600151155b1561493c5761493b7f3e00000000000000000000000000000000000000000000000000000000000000826000015161495090919063ffffffff16565b5b600181606001901515908115158152505050565b8082600001518360200180518091906001018152508151811061497657614975615a4b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505050565b60008112156149ee576149dc827f2d00000000000000000000000000000000000000000000000000000000000000612baa565b6149e98282600003613ccc565b6149f9565b6149f88282613ccc565b5b5050565b614a078383612a7a565b614a1e8184600001516149a990919063ffffffff16565b614a2783612bb8565b505050565b60005b8151811015614ab757818181518110614a4b57614a4a615a4b565b5b602001015160f81c60f81b836000015184602001805180919060010181525081518110614a7b57614a7a615a4b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050614a2f565b505050565b614acb8383602f846022614b0c565b614ada8383602e846021614b0c565b614ae98383602d846020614b0c565b614af88383602c84601f614b0c565b614b078383602b84601e614b0c565b505050565b614b1b85858585856000614b5f565b5050505050565b614b31848484601b6000614bb2565b614b418484600860246000614c95565b614b5084846007846000614c95565b614b5984612d76565b50505050565b614b94868686601b60016009811115614b7b57614b7a615b78565b5b886009811115614b8e57614b8d615b78565b5b14614bb2565b614ba18686858585614c95565b614baa86612d76565b505050505050565b614bfa6040518060400160405280600681526020017f6d61726b65720000000000000000000000000000000000000000000000000000815250866129a890919063ffffffff16565b614c626040518060400160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250614c52614c4c86600089612eb99092919063ffffffff16565b8461469c565b87612a4b9092919063ffffffff16565b614c8e614c7b83600087612eb99092919063ffffffff16565b8660000151613deb90919063ffffffff16565b5050505050565b614c9e85614334565b614cb185614cac85876120c6565b614dfa565b614d306040518060400160405280600c81526020017f7374726f6b652d776964746800000000000000000000000000000000000000008152506040518060400160405280600381526020017f2e3138000000000000000000000000000000000000000000000000000000000081525087612a4b9092919063ffffffff16565b614d5c614d4982600087612eb99092919063ffffffff16565b8660000151613deb90919063ffffffff16565b614dbb6040518060400160405280600181526020017f6400000000000000000000000000000000000000000000000000000000000000815250614dab84600088612eb99092919063ffffffff16565b87612a4b9092919063ffffffff16565b614dc485612d76565b5050505050565b614dd58383612a7a565b614dec818460000151613ccc90919063ffffffff16565b614df583612bb8565b505050565b614e446040518060400160405280600681526020017f7374726f6b6500000000000000000000000000000000000000000000000000008152508284612a4b9092919063ffffffff16565b5050565b614e926040518060400160405280600c81526020017f7374726f6b652d776964746800000000000000000000000000000000000000008152508284614dcb9092919063ffffffff16565b5050565b614ea186838361431b565b614ead868686866143c3565b614eb686612d76565b505050505050565b600083604001519050614f0f6040518060400160405280600381526020017f7573650000000000000000000000000000000000000000000000000000000000815250826129a890919063ffffffff16565b614f576040518060400160405280600481526020017f687265660000000000000000000000000000000000000000000000000000000081525082612a7a90919063ffffffff16565b614fa36040518060400160405280600781526020017f23626c61636b5f000000000000000000000000000000000000000000000000008152508260000151613deb90919063ffffffff16565b614fbe84602001518260000151613ccc90919063ffffffff16565b614fc781612bb8565b614fd281848461431b565b614fdb81612d76565b50505050565b600080614ff183600060016126ff565b14614ffd57600161501f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b9050919050565b60008160018603600e01848161503f5761503e615a1c565b5b05019050949350505050565b600160028661016001510203856101800181815250506000600190505b8561018001518110156150f5576150e8866101a0015160018303600d811061509357615092615a4b565b5b60200201518760c001516150b2848a610180015188888b63ffffffff16565b8961010001518a6101a0015186600d81106150d0576150cf615a4b565b5b60200201518a6126059095949392919063ffffffff16565b8080600101915050615068565b505050505050565b6000826064600d861461511157602c615114565b601a5b60ff166001615125898a8a03615380565b030203029050949350505050565b60008160016002806001888801018161514f5761514e615a1c565b5b0602030290509392505050565b836101600151846101800181815250506000600190505b84610180015181101561523357600061519682876101800151858763ffffffff16565b90506151e0866101a0015160018403600d81106151b6576151b5615a4b565b5b60200201518760c00151838961010001518a61014001518a6126059095949392919063ffffffff16565b6152258661014001518760c00151838961010001518a6101a0015187600d811061520d5761520c615a4b565b5b60200201518a6126059095949392919063ffffffff16565b508080600101915050615173565b5050505050565b6000816002850284030290509392505050565b60009392505050565b6000808212615265578161526a565b816000035b9050919050565b60008082136152b057600082126152895760006152ab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b6152b3565b60015b9050919050565b60008082846103e802816152d1576152d0615a1c565b5b059050633b9aca006152e282615256565b610ed60262d5eeb5016103e86152f784615256565b038302028161530957615308615a1c565b5b0581602d020391505092915050565b6000816202bf2003820264096dfcf50003826202bf200383610fa002028161534357615342615a1c565b5b059050919050565b600061537582615370600086888a8c01038161536a57615369615a1c565b5b0561245a565b615380565b905095945050505050565b600081831061538f5781615391565b825b905092915050565b604051806101c00160405280600081526020016153b4615583565b81526020016153c1615583565b81526020016153ce61562e565b81526020016153db61565b565b8152602001600081526020016153ef615450565b81526020016153fc615450565b8152602001615409615450565b8152602001615416615450565b81526020016154236154fb565b815260200161543061567e565b815260200161543d61567e565b815260200161544a61569e565b81525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180604001604052806154996156b2565b81526020016154a66156cc565b81525090565b6040518060200160405280600060030b81525090565b6040518060600160405280600060098111156154e1576154e0615b78565b5b8152602001600081526020016154f5615530565b81525090565b6040518060a0016040528061550e615450565b8152602001600081526020016000815260200160008152602001606081525090565b6040518060800160405280615543615569565b81526020016155506156f0565b8152602001600060ff1681526020016000151581525090565b604051806040016040528060608152602001600081525090565b604051806101c001604052806000815260200160008152602001600060098111156155b1576155b0615b78565b5b8152602001600060068111156155ca576155c9615b78565b5b8152602001600081526020016155de6156b2565b81526020016000815260200160008152602001600081526020016156006154ac565b815260200161560d6156b2565b81526020016000815260200160008152602001615628615718565b81525090565b6040518060e001604052806007905b6156456154c2565b81526020019060019003908161563d5790505090565b604051806101400160405280600a90602082028036833780820191505090505090565b6040518060400160405280615691615746565b8152602001600081525090565b604051806020016040528061577481525090565b604051806040016040528060008152602001600081525090565b60405180612d20016040528061016990602082028036833780820191505090505090565b6040518061028001604052806014905b60608152602001906001900390816157005790505090565b604051806101a00160405280600d905b6157306156b2565b8152602001906001900390816157285790505090565b6040518061064001604052806032905b61575e61577e565b8152602001906001900390816157565790505090565b61577c615e31565b565b60405180604001604052806157916156b2565b8152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006157ce826157a3565b9050919050565b6157de816157c3565b81146157e957600080fd5b50565b6000813590506157fb816157d5565b92915050565b6000602082840312156158175761581661579e565b5b6000615825848285016157ec565b91505092915050565b615837816157c3565b82525050565b6000602082019050615852600083018461582e565b92915050565b6000819050919050565b61586b81615858565b811461587657600080fd5b50565b60008135905061588881615862565b92915050565b600080fd5b6000819050826020600402820111156158af576158ae61588e565b5b92915050565b60008115159050919050565b6158ca816158b5565b81146158d557600080fd5b50565b6000813590506158e7816158c1565b92915050565b600080600060c084860312156159065761590561579e565b5b600061591486828701615879565b935050602061592586828701615893565b92505060a0615936868287016158d8565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b8381101561597a57808201518184015260208101905061595f565b60008484015250505050565b6000601f19601f8301169050919050565b60006159a282615940565b6159ac818561594b565b93506159bc81856020860161595c565b6159c581615986565b840191505092915050565b600060208201905081810360008301526159ea8184615997565b905092915050565b6159fb816158b5565b82525050565b6000602082019050615a1660008301846159f2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615ad660268361594b565b9150615ae182615a7a565b604082019050919050565b60006020820190508181036000830152615b0581615ac9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615b4260208361594b565b9150615b4d82615b0c565b602082019050919050565b60006020820190508181036000830152615b7181615b35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680615bee57607f821691505b602082108103615c0157615c00615ba7565b5b50919050565b600081905092915050565b6000615c1d82615940565b615c278185615c07565b9350615c3781856020860161595c565b80840191505092915050565b6000615c4f8285615c12565b9150615c5b8284615c12565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f75726c2823000000000000000000000000000000000000000000000000000000600082015250565b6000615ccc600583615c07565b9150615cd782615c96565b600582019050919050565b7f2900000000000000000000000000000000000000000000000000000000000000600082015250565b6000615d18600183615c07565b9150615d2382615ce2565b600182019050919050565b6000615d3982615cbf565b9150615d458284615c12565b9150615d5082615d0b565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615d9582615858565b9150615da083615858565b9250828201905080821115615db857615db7615d5b565b5b92915050565b6000615dc982615858565b9150615dd483615858565b925082615de457615de3615a1c565b5b828204905092915050565b6000615dfa82615858565b9150615e0583615858565b9250828202615e1381615858565b91508282048414831517615e2a57615e29615d5b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220bd81353406884e93a5259e54f8890181adc8af75c6ed075423d08028f24d919d64736f6c63430008130033000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000010e00000000000000000000000000000000000000000000000000000000000001500000000000000000000000000000000000000000000000000000000000000172000000000000000000000000000000000000000000000000000000000000017c0000007113426442355632734566673126234652547313652612433524617134100000145523555554255455322535215215445234234532312222111123254410000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001f60000000000000000000000000000000000000000000000000000000000000007d134113e6131513701359133413e313a2137e13d41368134d137d136313a4139912f213e71448133212cd1388139e142d13b812df133612f61425137013fb13db12ad13ec13aa12b5144a12eb131a144d138e145414031428146413aa12f012f014aa1352149112e414a6139313f2129e148313d51401146f133e128912a31323136014c112d9147e126713d812c712af127a136813b614be1457145c148e141f126012c3145714a912d71274123813d812b71497140e1256125e1303136412561431123c14b312b414de136012041338121c141e1345150b128514aa135214e51387152914ec1469123912a7144e14e312e012251501139614d21444136c122414d01269137411dd152b13791424120b14cd129311e6138b121c145b12ae14e7120b12bf11cc13a5121f148f12bc151213a9154515151458146414fe12b3120e132711bf13f211c41265122514bb122b153b12f514a514f511e812cb154613ab127711f51564132211c112e5152f146813f1155b120814a011b113db1292151a11be1461157713d5132a119e12621521142511b2133b156814b0151014f01235118a1445115e136b11b91292153b14a413351583119013491231120d14161575156e12bf150d121a144911941371116112a0119c11e1121a1294157711de14e715b6133115d413dd157614a914d3153c140415ad135615ab1595140e15a1135d117014941275159711ee15241267119d1372113d1417115114e511bf157b125d124e15b1131015ec13c815ee135e15d614a0159d11c811f6116b12b7114813ac15a5148a1569153c153d153714ae15c4115212861117136f1126144a119415101233116912cc114213bf1119146611511506119c159c124315dd1321160013db162713df112d127915f612c11447110f154b11b31302111815c414a611b211db1289160012621130152615aa10e4135a137f10e1131c161415c7122813e3162210f3145315d01501162413031148150711bf158a116b11d61505114f11d5118c15f9151c165313e81615148d12c110e6145f10e7158c119d13a6164314761617132c167013ef167a1471164316441493161712771654132e1505160b1575159010ee124e10b1130b109313a210b31449110f14de1159155711e015d8127a1638147810bc152e1114158e116c16221209128410bc166b13db11d41131113411be159015d610ce1219166c128911ab113810a012ee12561640134f109113b410be152010f110e414f2166514ae169f134d147d165e15f61541117815c913f71096161e155215cb15da142216a115061649108b14521143116d148a10921343168116b4131410c41522114715c516b113ee168d149611e816381299168f133d16b314fd108f11c8165310731287105a1372106a1448159b110a16091195168a12451216107912d8104f1482107713c2105a12d7107d121c10bc1159112410cc11ac14e11691111c11051636118215c710e9151b1070118e10b11361101f1427102610b0118415ae1636163b15b31697150c16d0143616d313a416e912d11697121d133c170513c516e4148216a61039143c12d91022102213a610261301105e1251153c16ae114a164f142e16fb112015fc106314d410c2158411d51689128216a314b71022158b1087160f110f1679118714c316e61049150b126516e210aa15b8172613cd1711132416ed1251112210dc11e41055128d1011134a0ff314080ff80ff214430fe81364100912831617161b104f11d310b4113716a3155c16f8149b134e0fc516a4158c1711124c17341321162b10f3158716b5169e116d119d106111da1700141717471147169f10c316161049156e12e2170e13b7172611e116cb158b104914fd0ffd14410fc6105315d615fb16630ffe14c21271174414c91704103a1165109510f910f810ae11641033122a100612cd0fd313990fa6164510b610021561166c1631114616e310c41649138e176c131e17500fd512a80ff3121b1764138d175c1409170e14ba16ea157815681710128b177c11e717461448175d1058110010bb107412d60f861125104f119d0fea121e0fbd1743121b176012d116d611840fb9122e15f8104f152d0ff614670f93123a0f9c13b00f640ff011970fba156e0f9812d30fa214b80fab136e0fa314550fb113fb0faf13281095166d10f516fc11c517811152173910b6169d103416510ff615d40f911264102915ff12b417dc14dc175d1490177a140417be134917c8138f17b012d91795124b17b2179d1401178314671757150f16f61550171415ce1689164115f416c415851715105410de10b5105911470feb11c50fb21795129417bf12e717c213b2178e135311410f9b15a6100a15150f9d144c0f5413760f3712ea0f53121e0f630ffe113b1722118c16b911111642106711d20f4e12b80f2610ce10020fc9119c10421099136c0f071042104712550f0f0fea10f40f7d120914c80f5016fc1121177911fc1763154417c4149e17e713ff17f7132b17b9125c14270f1e16b610a311050f91117817b513c217fc1306180a104e16e0127c17e910ba1715120517c5118317821092177f11ab17de113f17c2105c171c10f21746156617650fde1659148b17a60f5c12fd0f7315bb0fc5168c0f7813da0f6b14d20f88159e0fa31590121c180d113e0f2112060eee10790fbc114f0f39108f0fd40fe010660f8c11240f5b1200175215ea15811786163916df15da16f0168416a616cd161c144417f412f30eda153b0f5f15550f8c12f3182d134c182513fe182a147a181116d01667150417d617e81220183112cc180c12cd182113aa12c30ebe13aa0ed714660efc161b0ff1180d1217185412c016ed10a217bd1525184a13a71778114a18071478175a116613440e9313ef0eb2148d0ed31830148917aa1169155a0f4616230fc916b7103e10bb0f0d0f6f10db0fbc106a10170fd210900f7811430ee511e20ece12760e90172a164e0f3b118d179015b9175010c6187313af11640ea910210f970f9c10251059176b101316dc0f3712761639174610a00eec0f4910c212260e6f169c16da127a188c139e183b12b91868100b0f7b15a217b511ca18321160181110e917b20fcd17340f6a16310fb516b6100e1740106a17d6130a186c10f01807119e18740ffa17a9118618990f2814e0146218520f6e16a10f3015ae10f5185c13e618511863128911fa0e5e11530e861051181914fc18250f89174c125b18a0134c188916360fa916e91037178b10e7188112731884143b18b91313180a11b21892136810f40e6811af0e35138a0e3c128a0e3213220e5d13fe0e83149f0eac156c0f200f1711b5183614f6106b0e9c0f9c0f770f2411080f4010260fba0f9110440f02126318c910f2188f11b818ba12df0e1a1806117c17eb158f15ec0f43145f0e7a0f6a17a80ef815a00f87176b0f2f16d40f1016351017182713cf189f12fa18c40ee216330f0216e112ee18f7125718f311d318eb115218e910bd18960ff6184d16b216fd165617700eed1511107818c115b217e0150a18591464187413a418c70f2b12ff0f6717cc141d18d00f40138a17841641171c16c41144190e0f2b144a15d517da12461941102b18bf1301192511cb19220fc418410efb174e0f06126410840e470fc90f0f0f360f8d0ef710360eeb11110ef411c610af191911451941109c0e0e114f0de111fa0ddf12b40de2102e0e9112450de311920df210f80e2811890da00fde0e9c10400e41131e0dd714450e3913e00e0c13640e040f980f0910dd0dc116d00fb612440d9a163a0f4115b80ee415550ede14db0e6e0f150f7518fe13300edb1072181f112817ce10ec0f2f0f190eda0fd6178910a61737100d149918a91880150e18ae122c18ad1443190f1376186011f818cf12a518c513db0efd17e3116d197e1234198212ef1942133f194413a71920144018ff153118640ea9169e0e9f17160f3a182a10dc1967104119270ff818bb0f8318680ee0178a111919b30fd819150f5c18830ed217be0f9818bb0eb1158d10a219530e97162711ca0d6f11010d9110460dd80f780eb80fec0e3d0eb915251287199411cd197111000d6a0ead10030f950e450ec30f6a14550e0313980dc712b40d930f220ef1193c139c18d8146e0f170eb80eb4117e0ea210d112120d5710440da715140e601816159b18ba15031931141019761330184f115b18b111b219121270193a12f0102819790e7c16740e7816e90ef2181c0e821783169d178e173716d917c1163f13f6193314a0191b14ee18ca15d10ea9160d0f06169e0f6c117619e110b1199c0fce198c107819dd110d19ee11d819e7123119cd12c619ac132a198f138c1972100619c71619180d15a018820e6217420e7a17ff0f7319510ee318810f4118f70f380e3211ab0d2c10dc0d5710250d890fa00ddc0ed50ea40eb90f071449194e0ed70e630fac0d9111270d0a146f0dd313d70daf132a0d85128b0d2e10720d2f0e4d0fe00e5b10850f370ddb135b0d420e710fe10e890f14152f0e2c11e60d020eed12b80eb712180e78114f12230ce112c10d0614130d81110f0cfa10470d240e9d184210c61a0018721129190311dd199112d419421282127719e20fd00d3918d51534177716d917d51694182e15e61853159a1803162a117b1a1a0f1018ca0e4616240e7a15d50e6b156e0f1513f70eac14c90eff146f16f91747191614bb0f51196a0f13192e0ef313410e9718a10e49182e0e3417a90e2416f80e4116a712341a3611cd1a4c11111a36107f1a330e92150010231a240ee712db0f9a19a316580f0516ea0f69171e0fbf181610e91794104313dc196a136b19df12cf1a151969144d199c13ae19c513001997125618fe118d188e111b160d0eaf17a610130e7a0e8e0e2d0ffb0f2d0dbb0e480f4a0ea30e7b195a11f414c70dc815770e3913220cff0e3e10c00f000dc612360cc80e320f2c114e0cb9106e0cd20fb20d2c126d0cb610470cb914220d4b11340c9e0eac12690f870d280e70118d13ee0d5215aa0e1814e20d9d0f6c0d1c0e1f0ef213630cf80e100fe20ee10dbb0e690e7010960c850e3711381848106c14450d3e11770c8117c00fdf17060f47166d0eb30e0010540dfc0f1f12670c9717020f200eae12d5139d0cef0ee40d870e690e3415920dea19c314261a05135a19f7128d198211df0fb40cc218f61121166e0e9014de192415b518b6166318091700178d17b21706183a165318e515a1194514f2168e183914af197f15d718c0170817af13e719dd16711823150a1929142a19990e5818d20ed419690f801a08104a1a8210fd1a9711831a7312541a7013241a2b0e7112220f8e1a3e0eea19aa1a21134f0e1318960dde17000dfb17ef18451672155519390e510e231a2912bd171e17c00e00161017a10f9d114e0c61196214f919e314230e6b14ae0ea0147a0ec613c80ecc0d74109b0c6614ef0d7b13f319f517010efa133e1a3f117b1aac144b0d1d17ac173814b8199d186b106515f518cd18f910fb10341a9d0f7a0cc719a411de0ddb0f8b12480c730eb119950dd017bc000000000000000000000000000000000000000000000000000000000000002003030302020202020202020202020201010101010101010101010000000000000707070706060606060606050505050504040404040404040404040404030303090909090a0909090909090909090909090909090909090808080808080707070c0c0c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090909090909090909090909090e0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f0f0e0d0d0d0d0d0d0b0b0c0c0c1010100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1010101010101010101010101010101010101010101010101010101010101010111111111111111111111111111111111111111110101010101010101010101014141412121212121212121212121212131212121212121212121212111111111616161616161616161616161616161616161616141414141414141415151414171717171717171717171714141414141414141414141414161616161616161619181818181818181818181818181414141414141414141414141414141417171a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a141b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a1a1a1a1e1e1e1e1e1e1e1d1d1d1d1d1d1c1c1c1c1c1c1c1c1c1c1c1b1b1b1b1b1b1b1b222222222121212121212020202020202020202020201f1e1e1e1e1e1e1e1e1e222222222222222222222222222222222222222222222222222222222222222224242424242424242424242424242424242424222223232323232222222222222626262626262626262626262626262626262626262626262625252424242424282828282828282828282828282828282828282828272727272727262626262629292929292929292928282828282828282828282828282828282828282828282c2b2b2b2b2b2b2a2a29292929292929292929292929292929292929292929292e2e2e2e2e2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2c2c2c2c2c31303030302f2f2f2f2f2f2f2f2f2f2f2f2f2e2e2e2e2e2e2e2e2e2e2e2e2e2e3535353535343433333333333333333333333333333333333333333232323131333336363636333535353535353535353535353535353535353535353535353538383838383838383838383838383838383838383838373737373737373733333a3a3a3a3a3a3a3a3a3a3a3a3a393939393939393939393939393939393838383a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a0000000000000000000000000000000000000000000000003a3a3a3a3a3a3a3a0000000000000000000000000000000000000000000000000000000000000010433433343333333333333333433332233223223332332232332333333333344533433333333333333333433343434333333343332443443333334334434434443422233333333333333333443333333333344343333343433334433333332333323334442444443432332323334324434333333343333323332343333333422334444443444444433332323333323323323233333333323323433224343323333344333332333233434213322133333233334333332233333233432334332334332222344443443233333333323322233323332332222332223232233342233234444444432222231233333333444344444444332222232333333332332333344443334422344344431231333332322332334434433434434234344444444433433433443344444344343444442144444444444344444444444333441134334323232331323333333333122223312342323333333133334334343334433334442232322223333333333323333434443334334444444434111123233212121322222555255555555555555555555555555555112222232223222222233311233333433333333324344443434333111143234433222442143432233313222232123433333343434334344333343343443443333332334433333333333334443333000000000000000000000000333343433444333434333333332434433333344400000000000000000000000000000000000000000000000000000000000000043002c0000002000000800000000000000000200008048428408130ac8a002060000000006320000000000041000000000000000000012400000001000108130000004000000000000000081000400000000000000000008000224040000000000000008004080000001080010200000000680020000000000000002000a60142000000000000000000000000000000000000000000000000000000000000047264696420796f752066696e6420746869733f2074656c6c206d65203a2d290009417363656e73696f6e0012436972636c65206f662054686520576f726d00145374657761726473206f662054686520576f726d0013416d626974696f75732054726176656c7320490017436972636c65206f66207468652057726967676c65727300145377696d6d696e672077697468205768616c65730014416d626974696f75732054726176656c732049490009436f6f6c20436174730015416d626974696f75732054726176656c7320494949000b426f6f746c6567204e4c4c001248616e67696e67207769746820427279616e000e546865204669727374204d696e740013546f702053686f742057617368204379636c65000f576f726d20436861696e204c697374000d53656e7469656e74204c6162730010576f726d696e672041726f756e642049000b537175616e63684c616e640011576f726d696e672041726f756e64204949001350616374206f6620746865204f727068616e73001054696d6d79204661742046696e676572001350616374206f662074686520566963696f75730012576f726d696e672041726f756e64204949490007546865204f6e65000641706544414f000e437265617475726520576f726c64000f4f6e20746865204f70656e20536561001350616374206f66207468652053696d70696e670011576f726d696e672041726f756e64204956000b477261696c65727344414f0014416d626974696f75732054726176656c73204956001254686520426567696e20537065656472756e001b4c69636b696e6720546f61647a2077697468204772656d706c696e0013457069632041727420426c6f636b732052756e0010576f726d696e672041726f756e642056001450756e6b7320616e6420546f61647a20546f757200144f6868205368696e792053686f772053706163650010526564204c696f6e2047617a65747465000d436174204561747320576f726d001350616374206f662074686520517569636b6c790011576f726d696e672041726f756e64205649001a43444220576f726d2052756e20436f6465206f6620486f6e6f72000f43727970746f4469636b6275747473000f4e61756768747920416d657269636100044d4f434100175371756967676c696e6720772f41727420426c6f636b7300185377696d6d696e672077697468205768616c6573204949490012576f726d696e672041726f756e6420564949000d546173747920546f6173747973000842616e6b6c6573730013576f726d696e672041726f756e642056494949000a41727420426c6f6e6b73000f50616374206f662074686520494f55000c5468652057726967676c6572001d50726f6e746f2050616374206f66207468652050726f746563746f72730017546865204d656368576f726d20466c6173682050616374001452657475726e206f662041727420426c6f636b73000a5468654d65726344414f001743726f7020436972636c65206f662054686520576f726d00184e6f6e2d46756e6769626c6520536f6369616c20436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001700790078007700760075007300720070006f006c006b0069006700640061005f0083008300830082008200810080007f007f007e007e007d007c007c007a007a008a008900890089008800880087008700870086008600850085008500840084008f008e008e008e008d008d008d008d008c008c008c008b008b008a008a008a009500950094009400930093009300920092009100910091009000900090008f00a0009f009f009e009d009c009c009b009a009900990098009700970096009500b900b600b400b200af00ae00ac00ab00a900a700a600a500a400a300a200a100e400e200df00dd00da00d800d500d200cf00cc00ca00c600c300c100be00bb01060104010000fe00fb00f800f600f300f000ef00ed00ec00eb00e900e800e501210120011f011f011d011c011b011901180116011401120110010e010b0108011c011e011f012001210121012201220123012301230123012301220122012200f900fa00fb00fc00fd00fe00ff010101040107010a010f011201150118011b00ff00fe00fd00fc00fb00fb00fa00f900f900f800f800f800f800f800f800f901240121011f011c011a011601140111010f010c010a01080106010401020101014501420140013d013b013801370135013301310130012e012d012c01290127016e016c016b0168016601640161015f015c0159015701530150014e014a0148017f017e017d017d017c017b017b017a01790177017601760174017301720170018701870186018601850185018401840183018301830182018101810180017f018c018c018c018b018b018b018a018a01890189018901890188018801880187019201910191019001900190018f018f018f018e018e018e018d018d018d018d019a01990199019701970196019601950195019401940194019301930192019201ac01a901a801a701a501a401a301a101a0019f019f019d019c019c019b019a000000000000000000000000000001c701c301be01ba01b901b501b201b001ad0000000000000000000000000000000000000000000000000000000000000e806d756368206c6f766520746f2074686520616d626974696f6e207465616d0000001d646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00297b226e616d65223a225c2255735c222062792054686520576f726d2078206d696e696d697a65722023005d222c226465736372697074696f6e223a225c22496e2063656c6562726174696f6e206f66207265616368696e6720313030302077616c6c6574732049277665206d616465207468697320666f7220796f752c204469736369706c65202301bc2e2054686520616767726567617465206f66206f7572206a6f7920616e64206f7572206c6f6e67206a6f75726e65792c2069742773206120736e617073686f74206f6620796f752c206d652c20616e6420616c6c2074686f73652077686f206c6564206d6520746f20796f752e20416c6f6e6520492077617320627574206120737065636b20696e2074686520636f736d6f732e205769746820796f75204920616d206120776f726c642e5c22202d2054686520576f726d205c6e5c6e54686973206c696d697465642065646974696f6e20636f6c6c656374696f6e2062792054686520576f726d20616e64206d696e696d697a65722069732061206769667420746f2065616368206f662074686520666972737420313030302077616c6c657473207468617420726563656976656420616e64207368617265642054686520576f726d206f6e20697473206a6f75726e6579206163726f73732074686520457468657265756d20656e7669726f6e6d656e742e2031303025206f6e2d636861696e20616e64204343302e222c2261747472696275746573223a5b7b2274726169745f74797065223a2243686170746572222c2276616c7565223a220029227d2c7b2274726169745f74797065223a22546f74616c204c6967687473222c2276616c7565223a22002f227d2c7b2274726169745f74797065223a2248696768657374204c696768742054696572222c2276616c7565223a220022227d2c7b2274726169745f74797065223a225370656564222c2276616c7565223a220026227d2c7b2274726169745f74797065223a2245766f6c7574696f6e222c2276616c7565223a220002227d002f2c7b2274726169745f74797065223a2253746f7020466f722053656c666965222c2276616c7565223a22596573227d00255d2c22696d616765223a22646174613a696d6167652f7376672b786d6c3b6261736536342c0002227d000d447761726620284c6967687429000c4769616e74202842756c6229001053757065726769616e7420284f726229001153757065726e6f7661202850616e656c29000854696d65204f7574000952656c756374616e7400064e696d626c650005537769667400094c696768746e696e67000854686520576f726d0010526573757272656374656420576f726d000842494720574f524d00094d65636820576f726d037e3c72616469616c4772616469656e742069643d226267223e3c73746f70206f66667365743d2230222073746f702d636f6c6f723d2223306130613061222f3e3c73746f70206f66667365743d2231222073746f702d636f6c6f723d2223313030353339222f3e3c2f72616469616c4772616469656e743e3c72616469616c4772616469656e742069643d226c69676874223e3c73746f70206f66667365743d222e303531222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e38313229222f3e3c73746f70206f66667365743d222e303839222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e373329222f3e3c73746f70206f66667365743d222e313337222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e36343329222f3e3c73746f70206f66667365743d222e313934222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e35353329222f3e3c73746f70206f66667365743d222e323538222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e34363229222f3e3c73746f70206f66667365743d222e333331222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e33373329222f3e3c73746f70206f66667365743d222e3431222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e32383929222f3e3c73746f70206f66667365743d222e343936222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e323129222f3e3c73746f70206f66667365743d222e353838222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e31343129222f3e3c73746f70206f66667365743d222e363835222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e30383329222f3e3c73746f70206f66667365743d222e373836222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e30333829222f3e3c73746f70206f66667365743d222e383931222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e303129222f3e3c73746f70206f66667365743d2231222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c3029222f3e3c2f72616469616c4772616469656e743e005b2076696577426f783d2230203020363020333022206d61726b657257696474683d22323022206d61726b65724865696768743d2231302220726566583d22312e372220726566593d22312e3522206f7269656e743d226175746f2200722076696577426f783d222d31202d312031203122206d61726b657257696474683d22312e30303522206d61726b65724865696768743d22312e3030352220726566583d222d302e30352220726566593d222d302e3522206f7269656e743d226175746f2d73746172742d72657665727365220030207374726f6b652d6c696e656a6f696e3d226d6974657222207374726f6b652d6d697465726c696d69743d223130302200594d312e3520302e3961202e3137202e3137203020302030203020302e334d312e3520322e3161202e3137202e31372030203020312030202d302e334d202e3920312e343961202e3035202e30352030203120302030202e3032002d4d312e35202e39356c3020302e31384d312e3520322e30356c30202d2e31384d202e3820312e33326c30202e3400674d312e3520312e3161202e3036202e3036203020312031202e303120304d312e3520312e3961202e3036202e3036203020312031202d2e303120304d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e3035203000754d312e3520312e3161202e3036202e3036203020312031202e303120304d312e3520312e3961202e3036202e3036203020312031202d2e303120304d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e303520307a204d2e3820312e346c30202e3200754d312e3520302e3961202e3137202e3137203020302031203020302e334d312e3520322e3161202e3137202e31372030203020302030202d302e334d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e303520307a204d2e3820312e346c30202e3200674d312e3520312e3161202e3036202e3036203020312031202e303120304d312e3520312e3961202e3036202e3036203020312031202d2e303120304d202e3920312e33326c2d2e3035203061202e3135202e31352030203120312030202e33366c202e30352030003b4d312e3520312e3161202e3033202e3033203020312031202e303120304d312e3520312e3961202e3033202e3033203020312031202d2e30312030004e4d312e373820316c2d2e323720302e32374d312e373820326c2d2e3237202d2e32374d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e30352030004e4d312e373820316c2d2e323720302e32374d312e373820326c2d2e3237202d2e32374d202e3920312e33326c2d2e3035203061202e3135202e31352030203120312030202e33366c202e30352030001c4d342e32202e363561202e3333202e38203020312030202e30312030003f4d342e353333202e363561202e3333202e3820333020312030202e303120304d332e383637202e363561202e3333202e38202d333020312030202e3031203000bb4d322e393520302e336131203120302030203120302e38202d302e313541202e38202e3820302030203020332e32202e363341312e3520312e3520302030203020322e393520302e337a204d332e3120302e346c302e35202d302e32357a4d322e393520322e376131203120302030203020302e3820302e313541202e38202e3820302030203120332e3220322e333741312e3520312e3520302030203120322e393520322e377a204d332e3120322e366c302e3520302e32357a00174d30202d324c3020324d2d302e33202d302e326c302030000d666163655f736c656570696e67000d666163655f756e616d75736564000b666163655f6e6f726d616c000a666163655f6861707079000c666163655f65786369746564000b666163655f66726f776e79000d666163655f73696e6973746572000d666163655f646566656174656400096974656d5f68616c6f000d6974656d5f6d65636868616c6f000a6974656d5f686f726e7300096974656d5f7375697400046e6f6e650007236164666632660007236638636231620007233966376166320007233336626365360007236631393031640007236666303034300007233031303030310004234646460007236563303038630017496e76616c6964204469736369706c65206e756d62657200294f6e2d636861696e2063616c6c206d7573742062652066726f6d20746f6b656e20636f6e7472616374001b526f79616c7479206164647265737320697320636f6e74726163740018546f6b656e20636f6e74726163742069732066726f7a656e
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610135578063b033ebf814610153578063bbcd5bbe14610171578063cd93a4851461018d578063f2fde38b146101975761009e565b806341e42f30146100a35780634c00de82146100bf57806355a373d6146100dd578063715018a6146100fb5780637f63a72214610105575b600080fd5b6100bd60048036038101906100b89190615801565b6101b3565b005b6100c7610213565b6040516100d4919061583d565b60405180910390f35b6100e5610239565b6040516100f2919061583d565b60405180910390f35b61010361025f565b005b61011f600480360381019061011a91906158ed565b610273565b60405161012c91906159d0565b60405180910390f35b61013d610526565b60405161014a919061583d565b60405180910390f35b61015b61054f565b6040516101689190615a01565b60405180910390f35b61018b60048036038101906101869190615801565b610562565b005b6101956105c9565b005b6101b160048036038101906101ac9190615801565b6105ed565b005b6101bb610670565b6101cf6101c7826106ee565b156043610711565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610267610670565b6102716000610763565b565b60606103063273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102ff5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6042610711565b6103236001851015801561031c57506103e88511155b6041610711565b600061032e85610827565b9050610883816101a001516000019067ffffffffffffffff16908167ffffffffffffffff1681525050600061036761138880600a61093d565b9050600084610379576001870361037b565b865b90506000600190505b8181116103ef576103998185602001516109ac565b6103a7846020015184610aba565b6103b084610b01565b6103e2848560200151866020015161018001516002886020015160e00151816103dc576103db615a1c565b5b04610c20565b8080600101915050610384565b508461045c576104038784602001516109ac565b6104118784604001516109ac565b600061041c88610cdd565b8015610426575085155b905061043c846020015185604001518584610cf8565b61044b848560200151836110f6565b61045a848560400151836110f6565b505b610477838661046c57600061046f565b60c85b60ff16611141565b600061048288611239565b9050600061049485610100015161125a565b90506000600390505b600081126104ee5760006104b1838361127a565b90506104df87886101600151838d86600481106104d1576104d0615a4b565b5b602002013561012c896112d1565b5080806001900391505061049d565b50610504858661018001518360326064876112d1565b6105188989610513888b6113f7565b611a34565b955050505050509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160149054906101000a900460ff1681565b61056a610670565b610585600160149054906101000a900460ff16156044610711565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6105d1610670565b60018060146101000a81548160ff021916908315150217905550565b6105f5610670565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b90615aec565b60405180910390fd5b61066d81610763565b50565b610678611d5f565b73ffffffffffffffffffffffffffffffffffffffff16610696610526565b73ffffffffffffffffffffffffffffffffffffffff16146106ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e390615b58565b60405180910390fd5b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8161071d826000610883565b9061075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075591906159d0565b60405180910390fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61082f615399565b8181600001818152505061084c8160c00151611388806000611d67565b610854615450565b61086981611388806107d06004880201611d67565b610874816064611d82565b82610140018190525050919050565b6060600b60008385604581111561089d5761089c615b78565b5b01815260200190815260200160002080546108b790615bd6565b80601f01602080910402602001604051908101604052809291908181526020018280546108e390615bd6565b80156109305780601f1061090557610100808354040283529160200191610930565b820191906000526020600020905b81548152906001019060200180831161091357829003601f168201915b5050505050905092915050565b610945615486565b61095481600001518585611e39565b60005b61016881116109a45761096c81601085611e52565b826020015182610169811061098457610983615a4b565b5b602002019061ffff16908161ffff16815250508080600101915050610957565b509392505050565b818160000181815250506109bf82611ebb565b8160200181815250506109da81602001516004600854611ed4565b60098111156109ec576109eb615b78565b5b81604001906009811115610a0357610a02615b78565b5b90816009811115610a1757610a16615b78565b5b81525050610a2d81602001516004600954611ed4565b6006811115610a3f57610a3e615b78565b5b81606001906006811115610a5657610a55615b78565b5b90816006811115610a6a57610a69615b78565b5b81525050610a7782611ef3565b816080018181525050610ab68160a00151610a9b6002600186030260106003611e52565b610ab16001600260018803020160106003611e52565b611e39565b5050565b60148260c001818152505060148260e0018181525050610add8260000151611f0c565b82610100018181525050600582610160018181525050610afd8282611f4d565b5050565b600081608001518260200151604001516009811115610b2357610b22615b78565b5b600a8110610b3457610b33615a4b565b5b6020020151905060008103610be6578160a0018051809190600101815250508160a001519050610baa82606001516001830360078110610b7757610b76615a4b565b5b6020020151836020015160400151610b9c856020015160400151866101a001516120c6565b856020015160e001516120f8565b8082608001518360200151604001516009811115610bcb57610bca615b78565b5b600a8110610bdc57610bdb615a4b565b5b6020020181815250505b610c1c82606001516001830360078110610c0357610c02615a4b565b5b6020020151604001518360200151846101a0015161228e565b5050565b60008460c0015190506000838561018001510390505b846101800151811015610ccb576000856101a0015182600d8110610c5d57610c5c615a4b565b5b60200201519050610cbd83610c7c856000015187856000015103612441565b610c90866020015188866020015103612441565b610ca487604001518987600001510161245a565b610cb888606001518a88602001510161245a565b612473565b508080600101915050610c36565b50610cd685856124ba565b5050505050565b600080610cf06001840360016006611e52565b119050919050565b6000610d0e8560a001516000015160010b611239565b90506000610d268660a001516020015160010b611239565b9050610d3b86600001518760800151856125ac565b8660c00181815250508560c001518660e0018181525050610d706002876000015181610d6a57610d69615a1c565b5b04611f0c565b866101000181815250506005866101600181815250508215610e2757600686606001906006811115610da557610da4615b78565b5b90816006811115610db957610db8615b78565b5b81525050600a60088760c001510281610dd557610dd4615a1c565b5b048660c0018181525050610e228660a00151600a600f8960e001510281610dff57610dfe615a1c565b5b0562041eb08961010001518a60a00151896126059095949392919063ffffffff16565b610eb9565b610eb88660a001516064610e4960c86101f4876126ff9092919063ffffffff16565b8960e001510281610e5d57610e5c615a1c565b5b05610e957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8ad0617530876126ff9092919063ffffffff16565b62041eb0018961010001518a60a00151896126059095949392919063ffffffff16565b5b610ec38685611f4d565b600060026003811115610ed957610ed8615b78565b5b610ee688600001516127b0565b6003811115610ef857610ef7615b78565b5b14905080610f07576001610f0a565b60025b60ff168760c00151028660c0018181525050600a81610f2a57600a610f2d565b60195b60ff168860e001510281610f4457610f43615a1c565b5b048660e001818152505086610100015186610100018181525050600786610160018181525050831561101b57600686606001906006811115610f8957610f88615b78565b5b90816006811115610f9d57610f9c615b78565b5b81525050611016876101a001516004600d8110610fbd57610fbc615a4b565b5b6020020151600a600c8960e001510281610fda57610fd9615a1c565b5b05610fe4856127fd565b610ff15762027100610ff5565b614e205b60020b8961010001518a60a001518a6126059095949392919063ffffffff16565b6110e3565b6110e2876101a00151611042600060018b610180015103866126ff9092919063ffffffff16565b600d811061105357611052615a4b565b5b6020020151606461107361012c6101f4876126ff9092919063ffffffff16565b8960c00151028161108757611086615a1c565b5b056110bf7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea07061afc8876126ff9092919063ffffffff16565b62041eb0018961010001518a60a001518a6126059095949392919063ffffffff16565b5b6110ed8686611f4d565b50505050505050565b61113c83838361110b5784610180015161110e565b60015b60028561111c57600161111f565b60035b60ff168760e00151028161113657611135615a1c565b5b04610c20565b505050565b60008260c00151905060008360e001519050600061116783600001518460400151612816565b9050600061117d84602001518560600151612816565b905060008561119486608001518760a0015161245a565b0190506111b78484846014600c8602816111b1576111b0615a1c565b5b04611d67565b6111dc87610100015184846014600b8602816111d6576111d5615a1c565b5b04611d67565b600061121a6111fb86600001516113880387602001516113880361245a565b61121561138888604001510361138889606001510361245a565b61245a565b905061122f8861012001516113888084611d67565b5050505050505050565b6112416154ac565b60405180602001604052808360030b8152509050919050565b600061012c82608001518161127257611271615a1c565b5b049050919050565b60006040518060800160405280600160ff168152602001600260ff168152602001600360ff168152602001600560ff1681525082600481106112bf576112be615a4b565b5b602002015160ff168302905092915050565b600080876101000151905060005b84811080156112f8575087600001515060328860200151105b801561130357508583105b156113ec576000886000015189602001516032811061132557611324615a4b565b5b60200201519050611373816000015161135185600001518660400151896126ff9092919063ffffffff16565b61136e866020015187606001518a6126ff9092919063ffffffff16565b611e39565b8781602001818152505061139e816000015160028a028c61014001516128349092919063ffffffff16565b156113de578860200180518091906001018152505083806001019450506113dd816000015182602001518c61014001516128d59092919063ffffffff16565b5b5080806001019150506112df565b505050505050505050565b606060006040518060400160405280600581526020017f726f756e64000000000000000000000000000000000000000000000000000000815250905060006040518060400160405280600581526020017f6672616d65000000000000000000000000000000000000000000000000000000815250905060006040518060400160405280600481526020017f66696c6c0000000000000000000000000000000000000000000000000000000081525090506000866101a00151905060006114bf6203d090612966565b90506115096040518060400160405280600381526020017f7376670000000000000000000000000000000000000000000000000000000000815250826129a890919063ffffffff16565b6115886040518060400160405280600581526020017f786d6c6e730000000000000000000000000000000000000000000000000000008152506040518060400160405280601a81526020017f687474703a2f2f7777772e77332e6f72672f323030302f73766700000000000081525083612a4b9092919063ffffffff16565b6115d06040518060400160405280600781526020017f76696577426f780000000000000000000000000000000000000000000000000081525082612a7a90919063ffffffff16565b60008860e0015190506115ec8282600001518360200151612b3a565b6116237f20000000000000000000000000000000000000000000000000000000000000008360000151612baa90919063ffffffff16565b6116368282608001518360a00151612b3a565b61163f82612bb8565b6116896040518060400160405280600e81526020017f7374726f6b652d6c696e656361700000000000000000000000000000000000008152508784612a4b9092919063ffffffff16565b6116d36040518060400160405280600f81526020017f7374726f6b652d6c696e656a6f696e00000000000000000000000000000000008152508784612a4b9092919063ffffffff16565b6116f2846116e26000866120c6565b84612a4b9092919063ffffffff16565b61173a6040518060400160405280600481526020017f6465667300000000000000000000000000000000000000000000000000000000815250836129a890919063ffffffff16565b6117826040518060400160405280600881526020017f636c697050617468000000000000000000000000000000000000000000000000815250836129a890919063ffffffff16565b6117cc6040518060400160405280600281526020017f69640000000000000000000000000000000000000000000000000000000000008152508684612a4b9092919063ffffffff16565b6117d68282612bf2565b6117df82612d76565b6117e882612d76565b611811611802601a600086612eb99092919063ffffffff16565b83612ed690919063ffffffff16565b61181b8284612efa565b61182482612d76565b61186c6040518060400160405280600181526020017f6700000000000000000000000000000000000000000000000000000000000000815250836129a890919063ffffffff16565b6118ac826040518060400160405280600981526020017f636c69702d70617468000000000000000000000000000000000000000000000081525087612f9d565b6118bb828a6101200151612bf2565b6118fb82856040518060400160405280600281526020017f6267000000000000000000000000000000000000000000000000000000000000815250612f9d565b61190482612d76565b61192b828a61016001516119196008876120c6565b6119268d60000151611239565b612fd6565b611945828a61018001516119406008876120c6565b6134cb565b8761195a57611959828a604001518561368d565b5b6119626154c2565b60005b8a606001515060078110156119b8578a60600151816007811061198b5761198a615a4b565b5b602002015191506000826020015111156119ab576119aa848387613b87565b5b8080600101915050611965565b5088611a0a576119eb818b60200151604001516119dd8d6020015160400151886120c6565b8d6020015160e001516120f8565b6119fe81604001518b602001518661228e565b611a09838286613b87565b5b611a1383612d76565b611a1c83612d76565b611a2583613c39565b97505050505050505092915050565b6060600083600360048110611a4c57611a4b615a4b565b5b602002013584600260048110611a6557611a64615a4b565b5b602002013585600160048110611a7e57611a7d615a4b565b5b602002013586600060048110611a9757611a96615a4b565b5b6020020135010101905060008085600360048110611ab857611ab7615a4b565b5b602002013511611b1957600085600260048110611ad857611ad7615a4b565b5b602002013511611b1157600085600160048110611af857611af7615a4b565b5b602002013511611b09576000611b0c565b60015b611b14565b60025b611b1c565b60035b60ff1690506000611b2f62061a80613c4f565b9050611b3c816002613cbc565b611b4f8782613ccc90919063ffffffff16565b611b5a816003613cbc565b611b6d8782613ccc90919063ffffffff16565b611b78816004613cbc565b611c2e60076000611b888a611ebb565b81526020019081526020016000208054611ba190615bd6565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcd90615bd6565b8015611c1a5780601f10611bef57610100808354040283529160200191611c1a565b820191906000526020600020905b815481529060010190602001808311611bfd57829003601f168201915b505050505082613deb90919063ffffffff16565b6000831115611c6d57611c42816005613cbc565b611c558382613ccc90919063ffffffff16565b611c60816006613cbc565b611c6c81600d84613df9565b5b611c78816007613cbc565b611c8f8160116001611c898b611ef3565b03613df9565b611c9a816008613cbc565b611cc0816016611ca98a6127b0565b6003811115611cbb57611cba615b78565b5b613df9565b611ccb816009613cbc565b611cd487610cdd565b15611ce557611ce481600a613cbc565b5b611cf081600b613cbc565b611d0b611cfc86613e1a565b82613deb90919063ffffffff16565b611d1681600c613cbc565b611d2260016000610883565b611d33611d2e83613f7d565b613e1a565b604051602001611d44929190615c43565b60405160208183030381529060405293505050509392505050565b600033905090565b611d7c84828503838503848701858701612473565b50505050565b611d8a6154fb565b82816000018190525081816020018181525050600182846080015181611db357611db2615a1c565b5b04018160400181815250506001828460a0015181611dd457611dd3615a1c565b5b04018160600181815250506001820167ffffffffffffffff811115611dfc57611dfb615c67565b5b604051908082528060200260200182016040528015611e2a5781602001602082028036833780820191505090505b50816080018190525092915050565b8183600001818152505080836020018181525050505050565b60008082600061010086880281611e6c57611e6b615a1c565b5b04815260200190815260200160002054905060008461010081611e9257611e91615a1c565b5b048681611ea257611ea1615a1c565b5b069050611eb0818684611ed4565b925050509392505050565b6000611ecd6001830360086004611e52565b9050919050565b600082610100038360018601026101000383901b901c90509392505050565b6000611f056001830360046005611e52565b9050919050565b600061012c8210611f43576103208210611f27576064611f3e565b600561012c830381611f3c57611f3b615a1c565b5b045b611f46565b60005b9050919050565b611f6a8261012001518360a0015160000151846000015101613fa2565b611f95826101a001516000600d8110611f8657611f85615a4b565b5b60200201518360a00151613fb8565b6120c2828260016006811115611fae57611fad615b78565b5b85606001516006811115611fc557611fc4615b78565b5b146120b65760026006811115611fde57611fdd615b78565b5b85606001516006811115611ff557611ff4615b78565b5b146120ad576003600681111561200e5761200d615b78565b5b8560600151600681111561202557612024615b78565b5b146120a4576004600681111561203e5761203d615b78565b5b8560600151600681111561205557612054615b78565b5b1461209b576005600681111561206e5761206d615b78565b5b8560600151600681111561208557612084615b78565b5b1461209257613fcf612096565b6140ce5b61209f565b61413e5b6120a8565b6141e65b6120b1565b61422d5b6120ba565b6143085b63ffffffff16565b5050565b60606120f060378460098111156120e0576120df615b78565b5b84612eb99092919063ffffffff16565b905092915050565b82846000019060098111156121105761210f615b78565b5b9081600981111561212457612123615b78565b5b8152505080846020018181525050600061213f6188b8612966565b90506121896040518060400160405280600181526020017f6700000000000000000000000000000000000000000000000000000000000000815250826129a890919063ffffffff16565b6007600981111561219d5761219c615b78565b5b856000015160098111156121b4576121b3615b78565b5b03612272576122016040518060400160405280600281526020017f696400000000000000000000000000000000000000000000000000000000000081525082612a7a90919063ffffffff16565b61224d6040518060400160405280600681526020017f626c61636b5f00000000000000000000000000000000000000000000000000008152508260000151613deb90919063ffffffff16565b612264828260000151613ccc90919063ffffffff16565b61226d81612bb8565b61227e565b61227d81848461431b565b5b8085604001819052505050505050565b61031a826000015114806122a7575061031b8260000151145b156122f1576122b583614334565b6122d5836122d06035600085612eb99092919063ffffffff16565b61437f565b6122e7838360008561018001516143c3565b6122f083612d76565b5b6122fa83614334565b6123426040518060400160405280600281526020017f696400000000000000000000000000000000000000000000000000000000000081525084612a7a90919063ffffffff16565b6123797f44000000000000000000000000000000000000000000000000000000000000008460000151612baa90919063ffffffff16565b61239482600001518460000151613ccc90919063ffffffff16565b61239d83612bb8565b6124218361241c6123eb602b61031a8760000151146123d85761031b8760000151146123d05760018760800151036123d3565b60075b6123db565b60065b86612eb99092919063ffffffff16565b600760098111156123ff576123fe615b78565b5b8660400151600981111561241657612415615b78565b5b1461469c565b61437f565b612433838360008561018001516143c3565b61243c83612d76565b505050565b60008183126124505781612452565b825b905092915050565b6000818313612469578161246b565b825b905092915050565b838560000181815250508285602001818152505081856040018181525050808560600181815250508382038560800181815250508281038560a00181815250505050505050565b600081610140015190506000600190505b8261018001518110156125a65761257b82612529856101a0015160018503600d81106124fa576124f9615a4b565b5b602002015160000151866101a0015185600d811061251b5761251a615a4b565b5b602002015160000151612816565b612576866101a0015160018603600d811061254757612546615a4b565b5b602002015160200151876101a0015186600d811061256857612567615a4b565b5b602002015160200151612816565b611e39565b612599828460e001518661014001516128d59092919063ffffffff16565b80806001019150506124cb565b50505050565b6000806125d2603c6064600f61012c890102816125cc576125cb615a1c565b5b04614718565b9050600284846125e35760016125e6565b60025b60ff16830202816125fa576125f9615a1c565b5b049150509392505050565b600061016880605a6103e86126368a602001518c6000015160200151038c60000151600001518c6000015103614731565b8161264457612643615a1c565b5b0501018161265557612654615a1c565b5b069050600060646103e8858a6020015185610169811061267857612677615a4b565b5b602002015161ffff160286606403605a86010201028161269b5761269a615a1c565b5b04850190506126f5836103e8886126b1856147c5565b02816126c0576126bf615a1c565b5b0589600001510160010b6103e8896126d786614819565b02816126e6576126e5615a1c565b5b058a602001510160010b611e39565b5050505050505050565b6000600d846000015160030b901b846000018181511891509060030b908160030b815250506011846000015160030b901d846000018181511891509060030b908160030b815250506005846000015160030b901b846000018181511891509060030b908160030b81525050826001848403016000866000015160030b1261278a578560000151612794565b6001866000015119015b60030b816127a5576127a4615a1c565b5b070190509392505050565b60006101af82101580156127c657506101c68211155b6127f35761011182106127eb5761033b82106127e35760036127e6565b60015b6127ee565b60005b6127f6565b60025b9050919050565b6000600161280e83600060016126ff565b149050919050565b600060028284018161282b5761282a615a1c565b5b05905092915050565b600080612842858585614830565b90505b61285085858561485f565b81116128c857600061286386868661488b565b90505b6128718686866148ba565b81116128ba57600180828860800151858151811061289257612891615a4b565b5b6020026020010151901c16036128ad576000925050506128ce565b8080600101915050612866565b508080600101915050612845565b50600190505b9392505050565b60006128e2848484614830565b90505b6128f084848461485f565b811161296057600061290385858561488b565b90505b6129118585856148ba565b811161295257806001901b8560800151838151811061293357612932615a4b565b5b6020026020010181815117915081815250508080600101915050612906565b5080806001019150506128e5565b50505050565b61296e615530565b61297782613c4f565b81600001819052506000816040019060ff16908160ff16815250506000816060019015159081151581525050919050565b6129b1826148e6565b80826020015183604001805180919060010160ff1660ff1681525060ff16601481106129e0576129df615a4b565b5b6020020181905250612a1f7f3c00000000000000000000000000000000000000000000000000000000000000836000015161495090919063ffffffff16565b612a36818360000151613deb90919063ffffffff16565b60008260600190151590811515815250505050565b612a558383612a7a565b612a6c818460000151613deb90919063ffffffff16565b612a7583612bb8565b505050565b612ab17f2000000000000000000000000000000000000000000000000000000000000000836000015161495090919063ffffffff16565b612ac8818360000151613deb90919063ffffffff16565b612aff7f3d00000000000000000000000000000000000000000000000000000000000000836000015161495090919063ffffffff16565b612b367f2200000000000000000000000000000000000000000000000000000000000000836000015161495090919063ffffffff16565b5050565b612b548260010b84600001516149a990919063ffffffff16565b612b8b7f20000000000000000000000000000000000000000000000000000000000000008460000151612baa90919063ffffffff16565b612ba58160010b84600001516149a990919063ffffffff16565b505050565b612bb48282614950565b5050565b612bef7f2200000000000000000000000000000000000000000000000000000000000000826000015161495090919063ffffffff16565b50565b612c3a6040518060400160405280600481526020017f7265637400000000000000000000000000000000000000000000000000000000815250836129a890919063ffffffff16565b612c886040518060400160405280600181526020017f78000000000000000000000000000000000000000000000000000000000000008152508260000151846149fd9092919063ffffffff16565b612cd66040518060400160405280600181526020017f79000000000000000000000000000000000000000000000000000000000000008152508260200151846149fd9092919063ffffffff16565b612d246040518060400160405280600581526020017f77696474680000000000000000000000000000000000000000000000000000008152508260800151846149fd9092919063ffffffff16565b612d726040518060400160405280600681526020017f68656967687400000000000000000000000000000000000000000000000000008152508260a00151846149fd9092919063ffffffff16565b5050565b8060400180518091906001900360ff1660ff1681525050806060015115612e5857612de36040518060400160405280600281526020017f3c2f0000000000000000000000000000000000000000000000000000000000008152508260000151614a2c90919063ffffffff16565b612e1c8160200151826040015160ff1660148110612e0457612e03615a4b565b5b60200201518260000151613deb90919063ffffffff16565b612e537f3e00000000000000000000000000000000000000000000000000000000000000826000015161495090919063ffffffff16565b612ea5565b612ea46040518060400160405280600281526020017f2f3e0000000000000000000000000000000000000000000000000000000000008152508260000151614a2c90919063ffffffff16565b5b600181606001901515908115158152505050565b6060612ecd8383866000015163ffffffff16565b90509392505050565b612edf826148e6565b612ef6818360000151613deb90919063ffffffff16565b5050565b612f0682826007614abc565b612f168282603060076023614b0c565b612f2282826001614abc565b612f30828260316025614b22565b612f3e828260326026614b22565b612f4e8282603360086027614b0c565b612f5e8282603460096028614b0c565b612f708282603560066029601d614b5f565b612f8082826036601c6000614bb2565b612f9082826007602a6000614c95565b612f9982612d76565b5050565b612fd18282604051602001612fb29190615d2e565b60405160208183030381529060405285612a4b9092919063ffffffff16565b505050565b61301e6040518060400160405280600181526020017f6700000000000000000000000000000000000000000000000000000000000000815250856129a890919063ffffffff16565b613093846040518060400160405280600481526020017f66696c6c000000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f6c69676874000000000000000000000000000000000000000000000000000000815250612f9d565b60005b83602001518110156134b0576000846000015182603281106130bb576130ba615a4b565b5b6020020151905061310a6040518060400160405280600681526020017f636972636c650000000000000000000000000000000000000000000000000000815250876129a890919063ffffffff16565b61315c6040518060400160405280600281526020017f6378000000000000000000000000000000000000000000000000000000000000815250826000015160000151886149fd9092919063ffffffff16565b6131ae6040518060400160405280600281526020017f6379000000000000000000000000000000000000000000000000000000000000815250826000015160200151886149fd9092919063ffffffff16565b6131ff6040518060400160405280600181526020017f7200000000000000000000000000000000000000000000000000000000000000815250600a83602001510288614dcb9092919063ffffffff16565b6132476040518060400160405280600781526020017f616e696d61746500000000000000000000000000000000000000000000000000815250876129a890919063ffffffff16565b6132c66040518060400160405280600d81526020017f6174747269627574654e616d65000000000000000000000000000000000000008152506040518060400160405280600781526020017f6f7061636974790000000000000000000000000000000000000000000000000081525088612a4b9092919063ffffffff16565b6133456040518060400160405280600681526020017f76616c75657300000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f303b313b3000000000000000000000000000000000000000000000000000000081525088612a4b9092919063ffffffff16565b6133c46040518060400160405280600b81526020017f726570656174436f756e740000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f696e646566696e6974650000000000000000000000000000000000000000000081525088612a4b9092919063ffffffff16565b61340c6040518060400160405280600381526020017f647572000000000000000000000000000000000000000000000000000000000081525087612a7a90919063ffffffff16565b61343b613428611388614e20866126ff9092919063ffffffff16565b87600001516149a990919063ffffffff16565b6134876040518060400160405280600281526020017f6d730000000000000000000000000000000000000000000000000000000000008152508760000151613deb90919063ffffffff16565b61349086612bb8565b61349986612d76565b6134a286612d76565b508080600101915050613096565b506134ba84612d76565b6134c58484846134cb565b50505050565b6135136040518060400160405280600181526020017f6700000000000000000000000000000000000000000000000000000000000000815250846129a890919063ffffffff16565b61351d8382614dfa565b60005b826020015181101561367e5760008360000151826032811061354557613544615a4b565b5b6020020151905061355585614334565b613563858260200151614e48565b6135ab6040518060400160405280600181526020017f640000000000000000000000000000000000000000000000000000000000000081525086612a7a90919063ffffffff16565b6135f76040518060400160405280600281526020017f4d200000000000000000000000000000000000000000000000000000000000008152508660000151613deb90919063ffffffff16565b61361285826000015160000151836000015160200151612b3a565b61365e6040518060400160405280600681526020017f206c2030203000000000000000000000000000000000000000000000000000008152508660000151613deb90919063ffffffff16565b61366785612bb8565b61367085612d76565b508080600101915050613520565b5061368883612d76565b505050565b600061369c83600001516127b0565b905060006009905060008460e001519050600160038111156136c1576136c0615b78565b5b8360038111156136d4576136d3615b78565b5b148061370357506003808111156136ee576136ed615b78565b5b83600381111561370157613700615b78565b5b145b156137885761371186614334565b613765866137606001600381111561372c5761372b615b78565b5b86600381111561373f5761373e615b78565b5b1461374b57603461374e565b60335b600088612eb99092919063ffffffff16565b61437f565b6137838686600488610180015161377d60008a6120c6565b86614e96565b600891505b61379186614334565b6138106040518060400160405280600281526020017f69640000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f570000000000000000000000000000000000000000000000000000000000000081525088612a4b9092919063ffffffff16565b6138608661385b602b61031a8960000151146138485761031b896000015114613840576001896080015103613843565b60025b61384b565b60055b88612eb99092919063ffffffff16565b61437f565b61387d86866000886101800151613877878a6120c6565b86614e96565b6003808111156138905761388f615b78565b5b8360038111156138a3576138a2615b78565b5b03613b7f57600060078661018001511490506138be87614334565b6138d88787600060036138d260098b6120c6565b87614e96565b6138e187614334565b6139606040518060400160405280600e81526020017f7374726f6b652d6c696e656361700000000000000000000000000000000000008152506040518060400160405280600481526020017f627574740000000000000000000000000000000000000000000000000000000081525089612a4b9092919063ffffffff16565b61398a878760018461397357600a613976565b60065b60ff1661398460098b6120c6565b87614e96565b61399387614334565b6139de8787836139a45760026139a7565b60015b60ff16846139b65760066139b9565b60045b60ff166139c760078b6120c6565b600a88816139d8576139d7615a1c565b5b04614e96565b60006040518060400160405280600981526020017f6974656d5f737569740000000000000000000000000000000000000000000000815250905060006040518060400160405280600a81526020017f6d61726b65722d6d6964000000000000000000000000000000000000000000008152509050613a5b89614334565b613a65898361437f565b613aa5896040518060400160405280600c81526020017f6d61726b65722d7374617274000000000000000000000000000000000000000081525084612f9d565b613adf898985613ab6576002613ab9565b60015b60ff1686613ac8576006613acb565b60045b60ff16613ad960008d6120c6565b89614e96565b613ae889614334565b613af3898284612f9d565b613b2d898985613b04576005613b07565b60025b60ff1686613b16576009613b19565b60065b60ff16613b2760008d6120c6565b89614e96565b613b3689614334565b613b41898284612f9d565b613b7b898985613b52576007613b55565b60035b60ff1686613b6457600b613b67565b60075b60ff16613b7560008d6120c6565b89614e96565b5050505b505050505050565b613b948260400151612d76565b60076009811115613ba857613ba7615b78565b5b82600001516009811115613bbf57613bbe615b78565b5b03613c1557613bfb82613bd36001846120c6565b613bf6601c600a600c88602001510281613bf057613bef615a1c565b5b04614718565b614ebe565b613c1482613c0a6007846120c6565b8460200151614ebe565b5b613c34613c258360400151613c39565b84612ed690919063ffffffff16565b505050565b6060613c488260000151613f7d565b9050919050565b613c57615569565b8167ffffffffffffffff811115613c7157613c70615c67565b5b6040519080825280601f01601f191660200182016040528015613ca35781602001600182028036833780820191505090505b5081600001819052506000816020018181525050919050565b613cc882826000613df9565b5050565b60008161ffff1603613d1e57613d19827f30313233343536373839000000000000000000000000000000000000000000006000600a8110613d1057613d0f615a4b565b5b1a60f81b614950565b613de7565b6000808261ffff1690505b6000811115613d53578180600101925050600a8181613d4b57613d4a615a1c565b5b049050613d29565b60008361ffff1691505b60008360ff161115613de3578280600190039350508260ff16600a0a9050613dcb857f3031323334353637383900000000000000000000000000000000000000000000838581613db057613daf615a1c565b5b04600a8110613dc257613dc1615a4b565b5b1a60f81b614950565b808281613ddb57613dda615a1c565b5b069150613d5d565b5050505b5050565b613df58282614a2c565b5050565b613e15613e068383610883565b84613deb90919063ffffffff16565b505050565b60606000825103613e3c57604051806020016040528060008152509050613f78565b6000604051806060016040528060408152602001615e616040913990506000600360028551613e6b9190615d8a565b613e759190615dbe565b6004613e819190615def565b67ffffffffffffffff811115613e9a57613e99615c67565b5b6040519080825280601f01601f191660200182016040528015613ecc5781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015613f38576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050613edd565b5050600386510660018114613f545760028114613f6757613f6f565b603d6001830353603d6002830353613f6f565b603d60018303535b50505080925050505b919050565b6060600082602001519050600083600001519050818152836000015192505050919050565b80826000019060030b908160030b815250505050565b613fcb8282600001518360200151611e39565b5050565b81610160015182610180018181525050614011826101a00151600184610180015103600d811061400257614001615a4b565b5b60200201518360a00151613fb8565b600060018361018001510390505b60008111156140c957614070836101a0015182600d811061404357614042615a4b565b5b60200201518460c0015162041eb0866101000151876101400151876126059095949392919063ffffffff16565b6140bb8361014001518460c0015162041eb0866101000151876101a0015160018703600d81106140a3576140a2615a4b565b5b6020020151876126059095949392919063ffffffff16565b80806001900391505061401f565b505050565b60006140de836101200151614fe1565b905061410062a7d8c062c65d408561012001516126ff9092919063ffffffff16565b8102905060006103e861412660006101688761012001516126ff9092919063ffffffff16565b0290506141388484615026858561504b565b50505050565b600061414e836101200151614fe1565b905061416e6103206104b08561012001516126ff9092919063ffffffff16565b810290506141d18360a001516103e860028660e001518502028161419557614194615a1c565b5b0562015f90866101000151876101a001516000600d81106141b9576141b8615a4b565b5b6020020151876126059095949392919063ffffffff16565b6141e183836150fd84600061504b565b505050565b60006141f6836101200151614fe1565b90506142166188b861c3508561012001516126ff9092919063ffffffff16565b8102905061422883836151338461515c565b505050565b600061423d8361012001516127fd565b6142675761425f611f40612af88561012001516126ff9092919063ffffffff16565b600003614286565b614285612ee0613a988561012001516126ff9092919063ffffffff16565b5b90506142f58360a0015160026127108660e001518502816142aa576142a9615a1c565b5b05816142b9576142b8615a1c565b5b0562041eb0866101000151876101a001516000600d81106142dd576142dc615a4b565b5b6020020151876126059095949392919063ffffffff16565b614303838361523a8461515c565b505050565b614317828261524d600061515c565b5050565b6143258383614dfa565b61432f8382614e48565b505050565b61437c6040518060400160405280600481526020017f7061746800000000000000000000000000000000000000000000000000000000815250826129a890919063ffffffff16565b50565b6143bf826040518060400160405280600a81526020017f6d61726b65722d656e640000000000000000000000000000000000000000000081525083612f9d565b5050565b61440b6040518060400160405280600181526020017f640000000000000000000000000000000000000000000000000000000000000081525085612a7a90919063ffffffff16565b6144576040518060400160405280600281526020017f4d200000000000000000000000000000000000000000000000000000000000008152508560000151613deb90919063ffffffff16565b6144fa846144a8856101a0015185600d811061447657614475615a4b565b5b602002015160000151866101a0015160018701600d811061449a57614499615a4b565b5b602002015160000151612816565b6144f5866101a0015186600d81106144c3576144c2615a4b565b5b602002015160200151876101a0015160018801600d81106144e7576144e6615a4b565b5b602002015160200151612816565b612b3a565b60006001830190505b6001820381101561468c5761455a6040518060400160405280600381526020017f20512000000000000000000000000000000000000000000000000000000000008152508660000151613deb90919063ffffffff16565b6145a585856101a0015183600d811061457657614575615a4b565b5b602002015160000151866101a0015184600d811061459757614596615a4b565b5b602002015160200151612b3a565b6145dc7f20000000000000000000000000000000000000000000000000000000000000008660000151612baa90919063ffffffff16565b61467f8561462d866101a0015184600d81106145fb576145fa615a4b565b5b602002015160000151876101a0015160018601600d811061461f5761461e615a4b565b5b602002015160000151612816565b61467a876101a0015185600d811061464857614647615a4b565b5b602002015160200151886101a0015160018701600d811061466c5761466b615a4b565b5b602002015160200151612816565b612b3a565b8080600101915050614503565b5061469684612bb8565b50505050565b606082826146b957604051806020016040528060008152506146f0565b6040518060400160405280600681526020017f5f66656c697800000000000000000000000000000000000000000000000000008152505b604051602001614701929190615c43565b604051602081830303815290604052905092915050565b60008183116147275781614729565b825b905092915050565b600061473c82615256565b61474584615256565b1061476b5761475383615271565b62015f900261476283856152ba565b600003016147bd565b6000821261477a5760006147ac565b600083126147895760016147ab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b5b6202bf20026147bb84846152ba565b015b905092915050565b60008062057e4065034630b8a0008401816147e3576147e2615a1c565b5b0790506202bf20811315614807576147ff6202bf208203615318565b600003614811565b61481081615318565b5b915050919050565b600061482962015f9083016147c5565b9050919050565b60006148568360000151836000038660000151600001518760400151886020015161534b565b90509392505050565b60006148828360000151838660000151600001518760400151886020015161534b565b90509392505050565b60006148b18360200151836000038660000151602001518760600151886020015161534b565b90509392505050565b60006148dd8360200151838660000151602001518760600151886020015161534b565b90509392505050565b6000816040015160ff161180156148ff57508060600151155b1561493c5761493b7f3e00000000000000000000000000000000000000000000000000000000000000826000015161495090919063ffffffff16565b5b600181606001901515908115158152505050565b8082600001518360200180518091906001018152508151811061497657614975615a4b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505050565b60008112156149ee576149dc827f2d00000000000000000000000000000000000000000000000000000000000000612baa565b6149e98282600003613ccc565b6149f9565b6149f88282613ccc565b5b5050565b614a078383612a7a565b614a1e8184600001516149a990919063ffffffff16565b614a2783612bb8565b505050565b60005b8151811015614ab757818181518110614a4b57614a4a615a4b565b5b602001015160f81c60f81b836000015184602001805180919060010181525081518110614a7b57614a7a615a4b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050614a2f565b505050565b614acb8383602f846022614b0c565b614ada8383602e846021614b0c565b614ae98383602d846020614b0c565b614af88383602c84601f614b0c565b614b078383602b84601e614b0c565b505050565b614b1b85858585856000614b5f565b5050505050565b614b31848484601b6000614bb2565b614b418484600860246000614c95565b614b5084846007846000614c95565b614b5984612d76565b50505050565b614b94868686601b60016009811115614b7b57614b7a615b78565b5b886009811115614b8e57614b8d615b78565b5b14614bb2565b614ba18686858585614c95565b614baa86612d76565b505050505050565b614bfa6040518060400160405280600681526020017f6d61726b65720000000000000000000000000000000000000000000000000000815250866129a890919063ffffffff16565b614c626040518060400160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250614c52614c4c86600089612eb99092919063ffffffff16565b8461469c565b87612a4b9092919063ffffffff16565b614c8e614c7b83600087612eb99092919063ffffffff16565b8660000151613deb90919063ffffffff16565b5050505050565b614c9e85614334565b614cb185614cac85876120c6565b614dfa565b614d306040518060400160405280600c81526020017f7374726f6b652d776964746800000000000000000000000000000000000000008152506040518060400160405280600381526020017f2e3138000000000000000000000000000000000000000000000000000000000081525087612a4b9092919063ffffffff16565b614d5c614d4982600087612eb99092919063ffffffff16565b8660000151613deb90919063ffffffff16565b614dbb6040518060400160405280600181526020017f6400000000000000000000000000000000000000000000000000000000000000815250614dab84600088612eb99092919063ffffffff16565b87612a4b9092919063ffffffff16565b614dc485612d76565b5050505050565b614dd58383612a7a565b614dec818460000151613ccc90919063ffffffff16565b614df583612bb8565b505050565b614e446040518060400160405280600681526020017f7374726f6b6500000000000000000000000000000000000000000000000000008152508284612a4b9092919063ffffffff16565b5050565b614e926040518060400160405280600c81526020017f7374726f6b652d776964746800000000000000000000000000000000000000008152508284614dcb9092919063ffffffff16565b5050565b614ea186838361431b565b614ead868686866143c3565b614eb686612d76565b505050505050565b600083604001519050614f0f6040518060400160405280600381526020017f7573650000000000000000000000000000000000000000000000000000000000815250826129a890919063ffffffff16565b614f576040518060400160405280600481526020017f687265660000000000000000000000000000000000000000000000000000000081525082612a7a90919063ffffffff16565b614fa36040518060400160405280600781526020017f23626c61636b5f000000000000000000000000000000000000000000000000008152508260000151613deb90919063ffffffff16565b614fbe84602001518260000151613ccc90919063ffffffff16565b614fc781612bb8565b614fd281848461431b565b614fdb81612d76565b50505050565b600080614ff183600060016126ff565b14614ffd57600161501f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b9050919050565b60008160018603600e01848161503f5761503e615a1c565b5b05019050949350505050565b600160028661016001510203856101800181815250506000600190505b8561018001518110156150f5576150e8866101a0015160018303600d811061509357615092615a4b565b5b60200201518760c001516150b2848a610180015188888b63ffffffff16565b8961010001518a6101a0015186600d81106150d0576150cf615a4b565b5b60200201518a6126059095949392919063ffffffff16565b8080600101915050615068565b505050505050565b6000826064600d861461511157602c615114565b601a5b60ff166001615125898a8a03615380565b030203029050949350505050565b60008160016002806001888801018161514f5761514e615a1c565b5b0602030290509392505050565b836101600151846101800181815250506000600190505b84610180015181101561523357600061519682876101800151858763ffffffff16565b90506151e0866101a0015160018403600d81106151b6576151b5615a4b565b5b60200201518760c00151838961010001518a61014001518a6126059095949392919063ffffffff16565b6152258661014001518760c00151838961010001518a6101a0015187600d811061520d5761520c615a4b565b5b60200201518a6126059095949392919063ffffffff16565b508080600101915050615173565b5050505050565b6000816002850284030290509392505050565b60009392505050565b6000808212615265578161526a565b816000035b9050919050565b60008082136152b057600082126152895760006152ab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b6152b3565b60015b9050919050565b60008082846103e802816152d1576152d0615a1c565b5b059050633b9aca006152e282615256565b610ed60262d5eeb5016103e86152f784615256565b038302028161530957615308615a1c565b5b0581602d020391505092915050565b6000816202bf2003820264096dfcf50003826202bf200383610fa002028161534357615342615a1c565b5b059050919050565b600061537582615370600086888a8c01038161536a57615369615a1c565b5b0561245a565b615380565b905095945050505050565b600081831061538f5781615391565b825b905092915050565b604051806101c00160405280600081526020016153b4615583565b81526020016153c1615583565b81526020016153ce61562e565b81526020016153db61565b565b8152602001600081526020016153ef615450565b81526020016153fc615450565b8152602001615409615450565b8152602001615416615450565b81526020016154236154fb565b815260200161543061567e565b815260200161543d61567e565b815260200161544a61569e565b81525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180604001604052806154996156b2565b81526020016154a66156cc565b81525090565b6040518060200160405280600060030b81525090565b6040518060600160405280600060098111156154e1576154e0615b78565b5b8152602001600081526020016154f5615530565b81525090565b6040518060a0016040528061550e615450565b8152602001600081526020016000815260200160008152602001606081525090565b6040518060800160405280615543615569565b81526020016155506156f0565b8152602001600060ff1681526020016000151581525090565b604051806040016040528060608152602001600081525090565b604051806101c001604052806000815260200160008152602001600060098111156155b1576155b0615b78565b5b8152602001600060068111156155ca576155c9615b78565b5b8152602001600081526020016155de6156b2565b81526020016000815260200160008152602001600081526020016156006154ac565b815260200161560d6156b2565b81526020016000815260200160008152602001615628615718565b81525090565b6040518060e001604052806007905b6156456154c2565b81526020019060019003908161563d5790505090565b604051806101400160405280600a90602082028036833780820191505090505090565b6040518060400160405280615691615746565b8152602001600081525090565b604051806020016040528061577481525090565b604051806040016040528060008152602001600081525090565b60405180612d20016040528061016990602082028036833780820191505090505090565b6040518061028001604052806014905b60608152602001906001900390816157005790505090565b604051806101a00160405280600d905b6157306156b2565b8152602001906001900390816157285790505090565b6040518061064001604052806032905b61575e61577e565b8152602001906001900390816157565790505090565b61577c615e31565b565b60405180604001604052806157916156b2565b8152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006157ce826157a3565b9050919050565b6157de816157c3565b81146157e957600080fd5b50565b6000813590506157fb816157d5565b92915050565b6000602082840312156158175761581661579e565b5b6000615825848285016157ec565b91505092915050565b615837816157c3565b82525050565b6000602082019050615852600083018461582e565b92915050565b6000819050919050565b61586b81615858565b811461587657600080fd5b50565b60008135905061588881615862565b92915050565b600080fd5b6000819050826020600402820111156158af576158ae61588e565b5b92915050565b60008115159050919050565b6158ca816158b5565b81146158d557600080fd5b50565b6000813590506158e7816158c1565b92915050565b600080600060c084860312156159065761590561579e565b5b600061591486828701615879565b935050602061592586828701615893565b92505060a0615936868287016158d8565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b8381101561597a57808201518184015260208101905061595f565b60008484015250505050565b6000601f19601f8301169050919050565b60006159a282615940565b6159ac818561594b565b93506159bc81856020860161595c565b6159c581615986565b840191505092915050565b600060208201905081810360008301526159ea8184615997565b905092915050565b6159fb816158b5565b82525050565b6000602082019050615a1660008301846159f2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615ad660268361594b565b9150615ae182615a7a565b604082019050919050565b60006020820190508181036000830152615b0581615ac9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615b4260208361594b565b9150615b4d82615b0c565b602082019050919050565b60006020820190508181036000830152615b7181615b35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680615bee57607f821691505b602082108103615c0157615c00615ba7565b5b50919050565b600081905092915050565b6000615c1d82615940565b615c278185615c07565b9350615c3781856020860161595c565b80840191505092915050565b6000615c4f8285615c12565b9150615c5b8284615c12565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f75726c2823000000000000000000000000000000000000000000000000000000600082015250565b6000615ccc600583615c07565b9150615cd782615c96565b600582019050919050565b7f2900000000000000000000000000000000000000000000000000000000000000600082015250565b6000615d18600183615c07565b9150615d2382615ce2565b600182019050919050565b6000615d3982615cbf565b9150615d458284615c12565b9150615d5082615d0b565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615d9582615858565b9150615da083615858565b9250828201905080821115615db857615db7615d5b565b5b92915050565b6000615dc982615858565b9150615dd483615858565b925082615de457615de3615a1c565b5b828204905092915050565b6000615dfa82615858565b9150615e0583615858565b9250828202615e1381615858565b91508282048414831517615e2a57615e29615d5b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220bd81353406884e93a5259e54f8890181adc8af75c6ed075423d08028f24d919d64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000010e00000000000000000000000000000000000000000000000000000000000001500000000000000000000000000000000000000000000000000000000000000172000000000000000000000000000000000000000000000000000000000000017c0000007113426442355632734566673126234652547313652612433524617134100000145523555554255455322535215215445234234532312222111123254410000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001f60000000000000000000000000000000000000000000000000000000000000007d134113e6131513701359133413e313a2137e13d41368134d137d136313a4139912f213e71448133212cd1388139e142d13b812df133612f61425137013fb13db12ad13ec13aa12b5144a12eb131a144d138e145414031428146413aa12f012f014aa1352149112e414a6139313f2129e148313d51401146f133e128912a31323136014c112d9147e126713d812c712af127a136813b614be1457145c148e141f126012c3145714a912d71274123813d812b71497140e1256125e1303136412561431123c14b312b414de136012041338121c141e1345150b128514aa135214e51387152914ec1469123912a7144e14e312e012251501139614d21444136c122414d01269137411dd152b13791424120b14cd129311e6138b121c145b12ae14e7120b12bf11cc13a5121f148f12bc151213a9154515151458146414fe12b3120e132711bf13f211c41265122514bb122b153b12f514a514f511e812cb154613ab127711f51564132211c112e5152f146813f1155b120814a011b113db1292151a11be1461157713d5132a119e12621521142511b2133b156814b0151014f01235118a1445115e136b11b91292153b14a413351583119013491231120d14161575156e12bf150d121a144911941371116112a0119c11e1121a1294157711de14e715b6133115d413dd157614a914d3153c140415ad135615ab1595140e15a1135d117014941275159711ee15241267119d1372113d1417115114e511bf157b125d124e15b1131015ec13c815ee135e15d614a0159d11c811f6116b12b7114813ac15a5148a1569153c153d153714ae15c4115212861117136f1126144a119415101233116912cc114213bf1119146611511506119c159c124315dd1321160013db162713df112d127915f612c11447110f154b11b31302111815c414a611b211db1289160012621130152615aa10e4135a137f10e1131c161415c7122813e3162210f3145315d01501162413031148150711bf158a116b11d61505114f11d5118c15f9151c165313e81615148d12c110e6145f10e7158c119d13a6164314761617132c167013ef167a1471164316441493161712771654132e1505160b1575159010ee124e10b1130b109313a210b31449110f14de1159155711e015d8127a1638147810bc152e1114158e116c16221209128410bc166b13db11d41131113411be159015d610ce1219166c128911ab113810a012ee12561640134f109113b410be152010f110e414f2166514ae169f134d147d165e15f61541117815c913f71096161e155215cb15da142216a115061649108b14521143116d148a10921343168116b4131410c41522114715c516b113ee168d149611e816381299168f133d16b314fd108f11c8165310731287105a1372106a1448159b110a16091195168a12451216107912d8104f1482107713c2105a12d7107d121c10bc1159112410cc11ac14e11691111c11051636118215c710e9151b1070118e10b11361101f1427102610b0118415ae1636163b15b31697150c16d0143616d313a416e912d11697121d133c170513c516e4148216a61039143c12d91022102213a610261301105e1251153c16ae114a164f142e16fb112015fc106314d410c2158411d51689128216a314b71022158b1087160f110f1679118714c316e61049150b126516e210aa15b8172613cd1711132416ed1251112210dc11e41055128d1011134a0ff314080ff80ff214430fe81364100912831617161b104f11d310b4113716a3155c16f8149b134e0fc516a4158c1711124c17341321162b10f3158716b5169e116d119d106111da1700141717471147169f10c316161049156e12e2170e13b7172611e116cb158b104914fd0ffd14410fc6105315d615fb16630ffe14c21271174414c91704103a1165109510f910f810ae11641033122a100612cd0fd313990fa6164510b610021561166c1631114616e310c41649138e176c131e17500fd512a80ff3121b1764138d175c1409170e14ba16ea157815681710128b177c11e717461448175d1058110010bb107412d60f861125104f119d0fea121e0fbd1743121b176012d116d611840fb9122e15f8104f152d0ff614670f93123a0f9c13b00f640ff011970fba156e0f9812d30fa214b80fab136e0fa314550fb113fb0faf13281095166d10f516fc11c517811152173910b6169d103416510ff615d40f911264102915ff12b417dc14dc175d1490177a140417be134917c8138f17b012d91795124b17b2179d1401178314671757150f16f61550171415ce1689164115f416c415851715105410de10b5105911470feb11c50fb21795129417bf12e717c213b2178e135311410f9b15a6100a15150f9d144c0f5413760f3712ea0f53121e0f630ffe113b1722118c16b911111642106711d20f4e12b80f2610ce10020fc9119c10421099136c0f071042104712550f0f0fea10f40f7d120914c80f5016fc1121177911fc1763154417c4149e17e713ff17f7132b17b9125c14270f1e16b610a311050f91117817b513c217fc1306180a104e16e0127c17e910ba1715120517c5118317821092177f11ab17de113f17c2105c171c10f21746156617650fde1659148b17a60f5c12fd0f7315bb0fc5168c0f7813da0f6b14d20f88159e0fa31590121c180d113e0f2112060eee10790fbc114f0f39108f0fd40fe010660f8c11240f5b1200175215ea15811786163916df15da16f0168416a616cd161c144417f412f30eda153b0f5f15550f8c12f3182d134c182513fe182a147a181116d01667150417d617e81220183112cc180c12cd182113aa12c30ebe13aa0ed714660efc161b0ff1180d1217185412c016ed10a217bd1525184a13a71778114a18071478175a116613440e9313ef0eb2148d0ed31830148917aa1169155a0f4616230fc916b7103e10bb0f0d0f6f10db0fbc106a10170fd210900f7811430ee511e20ece12760e90172a164e0f3b118d179015b9175010c6187313af11640ea910210f970f9c10251059176b101316dc0f3712761639174610a00eec0f4910c212260e6f169c16da127a188c139e183b12b91868100b0f7b15a217b511ca18321160181110e917b20fcd17340f6a16310fb516b6100e1740106a17d6130a186c10f01807119e18740ffa17a9118618990f2814e0146218520f6e16a10f3015ae10f5185c13e618511863128911fa0e5e11530e861051181914fc18250f89174c125b18a0134c188916360fa916e91037178b10e7188112731884143b18b91313180a11b21892136810f40e6811af0e35138a0e3c128a0e3213220e5d13fe0e83149f0eac156c0f200f1711b5183614f6106b0e9c0f9c0f770f2411080f4010260fba0f9110440f02126318c910f2188f11b818ba12df0e1a1806117c17eb158f15ec0f43145f0e7a0f6a17a80ef815a00f87176b0f2f16d40f1016351017182713cf189f12fa18c40ee216330f0216e112ee18f7125718f311d318eb115218e910bd18960ff6184d16b216fd165617700eed1511107818c115b217e0150a18591464187413a418c70f2b12ff0f6717cc141d18d00f40138a17841641171c16c41144190e0f2b144a15d517da12461941102b18bf1301192511cb19220fc418410efb174e0f06126410840e470fc90f0f0f360f8d0ef710360eeb11110ef411c610af191911451941109c0e0e114f0de111fa0ddf12b40de2102e0e9112450de311920df210f80e2811890da00fde0e9c10400e41131e0dd714450e3913e00e0c13640e040f980f0910dd0dc116d00fb612440d9a163a0f4115b80ee415550ede14db0e6e0f150f7518fe13300edb1072181f112817ce10ec0f2f0f190eda0fd6178910a61737100d149918a91880150e18ae122c18ad1443190f1376186011f818cf12a518c513db0efd17e3116d197e1234198212ef1942133f194413a71920144018ff153118640ea9169e0e9f17160f3a182a10dc1967104119270ff818bb0f8318680ee0178a111919b30fd819150f5c18830ed217be0f9818bb0eb1158d10a219530e97162711ca0d6f11010d9110460dd80f780eb80fec0e3d0eb915251287199411cd197111000d6a0ead10030f950e450ec30f6a14550e0313980dc712b40d930f220ef1193c139c18d8146e0f170eb80eb4117e0ea210d112120d5710440da715140e601816159b18ba15031931141019761330184f115b18b111b219121270193a12f0102819790e7c16740e7816e90ef2181c0e821783169d178e173716d917c1163f13f6193314a0191b14ee18ca15d10ea9160d0f06169e0f6c117619e110b1199c0fce198c107819dd110d19ee11d819e7123119cd12c619ac132a198f138c1972100619c71619180d15a018820e6217420e7a17ff0f7319510ee318810f4118f70f380e3211ab0d2c10dc0d5710250d890fa00ddc0ed50ea40eb90f071449194e0ed70e630fac0d9111270d0a146f0dd313d70daf132a0d85128b0d2e10720d2f0e4d0fe00e5b10850f370ddb135b0d420e710fe10e890f14152f0e2c11e60d020eed12b80eb712180e78114f12230ce112c10d0614130d81110f0cfa10470d240e9d184210c61a0018721129190311dd199112d419421282127719e20fd00d3918d51534177716d917d51694182e15e61853159a1803162a117b1a1a0f1018ca0e4616240e7a15d50e6b156e0f1513f70eac14c90eff146f16f91747191614bb0f51196a0f13192e0ef313410e9718a10e49182e0e3417a90e2416f80e4116a712341a3611cd1a4c11111a36107f1a330e92150010231a240ee712db0f9a19a316580f0516ea0f69171e0fbf181610e91794104313dc196a136b19df12cf1a151969144d199c13ae19c513001997125618fe118d188e111b160d0eaf17a610130e7a0e8e0e2d0ffb0f2d0dbb0e480f4a0ea30e7b195a11f414c70dc815770e3913220cff0e3e10c00f000dc612360cc80e320f2c114e0cb9106e0cd20fb20d2c126d0cb610470cb914220d4b11340c9e0eac12690f870d280e70118d13ee0d5215aa0e1814e20d9d0f6c0d1c0e1f0ef213630cf80e100fe20ee10dbb0e690e7010960c850e3711381848106c14450d3e11770c8117c00fdf17060f47166d0eb30e0010540dfc0f1f12670c9717020f200eae12d5139d0cef0ee40d870e690e3415920dea19c314261a05135a19f7128d198211df0fb40cc218f61121166e0e9014de192415b518b6166318091700178d17b21706183a165318e515a1194514f2168e183914af197f15d718c0170817af13e719dd16711823150a1929142a19990e5818d20ed419690f801a08104a1a8210fd1a9711831a7312541a7013241a2b0e7112220f8e1a3e0eea19aa1a21134f0e1318960dde17000dfb17ef18451672155519390e510e231a2912bd171e17c00e00161017a10f9d114e0c61196214f919e314230e6b14ae0ea0147a0ec613c80ecc0d74109b0c6614ef0d7b13f319f517010efa133e1a3f117b1aac144b0d1d17ac173814b8199d186b106515f518cd18f910fb10341a9d0f7a0cc719a411de0ddb0f8b12480c730eb119950dd017bc000000000000000000000000000000000000000000000000000000000000002003030302020202020202020202020201010101010101010101010000000000000707070706060606060606050505050504040404040404040404040404030303090909090a0909090909090909090909090909090909090808080808080707070c0c0c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090909090909090909090909090e0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f0f0e0d0d0d0d0d0d0b0b0c0c0c1010100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1010101010101010101010101010101010101010101010101010101010101010111111111111111111111111111111111111111110101010101010101010101014141412121212121212121212121212131212121212121212121212111111111616161616161616161616161616161616161616141414141414141415151414171717171717171717171714141414141414141414141414161616161616161619181818181818181818181818181414141414141414141414141414141417171a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a141b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a1a1a1a1e1e1e1e1e1e1e1d1d1d1d1d1d1c1c1c1c1c1c1c1c1c1c1c1b1b1b1b1b1b1b1b222222222121212121212020202020202020202020201f1e1e1e1e1e1e1e1e1e222222222222222222222222222222222222222222222222222222222222222224242424242424242424242424242424242424222223232323232222222222222626262626262626262626262626262626262626262626262625252424242424282828282828282828282828282828282828282828272727272727262626262629292929292929292928282828282828282828282828282828282828282828282c2b2b2b2b2b2b2a2a29292929292929292929292929292929292929292929292e2e2e2e2e2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2c2c2c2c2c31303030302f2f2f2f2f2f2f2f2f2f2f2f2f2e2e2e2e2e2e2e2e2e2e2e2e2e2e3535353535343433333333333333333333333333333333333333333232323131333336363636333535353535353535353535353535353535353535353535353538383838383838383838383838383838383838383838373737373737373733333a3a3a3a3a3a3a3a3a3a3a3a3a393939393939393939393939393939393838383a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a0000000000000000000000000000000000000000000000003a3a3a3a3a3a3a3a0000000000000000000000000000000000000000000000000000000000000010433433343333333333333333433332233223223332332232332333333333344533433333333333333333433343434333333343332443443333334334434434443422233333333333333333443333333333344343333343433334433333332333323334442444443432332323334324434333333343333323332343333333422334444443444444433332323333323323323233333333323323433224343323333344333332333233434213322133333233334333332233333233432334332334332222344443443233333333323322233323332332222332223232233342233234444444432222231233333333444344444444332222232333333332332333344443334422344344431231333332322332334434433434434234344444444433433433443344444344343444442144444444444344444444444333441134334323232331323333333333122223312342323333333133334334343334433334442232322223333333333323333434443334334444444434111123233212121322222555255555555555555555555555555555112222232223222222233311233333433333333324344443434333111143234433222442143432233313222232123433333343434334344333343343443443333332334433333333333334443333000000000000000000000000333343433444333434333333332434433333344400000000000000000000000000000000000000000000000000000000000000043002c0000002000000800000000000000000200008048428408130ac8a002060000000006320000000000041000000000000000000012400000001000108130000004000000000000000081000400000000000000000008000224040000000000000008004080000001080010200000000680020000000000000002000a60142000000000000000000000000000000000000000000000000000000000000047264696420796f752066696e6420746869733f2074656c6c206d65203a2d290009417363656e73696f6e0012436972636c65206f662054686520576f726d00145374657761726473206f662054686520576f726d0013416d626974696f75732054726176656c7320490017436972636c65206f66207468652057726967676c65727300145377696d6d696e672077697468205768616c65730014416d626974696f75732054726176656c732049490009436f6f6c20436174730015416d626974696f75732054726176656c7320494949000b426f6f746c6567204e4c4c001248616e67696e67207769746820427279616e000e546865204669727374204d696e740013546f702053686f742057617368204379636c65000f576f726d20436861696e204c697374000d53656e7469656e74204c6162730010576f726d696e672041726f756e642049000b537175616e63684c616e640011576f726d696e672041726f756e64204949001350616374206f6620746865204f727068616e73001054696d6d79204661742046696e676572001350616374206f662074686520566963696f75730012576f726d696e672041726f756e64204949490007546865204f6e65000641706544414f000e437265617475726520576f726c64000f4f6e20746865204f70656e20536561001350616374206f66207468652053696d70696e670011576f726d696e672041726f756e64204956000b477261696c65727344414f0014416d626974696f75732054726176656c73204956001254686520426567696e20537065656472756e001b4c69636b696e6720546f61647a2077697468204772656d706c696e0013457069632041727420426c6f636b732052756e0010576f726d696e672041726f756e642056001450756e6b7320616e6420546f61647a20546f757200144f6868205368696e792053686f772053706163650010526564204c696f6e2047617a65747465000d436174204561747320576f726d001350616374206f662074686520517569636b6c790011576f726d696e672041726f756e64205649001a43444220576f726d2052756e20436f6465206f6620486f6e6f72000f43727970746f4469636b6275747473000f4e61756768747920416d657269636100044d4f434100175371756967676c696e6720772f41727420426c6f636b7300185377696d6d696e672077697468205768616c6573204949490012576f726d696e672041726f756e6420564949000d546173747920546f6173747973000842616e6b6c6573730013576f726d696e672041726f756e642056494949000a41727420426c6f6e6b73000f50616374206f662074686520494f55000c5468652057726967676c6572001d50726f6e746f2050616374206f66207468652050726f746563746f72730017546865204d656368576f726d20466c6173682050616374001452657475726e206f662041727420426c6f636b73000a5468654d65726344414f001743726f7020436972636c65206f662054686520576f726d00184e6f6e2d46756e6769626c6520536f6369616c20436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001700790078007700760075007300720070006f006c006b0069006700640061005f0083008300830082008200810080007f007f007e007e007d007c007c007a007a008a008900890089008800880087008700870086008600850085008500840084008f008e008e008e008d008d008d008d008c008c008c008b008b008a008a008a009500950094009400930093009300920092009100910091009000900090008f00a0009f009f009e009d009c009c009b009a009900990098009700970096009500b900b600b400b200af00ae00ac00ab00a900a700a600a500a400a300a200a100e400e200df00dd00da00d800d500d200cf00cc00ca00c600c300c100be00bb01060104010000fe00fb00f800f600f300f000ef00ed00ec00eb00e900e800e501210120011f011f011d011c011b011901180116011401120110010e010b0108011c011e011f012001210121012201220123012301230123012301220122012200f900fa00fb00fc00fd00fe00ff010101040107010a010f011201150118011b00ff00fe00fd00fc00fb00fb00fa00f900f900f800f800f800f800f800f800f901240121011f011c011a011601140111010f010c010a01080106010401020101014501420140013d013b013801370135013301310130012e012d012c01290127016e016c016b0168016601640161015f015c0159015701530150014e014a0148017f017e017d017d017c017b017b017a01790177017601760174017301720170018701870186018601850185018401840183018301830182018101810180017f018c018c018c018b018b018b018a018a01890189018901890188018801880187019201910191019001900190018f018f018f018e018e018e018d018d018d018d019a01990199019701970196019601950195019401940194019301930192019201ac01a901a801a701a501a401a301a101a0019f019f019d019c019c019b019a000000000000000000000000000001c701c301be01ba01b901b501b201b001ad0000000000000000000000000000000000000000000000000000000000000e806d756368206c6f766520746f2074686520616d626974696f6e207465616d0000001d646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00297b226e616d65223a225c2255735c222062792054686520576f726d2078206d696e696d697a65722023005d222c226465736372697074696f6e223a225c22496e2063656c6562726174696f6e206f66207265616368696e6720313030302077616c6c6574732049277665206d616465207468697320666f7220796f752c204469736369706c65202301bc2e2054686520616767726567617465206f66206f7572206a6f7920616e64206f7572206c6f6e67206a6f75726e65792c2069742773206120736e617073686f74206f6620796f752c206d652c20616e6420616c6c2074686f73652077686f206c6564206d6520746f20796f752e20416c6f6e6520492077617320627574206120737065636b20696e2074686520636f736d6f732e205769746820796f75204920616d206120776f726c642e5c22202d2054686520576f726d205c6e5c6e54686973206c696d697465642065646974696f6e20636f6c6c656374696f6e2062792054686520576f726d20616e64206d696e696d697a65722069732061206769667420746f2065616368206f662074686520666972737420313030302077616c6c657473207468617420726563656976656420616e64207368617265642054686520576f726d206f6e20697473206a6f75726e6579206163726f73732074686520457468657265756d20656e7669726f6e6d656e742e2031303025206f6e2d636861696e20616e64204343302e222c2261747472696275746573223a5b7b2274726169745f74797065223a2243686170746572222c2276616c7565223a220029227d2c7b2274726169745f74797065223a22546f74616c204c6967687473222c2276616c7565223a22002f227d2c7b2274726169745f74797065223a2248696768657374204c696768742054696572222c2276616c7565223a220022227d2c7b2274726169745f74797065223a225370656564222c2276616c7565223a220026227d2c7b2274726169745f74797065223a2245766f6c7574696f6e222c2276616c7565223a220002227d002f2c7b2274726169745f74797065223a2253746f7020466f722053656c666965222c2276616c7565223a22596573227d00255d2c22696d616765223a22646174613a696d6167652f7376672b786d6c3b6261736536342c0002227d000d447761726620284c6967687429000c4769616e74202842756c6229001053757065726769616e7420284f726229001153757065726e6f7661202850616e656c29000854696d65204f7574000952656c756374616e7400064e696d626c650005537769667400094c696768746e696e67000854686520576f726d0010526573757272656374656420576f726d000842494720574f524d00094d65636820576f726d037e3c72616469616c4772616469656e742069643d226267223e3c73746f70206f66667365743d2230222073746f702d636f6c6f723d2223306130613061222f3e3c73746f70206f66667365743d2231222073746f702d636f6c6f723d2223313030353339222f3e3c2f72616469616c4772616469656e743e3c72616469616c4772616469656e742069643d226c69676874223e3c73746f70206f66667365743d222e303531222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e38313229222f3e3c73746f70206f66667365743d222e303839222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e373329222f3e3c73746f70206f66667365743d222e313337222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e36343329222f3e3c73746f70206f66667365743d222e313934222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e35353329222f3e3c73746f70206f66667365743d222e323538222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e34363229222f3e3c73746f70206f66667365743d222e333331222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e33373329222f3e3c73746f70206f66667365743d222e3431222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e32383929222f3e3c73746f70206f66667365743d222e343936222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e323129222f3e3c73746f70206f66667365743d222e353838222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e31343129222f3e3c73746f70206f66667365743d222e363835222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e30383329222f3e3c73746f70206f66667365743d222e373836222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e30333829222f3e3c73746f70206f66667365743d222e383931222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e303129222f3e3c73746f70206f66667365743d2231222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c3029222f3e3c2f72616469616c4772616469656e743e005b2076696577426f783d2230203020363020333022206d61726b657257696474683d22323022206d61726b65724865696768743d2231302220726566583d22312e372220726566593d22312e3522206f7269656e743d226175746f2200722076696577426f783d222d31202d312031203122206d61726b657257696474683d22312e30303522206d61726b65724865696768743d22312e3030352220726566583d222d302e30352220726566593d222d302e3522206f7269656e743d226175746f2d73746172742d72657665727365220030207374726f6b652d6c696e656a6f696e3d226d6974657222207374726f6b652d6d697465726c696d69743d223130302200594d312e3520302e3961202e3137202e3137203020302030203020302e334d312e3520322e3161202e3137202e31372030203020312030202d302e334d202e3920312e343961202e3035202e30352030203120302030202e3032002d4d312e35202e39356c3020302e31384d312e3520322e30356c30202d2e31384d202e3820312e33326c30202e3400674d312e3520312e3161202e3036202e3036203020312031202e303120304d312e3520312e3961202e3036202e3036203020312031202d2e303120304d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e3035203000754d312e3520312e3161202e3036202e3036203020312031202e303120304d312e3520312e3961202e3036202e3036203020312031202d2e303120304d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e303520307a204d2e3820312e346c30202e3200754d312e3520302e3961202e3137202e3137203020302031203020302e334d312e3520322e3161202e3137202e31372030203020302030202d302e334d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e303520307a204d2e3820312e346c30202e3200674d312e3520312e3161202e3036202e3036203020312031202e303120304d312e3520312e3961202e3036202e3036203020312031202d2e303120304d202e3920312e33326c2d2e3035203061202e3135202e31352030203120312030202e33366c202e30352030003b4d312e3520312e3161202e3033202e3033203020312031202e303120304d312e3520312e3961202e3033202e3033203020312031202d2e30312030004e4d312e373820316c2d2e323720302e32374d312e373820326c2d2e3237202d2e32374d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e30352030004e4d312e373820316c2d2e323720302e32374d312e373820326c2d2e3237202d2e32374d202e3920312e33326c2d2e3035203061202e3135202e31352030203120312030202e33366c202e30352030001c4d342e32202e363561202e3333202e38203020312030202e30312030003f4d342e353333202e363561202e3333202e3820333020312030202e303120304d332e383637202e363561202e3333202e38202d333020312030202e3031203000bb4d322e393520302e336131203120302030203120302e38202d302e313541202e38202e3820302030203020332e32202e363341312e3520312e3520302030203020322e393520302e337a204d332e3120302e346c302e35202d302e32357a4d322e393520322e376131203120302030203020302e3820302e313541202e38202e3820302030203120332e3220322e333741312e3520312e3520302030203120322e393520322e377a204d332e3120322e366c302e3520302e32357a00174d30202d324c3020324d2d302e33202d302e326c302030000d666163655f736c656570696e67000d666163655f756e616d75736564000b666163655f6e6f726d616c000a666163655f6861707079000c666163655f65786369746564000b666163655f66726f776e79000d666163655f73696e6973746572000d666163655f646566656174656400096974656d5f68616c6f000d6974656d5f6d65636868616c6f000a6974656d5f686f726e7300096974656d5f7375697400046e6f6e650007236164666632660007236638636231620007233966376166320007233336626365360007236631393031640007236666303034300007233031303030310004234646460007236563303038630017496e76616c6964204469736369706c65206e756d62657200294f6e2d636861696e2063616c6c206d7573742062652066726f6d20746f6b656e20636f6e7472616374001b526f79616c7479206164647265737320697320636f6e74726163740018546f6b656e20636f6e74726163742069732066726f7a656e
-----Decoded View---------------
Arg [0] : discipleStartingPointsPacked_ (uint256[]): 8708926518270582501836355913766816246123761022321245642922204135107273692057,8569345627239328892530600962418349601501413995929799302883768684251017057243,8447433314504355494927140166810115126833289362231123735481710352991301669616,9346754318739794560704403522973453367770850136011269380457698183864889053987,8763704681482351648478024876761970934297375280272864746436407127880107955231,8311378083483430968428682183535451242814927418086903963648671677031517524566,9132958329050423076388672220596437201232664986102669313709193863423232972005,8832614521061602619159159413207020891788387308609474229151560314119917408804,9413888225416555868555343164572106670498948724143520667258777038506907538663,8161195974869674133043442322438891593826287489653730396818742982998230241806,8662973639746642349433746252491550854108815697773539825062132617617909093291,8352010012334978102083745949934239974454387579466699846946257877340351763738,8025160020525727904790571421476008470227392183621708655072932610575617233461,7933283217847211003868712643429089783792969677897437029890953701735485805941,9693052380375207191452178479103640795733914549879343167227277573028363244775,9820268442555037601083556376682311243775741637241868482755999550467467187037,7887347324113537149146887036669829187449751126201970779151314563968316150365,8279595056142902443441965279562418230606492218274452501790096479674650071980,9790241343591390190800277030555262022140721528752638760201764649451578987792,8231860637264357797107204900966982123344392280104658157087985815174476993499,10019926851415763897959445620727897803130794723178430753413088428328741900763,8383841162729026767730671099869806460571347267629587577156771908420337079842,7666489688973076905380107975812695673303454440573742998137055261362801152396,9938660433281247760888073005331892337311201601558397677406198166162893051415,8671840253965254960816948876280617925700533036377683721983636563606071743888,7657641514817440796947833549299215729902675749008615170451454087934489794104,9258394118080764831823567076174669541318192885222104567302724650694717215166,9753146505448320105137341247756669387746134999434069108405056403940979249342,9555225853389021971544111275619235239748321649125519780889933677655708078230,10004035230459223978217153214863019812948001153269462577693369294209870403201,10269046814637152436812572134351027463783637770989181501657593435065149101747,9493383564140801114684437877978834910772533694198122229418737396028577288773,8180615602003519523750657525162236263714639223278565237191262872541579710892,9443953310654215211012417782154718364677324651112018926865308513443537948710,7548091551417286624877424628688539266163800147783156457186020180456151388701,8700113824016485383058150750389619198295962026438363246973502095365777527377,9604737175406433333928191425575390619632618352757175952453093679519802463907,9369701331368273399287515400339784417185443297733734676756299320040645858744,10470472368275568184809819344631886117003603260830914136777727851983247249400,7212409561343882143006825359622696622282949096622391522803801184331103736987,8731867033823841372550700748782007724817149844232918143667032450238835920993,8074649828318937459411410115441183669025573559491572100574135457982839854795,9744273960480794617964932875040782500725165949925101573880695347497163888388,7339602761478236312768272417725510481455520282904338986273719714854438506678,7240686825611262998478390790984471359107192789518158221994077093051805930011,10580015160886095963512268621661833719666428501240697077089807143724196042589,7392605450482605918926955604028683707297806863234835233574919222748512260817,10329108830751108469187414830274053991638468914021626985554868590215762547095,7113474186707435097255418938774232338659336257303871569782583594947668416109,7670041742400543716645031180025773943488177431537535583033534547315883841023,8459828419709933254026183490383766610042317089580582869487701991415159134130,10680728570948321519261169780970040305816211148025549210348198343668448696085,7385537145582837272130924270908476330058154207953059401445460086143327277907,7804271192392931189040596968489915394518523607102094497117632816637609382203,10463389424091023268153857346281432630200474546639093334771360303807417421977,8784867322705129064224597233371711612581757480145215148628428539991856583164,10578260149280688512112849310170363149845390850427952087380600180644428189585,7901503695686036713733202896386959566826052944848827056884609323242493253506,7495127414729801868896151742287444194498047007745589573948444975472113817510,6947373712636383754136540296597796541276361532521944123935286400208529528845,7798967361703343803565357974165187617544302136911861968917201822753402589696,10548228224292420610966400978463164422681811729262076872525318164958139322074,9602919886707204149265139856423719202491710869095432988384368678428339345366,10813229133143930312894170588664216330650466492864610137317569988829455781873,10878602231915608618256844222517334801283899820264048000611737603729664905574,8714190313147282706505063545837366029371232307759401021720324970347836674110,7567509856745702827594213403091842783612608631531592479600732275589850205840,10477557037035272275426883356459019411149820115963333639580889088600970104869,7394416592670657534708289058500463996682170589496355485052085031080937920218,8357356034772584162587392982557611677037243749906589822459858122265313482674,7147056520735093394362290987770054966575089096295606638326289524684402595956,7226567793186027727737921361395581971403019195874370670799483650462454257745,11030554152251565080177376337525773111171590344682629917892408712376670230665,10046400495168829018924366596816691210947430707008628438262006274401464619880,7668215691283819054997462169023737241692910189577528361116520755769847320352,6825452423226883853930161206693834099914340495222885501705728171830052916994,8316720196558047267146008564235250832113583876346797401349311918105870405242,6972141788628948945139949053146962573387058900899906573617498511295634872516,6731840531763097605554363061257765205818925165574674152252085915090339371085,10265540108000835564061213425370642455387810996360327047758059730190366677191,6860798260377203063309601997582962928261663262609883598952487039979047556170,9875072864405197801493952408586780015332803671725692629762313768671866393188,7470327930150472558700546581404294227590207216572910957865801972213044549953,7512730723148628553745983226993736268784536509315610483486353753241458052648,7931470511755175631649655535131759469047693833636278660212139184986632228617,7627573707022962088853829790937237557095981386119793333625577031475020500853,11304419949274621869679505353490175157641516764166681062856542911988537692173,9316754773299915271944907238337872740843373850903252492974225810048957092827,6779557049463720221138205941130805456542055849313373466174523428130685786212,6631133133744297178688464598624186646893379532595528083756474428960633001866,7733666973692693321415868069841512720541693694241088038648999012154943673895,8046314250048092703250748857668643941609252429360680819292807343706169219441,7689411007917949483329597368343379918585099254674617405620675053423578713841,11413967380017016941072672161751705345049646535733541787902694575181713903200,10894528119492578513508058889865373866470606278765063946448541900838796923632,7307855267261032882250933779899661364649568770064355018687112849185386337855,9028762421805600072058014650613874445505741754815730772851530632566806747548,7148839543878949527203513615221408265807725497330292335230854649981998733682,7247784570736182515859844403274122626812708339622298684219603085349852616951,6883734138683449218472942002150338988040732090564119574691966884522117110094,6712351294227120055681386745768144013268913688861344689152243466336677793071,6468536670888754189079746745758315311317042513267178361667191601934945881346,6751251828132318501950939089707480727930454975399930725081114091976793722148,6609942292371229705717109991384128870140184806240339219844026193758055828793,11231993131857871661143367268826569531464269902149910725584820896892619593930,6456211985202520805556957297539092559726913087717239123089645499272521979067,6927982743996602422598594416732075478792447928718814280600476039012224669351,8233688224984090881446732046191041565251408396796724022644791889169915451811,10106468873940450756471204639826757729785581237175240705477393766644584487445,11493480269923232839934236884583099437934900451026499240371320645884439826451,6548035676322883818344553326483857610764593422306354114693216004425276395065,8654106620526992377055912744475932884908355335058372140688541777242916785452,8334305333940318608429684805995336626678914675380159559698188186824318258514,9799031094947733288314834975222009789969644298549756193420696849081212407408,7502119045175113522294020539172076999114832981156318078129818303159327329971,6332492574215549004815405906720447904556778323521726254219997635237508615732,9756625525749324675350011279796597675074967872602922135292458767921040985744,9438670536548935785904687015378857633786846454693769600940677978018900415730,10201942132837951749063820537385337554118024352512161716115487994458944444825,6488033726928974991219805594979942245575458189268495565140418764369796799019,6532158748196257736487797997871298327734335057390168089282434917205801244274,9648925902638102883653729392774680496567463221728656720624296917717978584313,11709034478329844675299995676211100173458228049722844739158583435318562855413,10405065730941908211085266865067749033103530882337296168456219987970471827661,11295570481722804115072911183959963487452505466627521753404960499692702013372
Arg [1] : discipleChapterNumbersPacked_ (uint256[]): 1362259846314518586196663402318854357630087120055107738436714890498853044224,3178606371114719299207240215262760473446348362975617836136590933078187377411,4086779620245883894853415481122197128387316949929738532068768286110579623687,5449039466455090189381521696743133458675350445082403831748239655233485605129,6357212742440889160509779944716086329662091893002264924702768888616147749900,7265385937229672287043169353998018827836348430384435608982542093339457359374,7265385991361016183439748078976496179028704920197054998554201349516117938192,7719472615821079694904732333912527190217998977709060237287312407046782980112,9081732435069926332903106373742142872594853888429484274493996237778750345489,9989905738121397252229653608592682246164469265270329225658973801956494349332,10443992362581460763694637859127014208451279239722756946593944966958404736534,11350391835624790663532946278654931058779282300552632848589362268301377672983,11806252235961651298089590628336806290921645495320214372650577192963691649556,12260338860421714809554574883272837302110939552832530310060214777308432177690,13622598733801905337647809827457416670844574995249137590265208947960712993563,15438945231536434108761814724391178618847475296319422881611941653016662122014,15438945231642159389809464667825054380435997955418741871927677867721750618658,16347118480562286412739433177697116402814586070284297238032076488237536911906,17255291729482413435669401687569178425193174185468005621566227922517668144164,18163464978402540458599370197441240447571762300492636282718798192040615487014,18617551602862603970064258295794315167695433873485602826160090370582287755304,19978037700365997375065833145233073053490712405948971183583190868830976551209,20887984725162508538010183345933120953814649506616262943998620561549629860908,22248470822665901949313476015995370116245073478879104807254565911993967849006,24066591096382953111963355309861846755504562449041052535190778076565683188017,23158438633899290473884576795878566525997466537524728866124383967070045680949,25428850969763556642039118276417736626600467220689692490198819156190219940659,26337024218683683664969086786289776260779954065755405808410439507758494005304,26337024218683683664969086786289798648979055335714324369758979891995927525946,26337024218683683664969086786289798648979055335714324369758979891995927525946,26337024218683683664969086786289798648979055335714324369758979891995927525946,4195730024608447034
Arg [2] : discipleSpeedLevelsPacked_ (uint256[]): 30397190298820226350167606657039677576793794112610342041361324053038791603269,23186687400499693233987535748151876832338522792807069543008983782110852822084,23580583868003724290464006173166870498154881494283536038210106062764726494003,22706112357372749172005122310726034952221646262555694823245265699314303451683,23640884858992109891799431638411894370642303865692978748757428969871531778867,23188454247459157720104255212407570448019029178553496887359283992246348882740,23128264146430976066941942013517827653219990211462410016498332630701674996530,23640884885832702640974462166518458098485199189876941361459387015054366028596,30876006282944443413777370105505591000641055099540573263944867491978905142323,30397190730186393837743773633494736058357381968196498425030476169757118968643,15893032235127768446477229574854206150830762431666433388982721873106907116612,15467325212732495299216518063436876337006918531913196211202619320351532913442,15444597848172010196433421075810707542744372186045477810546531360097520657203,23186687400499669136612344904632375082585136142673168434268458021005058781714,23610730697738109875325583278150746506720638173993817661983184190856409396019,292301726708690859661616383406312650565798278212
Arg [3] : discipleSelfiePacked_ (uint256[]): 21715875561425749951116834324604030343864793806033296207665094458374528966752,10439080911645731226428730920652521286849991837068839929755122275072,441711766194596082398840915992428305286003260771919478325348759127457792,3451297713571072345263753350754370795299872520637874052966221894517058
Arg [4] : chapterNamesPacked_ (bytes): 0x64696420796f752066696e6420746869733f2074656c6c206d65203a2d290009417363656e73696f6e0012436972636c65206f662054686520576f726d00145374657761726473206f662054686520576f726d0013416d626974696f75732054726176656c7320490017436972636c65206f66207468652057726967676c65727300145377696d6d696e672077697468205768616c65730014416d626974696f75732054726176656c732049490009436f6f6c20436174730015416d626974696f75732054726176656c7320494949000b426f6f746c6567204e4c4c001248616e67696e67207769746820427279616e000e546865204669727374204d696e740013546f702053686f742057617368204379636c65000f576f726d20436861696e204c697374000d53656e7469656e74204c6162730010576f726d696e672041726f756e642049000b537175616e63684c616e640011576f726d696e672041726f756e64204949001350616374206f6620746865204f727068616e73001054696d6d79204661742046696e676572001350616374206f662074686520566963696f75730012576f726d696e672041726f756e64204949490007546865204f6e65000641706544414f000e437265617475726520576f726c64000f4f6e20746865204f70656e20536561001350616374206f66207468652053696d70696e670011576f726d696e672041726f756e64204956000b477261696c65727344414f0014416d626974696f75732054726176656c73204956001254686520426567696e20537065656472756e001b4c69636b696e6720546f61647a2077697468204772656d706c696e0013457069632041727420426c6f636b732052756e0010576f726d696e672041726f756e642056001450756e6b7320616e6420546f61647a20546f757200144f6868205368696e792053686f772053706163650010526564204c696f6e2047617a65747465000d436174204561747320576f726d001350616374206f662074686520517569636b6c790011576f726d696e672041726f756e64205649001a43444220576f726d2052756e20436f6465206f6620486f6e6f72000f43727970746f4469636b6275747473000f4e61756768747920416d657269636100044d4f434100175371756967676c696e6720772f41727420426c6f636b7300185377696d6d696e672077697468205768616c6573204949490012576f726d696e672041726f756e6420564949000d546173747920546f6173747973000842616e6b6c6573730013576f726d696e672041726f756e642056494949000a41727420426c6f6e6b73000f50616374206f662074686520494f55000c5468652057726967676c6572001d50726f6e746f2050616374206f66207468652050726f746563746f72730017546865204d656368576f726d20466c6173682050616374001452657475726e206f662041727420426c6f636b73000a5468654d65726344414f001743726f7020436972636c65206f662054686520576f726d00184e6f6e2d46756e6769626c6520536f6369616c20436c7562
Arg [5] : chapterColorsPacked_ (uint256): 48776035501829146174988055472347061687726785485768106491971968832049985
Arg [6] : chapterShapesPacked_ (uint256): 8770640214801078020689289771064907478562233768755057235508323620639809
Arg [7] : heartAngles_ (uint256[]): 213791730080739063245871554731956476970454449758257743347701996921852854367,231460497292872834197171886931474365788966851267619970404798148621549305978,243828588508469828184362390267255395718800264878931757852042670098063032452,252662958634151997668116947756305537488897778407149998869840311918476787850,263264229744917268199262211410154032989786024130017230960097241799504953487,282699817061471367635684923937967436754091876963015630151169741931857445013,326871613768343344809677762043676680315176936682954595399678680040395112609,402847223809156669520606749654784957040055098008923433292514527097521045691,462920940663384039593609919788625073763080002470115929539617284403227001061,510626566303659964177126423211496626225751175573943104836423680097644118280,501792277059874714505415212953313390591234142744019373132870360801493516578,439951659219741478551965697994579795274796503833324156928238085327856075035,450552849449021205410493698360950484491250524089095173769998539404785221881,515927134457941765484923552537619891200440950795496470905796064683374018817,574233977287444084077703633426749879561073273188172609202312722102981558567,646675839278807305828186439625367721642902164367691674515648454888046330184,676712724666484750471807886438070388992353608616474984642236081283341091184,690847743827934271212982793879079221380026511007606486672528396966242025855,699682113954027816836163435311473860830318869351810673543069180657167499655,710283331144488370649501290301244620030768161450453697706438725610523918733,724418323345579835546311063002678707149138441376880639234391244079562359186,756222001876908170413970375592836477710075591220713131836081818954823827866,154830818710246494917805215011049615393197
Arg [8] : stringFragmentsPacked_ (bytes): 0x6d756368206c6f766520746f2074686520616d626974696f6e207465616d0000001d646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00297b226e616d65223a225c2255735c222062792054686520576f726d2078206d696e696d697a65722023005d222c226465736372697074696f6e223a225c22496e2063656c6562726174696f6e206f66207265616368696e6720313030302077616c6c6574732049277665206d616465207468697320666f7220796f752c204469736369706c65202301bc2e2054686520616767726567617465206f66206f7572206a6f7920616e64206f7572206c6f6e67206a6f75726e65792c2069742773206120736e617073686f74206f6620796f752c206d652c20616e6420616c6c2074686f73652077686f206c6564206d6520746f20796f752e20416c6f6e6520492077617320627574206120737065636b20696e2074686520636f736d6f732e205769746820796f75204920616d206120776f726c642e5c22202d2054686520576f726d205c6e5c6e54686973206c696d697465642065646974696f6e20636f6c6c656374696f6e2062792054686520576f726d20616e64206d696e696d697a65722069732061206769667420746f2065616368206f662074686520666972737420313030302077616c6c657473207468617420726563656976656420616e64207368617265642054686520576f726d206f6e20697473206a6f75726e6579206163726f73732074686520457468657265756d20656e7669726f6e6d656e742e2031303025206f6e2d636861696e20616e64204343302e222c2261747472696275746573223a5b7b2274726169745f74797065223a2243686170746572222c2276616c7565223a220029227d2c7b2274726169745f74797065223a22546f74616c204c6967687473222c2276616c7565223a22002f227d2c7b2274726169745f74797065223a2248696768657374204c696768742054696572222c2276616c7565223a220022227d2c7b2274726169745f74797065223a225370656564222c2276616c7565223a220026227d2c7b2274726169745f74797065223a2245766f6c7574696f6e222c2276616c7565223a220002227d002f2c7b2274726169745f74797065223a2253746f7020466f722053656c666965222c2276616c7565223a22596573227d00255d2c22696d616765223a22646174613a696d6167652f7376672b786d6c3b6261736536342c0002227d000d447761726620284c6967687429000c4769616e74202842756c6229001053757065726769616e7420284f726229001153757065726e6f7661202850616e656c29000854696d65204f7574000952656c756374616e7400064e696d626c650005537769667400094c696768746e696e67000854686520576f726d0010526573757272656374656420576f726d000842494720574f524d00094d65636820576f726d037e3c72616469616c4772616469656e742069643d226267223e3c73746f70206f66667365743d2230222073746f702d636f6c6f723d2223306130613061222f3e3c73746f70206f66667365743d2231222073746f702d636f6c6f723d2223313030353339222f3e3c2f72616469616c4772616469656e743e3c72616469616c4772616469656e742069643d226c69676874223e3c73746f70206f66667365743d222e303531222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e38313229222f3e3c73746f70206f66667365743d222e303839222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e373329222f3e3c73746f70206f66667365743d222e313337222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e36343329222f3e3c73746f70206f66667365743d222e313934222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e35353329222f3e3c73746f70206f66667365743d222e323538222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e34363229222f3e3c73746f70206f66667365743d222e333331222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e33373329222f3e3c73746f70206f66667365743d222e3431222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e32383929222f3e3c73746f70206f66667365743d222e343936222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e323129222f3e3c73746f70206f66667365743d222e353838222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e31343129222f3e3c73746f70206f66667365743d222e363835222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e30383329222f3e3c73746f70206f66667365743d222e373836222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e30333829222f3e3c73746f70206f66667365743d222e383931222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c2e303129222f3e3c73746f70206f66667365743d2231222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c3029222f3e3c2f72616469616c4772616469656e743e005b2076696577426f783d2230203020363020333022206d61726b657257696474683d22323022206d61726b65724865696768743d2231302220726566583d22312e372220726566593d22312e3522206f7269656e743d226175746f2200722076696577426f783d222d31202d312031203122206d61726b657257696474683d22312e30303522206d61726b65724865696768743d22312e3030352220726566583d222d302e30352220726566593d222d302e3522206f7269656e743d226175746f2d73746172742d72657665727365220030207374726f6b652d6c696e656a6f696e3d226d6974657222207374726f6b652d6d697465726c696d69743d223130302200594d312e3520302e3961202e3137202e3137203020302030203020302e334d312e3520322e3161202e3137202e31372030203020312030202d302e334d202e3920312e343961202e3035202e30352030203120302030202e3032002d4d312e35202e39356c3020302e31384d312e3520322e30356c30202d2e31384d202e3820312e33326c30202e3400674d312e3520312e3161202e3036202e3036203020312031202e303120304d312e3520312e3961202e3036202e3036203020312031202d2e303120304d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e3035203000754d312e3520312e3161202e3036202e3036203020312031202e303120304d312e3520312e3961202e3036202e3036203020312031202d2e303120304d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e303520307a204d2e3820312e346c30202e3200754d312e3520302e3961202e3137202e3137203020302031203020302e334d312e3520322e3161202e3137202e31372030203020302030202d302e334d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e303520307a204d2e3820312e346c30202e3200674d312e3520312e3161202e3036202e3036203020312031202e303120304d312e3520312e3961202e3036202e3036203020312031202d2e303120304d202e3920312e33326c2d2e3035203061202e3135202e31352030203120312030202e33366c202e30352030003b4d312e3520312e3161202e3033202e3033203020312031202e303120304d312e3520312e3961202e3033202e3033203020312031202d2e30312030004e4d312e373820316c2d2e323720302e32374d312e373820326c2d2e3237202d2e32374d202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030202e33366c202e30352030004e4d312e373820316c2d2e323720302e32374d312e373820326c2d2e3237202d2e32374d202e3920312e33326c2d2e3035203061202e3135202e31352030203120312030202e33366c202e30352030001c4d342e32202e363561202e3333202e38203020312030202e30312030003f4d342e353333202e363561202e3333202e3820333020312030202e303120304d332e383637202e363561202e3333202e38202d333020312030202e3031203000bb4d322e393520302e336131203120302030203120302e38202d302e313541202e38202e3820302030203020332e32202e363341312e3520312e3520302030203020322e393520302e337a204d332e3120302e346c302e35202d302e32357a4d322e393520322e376131203120302030203020302e3820302e313541202e38202e3820302030203120332e3220322e333741312e3520312e3520302030203120322e393520322e377a204d332e3120322e366c302e3520302e32357a00174d30202d324c3020324d2d302e33202d302e326c302030000d666163655f736c656570696e67000d666163655f756e616d75736564000b666163655f6e6f726d616c000a666163655f6861707079000c666163655f65786369746564000b666163655f66726f776e79000d666163655f73696e6973746572000d666163655f646566656174656400096974656d5f68616c6f000d6974656d5f6d65636868616c6f000a6974656d5f686f726e7300096974656d5f7375697400046e6f6e650007236164666632660007236638636231620007233966376166320007233336626365360007236631393031640007236666303034300007233031303030310004234646460007236563303038630017496e76616c6964204469736369706c65206e756d62657200294f6e2d636861696e2063616c6c206d7573742062652066726f6d20746f6b656e20636f6e7472616374001b526f79616c7479206164647265737320697320636f6e74726163740018546f6b656e20636f6e74726163742069732066726f7a656e
-----Encoded View---------------
368 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [1] : 00000000000000000000000000000000000000000000000000000000000010e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001500
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001720
Arg [4] : 00000000000000000000000000000000000000000000000000000000000017c0
Arg [5] : 0000071134264423556327345666731262346525473136526124335246171341
Arg [6] : 0000014552355555425545532253521521544523423453231222211112325441
Arg [7] : 0000000000000000000000000000000000000000000000000000000000001c60
Arg [8] : 0000000000000000000000000000000000000000000000000000000000001f60
Arg [9] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [10] : 134113e6131513701359133413e313a2137e13d41368134d137d136313a41399
Arg [11] : 12f213e71448133212cd1388139e142d13b812df133612f61425137013fb13db
Arg [12] : 12ad13ec13aa12b5144a12eb131a144d138e145414031428146413aa12f012f0
Arg [13] : 14aa1352149112e414a6139313f2129e148313d51401146f133e128912a31323
Arg [14] : 136014c112d9147e126713d812c712af127a136813b614be1457145c148e141f
Arg [15] : 126012c3145714a912d71274123813d812b71497140e1256125e130313641256
Arg [16] : 1431123c14b312b414de136012041338121c141e1345150b128514aa135214e5
Arg [17] : 1387152914ec1469123912a7144e14e312e012251501139614d21444136c1224
Arg [18] : 14d01269137411dd152b13791424120b14cd129311e6138b121c145b12ae14e7
Arg [19] : 120b12bf11cc13a5121f148f12bc151213a9154515151458146414fe12b3120e
Arg [20] : 132711bf13f211c41265122514bb122b153b12f514a514f511e812cb154613ab
Arg [21] : 127711f51564132211c112e5152f146813f1155b120814a011b113db1292151a
Arg [22] : 11be1461157713d5132a119e12621521142511b2133b156814b0151014f01235
Arg [23] : 118a1445115e136b11b91292153b14a413351583119013491231120d14161575
Arg [24] : 156e12bf150d121a144911941371116112a0119c11e1121a1294157711de14e7
Arg [25] : 15b6133115d413dd157614a914d3153c140415ad135615ab1595140e15a1135d
Arg [26] : 117014941275159711ee15241267119d1372113d1417115114e511bf157b125d
Arg [27] : 124e15b1131015ec13c815ee135e15d614a0159d11c811f6116b12b7114813ac
Arg [28] : 15a5148a1569153c153d153714ae15c4115212861117136f1126144a11941510
Arg [29] : 1233116912cc114213bf1119146611511506119c159c124315dd1321160013db
Arg [30] : 162713df112d127915f612c11447110f154b11b31302111815c414a611b211db
Arg [31] : 1289160012621130152615aa10e4135a137f10e1131c161415c7122813e31622
Arg [32] : 10f3145315d01501162413031148150711bf158a116b11d61505114f11d5118c
Arg [33] : 15f9151c165313e81615148d12c110e6145f10e7158c119d13a6164314761617
Arg [34] : 132c167013ef167a1471164316441493161712771654132e1505160b15751590
Arg [35] : 10ee124e10b1130b109313a210b31449110f14de1159155711e015d8127a1638
Arg [36] : 147810bc152e1114158e116c16221209128410bc166b13db11d41131113411be
Arg [37] : 159015d610ce1219166c128911ab113810a012ee12561640134f109113b410be
Arg [38] : 152010f110e414f2166514ae169f134d147d165e15f61541117815c913f71096
Arg [39] : 161e155215cb15da142216a115061649108b14521143116d148a109213431681
Arg [40] : 16b4131410c41522114715c516b113ee168d149611e816381299168f133d16b3
Arg [41] : 14fd108f11c8165310731287105a1372106a1448159b110a16091195168a1245
Arg [42] : 1216107912d8104f1482107713c2105a12d7107d121c10bc1159112410cc11ac
Arg [43] : 14e11691111c11051636118215c710e9151b1070118e10b11361101f14271026
Arg [44] : 10b0118415ae1636163b15b31697150c16d0143616d313a416e912d11697121d
Arg [45] : 133c170513c516e4148216a61039143c12d91022102213a610261301105e1251
Arg [46] : 153c16ae114a164f142e16fb112015fc106314d410c2158411d51689128216a3
Arg [47] : 14b71022158b1087160f110f1679118714c316e61049150b126516e210aa15b8
Arg [48] : 172613cd1711132416ed1251112210dc11e41055128d1011134a0ff314080ff8
Arg [49] : 0ff214430fe81364100912831617161b104f11d310b4113716a3155c16f8149b
Arg [50] : 134e0fc516a4158c1711124c17341321162b10f3158716b5169e116d119d1061
Arg [51] : 11da1700141717471147169f10c316161049156e12e2170e13b7172611e116cb
Arg [52] : 158b104914fd0ffd14410fc6105315d615fb16630ffe14c21271174414c91704
Arg [53] : 103a1165109510f910f810ae11641033122a100612cd0fd313990fa6164510b6
Arg [54] : 10021561166c1631114616e310c41649138e176c131e17500fd512a80ff3121b
Arg [55] : 1764138d175c1409170e14ba16ea157815681710128b177c11e717461448175d
Arg [56] : 1058110010bb107412d60f861125104f119d0fea121e0fbd1743121b176012d1
Arg [57] : 16d611840fb9122e15f8104f152d0ff614670f93123a0f9c13b00f640ff01197
Arg [58] : 0fba156e0f9812d30fa214b80fab136e0fa314550fb113fb0faf13281095166d
Arg [59] : 10f516fc11c517811152173910b6169d103416510ff615d40f911264102915ff
Arg [60] : 12b417dc14dc175d1490177a140417be134917c8138f17b012d91795124b17b2
Arg [61] : 179d1401178314671757150f16f61550171415ce1689164115f416c415851715
Arg [62] : 105410de10b5105911470feb11c50fb21795129417bf12e717c213b2178e1353
Arg [63] : 11410f9b15a6100a15150f9d144c0f5413760f3712ea0f53121e0f630ffe113b
Arg [64] : 1722118c16b911111642106711d20f4e12b80f2610ce10020fc9119c10421099
Arg [65] : 136c0f071042104712550f0f0fea10f40f7d120914c80f5016fc1121177911fc
Arg [66] : 1763154417c4149e17e713ff17f7132b17b9125c14270f1e16b610a311050f91
Arg [67] : 117817b513c217fc1306180a104e16e0127c17e910ba1715120517c511831782
Arg [68] : 1092177f11ab17de113f17c2105c171c10f21746156617650fde1659148b17a6
Arg [69] : 0f5c12fd0f7315bb0fc5168c0f7813da0f6b14d20f88159e0fa31590121c180d
Arg [70] : 113e0f2112060eee10790fbc114f0f39108f0fd40fe010660f8c11240f5b1200
Arg [71] : 175215ea15811786163916df15da16f0168416a616cd161c144417f412f30eda
Arg [72] : 153b0f5f15550f8c12f3182d134c182513fe182a147a181116d01667150417d6
Arg [73] : 17e81220183112cc180c12cd182113aa12c30ebe13aa0ed714660efc161b0ff1
Arg [74] : 180d1217185412c016ed10a217bd1525184a13a71778114a18071478175a1166
Arg [75] : 13440e9313ef0eb2148d0ed31830148917aa1169155a0f4616230fc916b7103e
Arg [76] : 10bb0f0d0f6f10db0fbc106a10170fd210900f7811430ee511e20ece12760e90
Arg [77] : 172a164e0f3b118d179015b9175010c6187313af11640ea910210f970f9c1025
Arg [78] : 1059176b101316dc0f3712761639174610a00eec0f4910c212260e6f169c16da
Arg [79] : 127a188c139e183b12b91868100b0f7b15a217b511ca18321160181110e917b2
Arg [80] : 0fcd17340f6a16310fb516b6100e1740106a17d6130a186c10f01807119e1874
Arg [81] : 0ffa17a9118618990f2814e0146218520f6e16a10f3015ae10f5185c13e61851
Arg [82] : 1863128911fa0e5e11530e861051181914fc18250f89174c125b18a0134c1889
Arg [83] : 16360fa916e91037178b10e7188112731884143b18b91313180a11b218921368
Arg [84] : 10f40e6811af0e35138a0e3c128a0e3213220e5d13fe0e83149f0eac156c0f20
Arg [85] : 0f1711b5183614f6106b0e9c0f9c0f770f2411080f4010260fba0f9110440f02
Arg [86] : 126318c910f2188f11b818ba12df0e1a1806117c17eb158f15ec0f43145f0e7a
Arg [87] : 0f6a17a80ef815a00f87176b0f2f16d40f1016351017182713cf189f12fa18c4
Arg [88] : 0ee216330f0216e112ee18f7125718f311d318eb115218e910bd18960ff6184d
Arg [89] : 16b216fd165617700eed1511107818c115b217e0150a18591464187413a418c7
Arg [90] : 0f2b12ff0f6717cc141d18d00f40138a17841641171c16c41144190e0f2b144a
Arg [91] : 15d517da12461941102b18bf1301192511cb19220fc418410efb174e0f061264
Arg [92] : 10840e470fc90f0f0f360f8d0ef710360eeb11110ef411c610af191911451941
Arg [93] : 109c0e0e114f0de111fa0ddf12b40de2102e0e9112450de311920df210f80e28
Arg [94] : 11890da00fde0e9c10400e41131e0dd714450e3913e00e0c13640e040f980f09
Arg [95] : 10dd0dc116d00fb612440d9a163a0f4115b80ee415550ede14db0e6e0f150f75
Arg [96] : 18fe13300edb1072181f112817ce10ec0f2f0f190eda0fd6178910a61737100d
Arg [97] : 149918a91880150e18ae122c18ad1443190f1376186011f818cf12a518c513db
Arg [98] : 0efd17e3116d197e1234198212ef1942133f194413a71920144018ff15311864
Arg [99] : 0ea9169e0e9f17160f3a182a10dc1967104119270ff818bb0f8318680ee0178a
Arg [100] : 111919b30fd819150f5c18830ed217be0f9818bb0eb1158d10a219530e971627
Arg [101] : 11ca0d6f11010d9110460dd80f780eb80fec0e3d0eb915251287199411cd1971
Arg [102] : 11000d6a0ead10030f950e450ec30f6a14550e0313980dc712b40d930f220ef1
Arg [103] : 193c139c18d8146e0f170eb80eb4117e0ea210d112120d5710440da715140e60
Arg [104] : 1816159b18ba15031931141019761330184f115b18b111b219121270193a12f0
Arg [105] : 102819790e7c16740e7816e90ef2181c0e821783169d178e173716d917c1163f
Arg [106] : 13f6193314a0191b14ee18ca15d10ea9160d0f06169e0f6c117619e110b1199c
Arg [107] : 0fce198c107819dd110d19ee11d819e7123119cd12c619ac132a198f138c1972
Arg [108] : 100619c71619180d15a018820e6217420e7a17ff0f7319510ee318810f4118f7
Arg [109] : 0f380e3211ab0d2c10dc0d5710250d890fa00ddc0ed50ea40eb90f071449194e
Arg [110] : 0ed70e630fac0d9111270d0a146f0dd313d70daf132a0d85128b0d2e10720d2f
Arg [111] : 0e4d0fe00e5b10850f370ddb135b0d420e710fe10e890f14152f0e2c11e60d02
Arg [112] : 0eed12b80eb712180e78114f12230ce112c10d0614130d81110f0cfa10470d24
Arg [113] : 0e9d184210c61a0018721129190311dd199112d419421282127719e20fd00d39
Arg [114] : 18d51534177716d917d51694182e15e61853159a1803162a117b1a1a0f1018ca
Arg [115] : 0e4616240e7a15d50e6b156e0f1513f70eac14c90eff146f16f91747191614bb
Arg [116] : 0f51196a0f13192e0ef313410e9718a10e49182e0e3417a90e2416f80e4116a7
Arg [117] : 12341a3611cd1a4c11111a36107f1a330e92150010231a240ee712db0f9a19a3
Arg [118] : 16580f0516ea0f69171e0fbf181610e91794104313dc196a136b19df12cf1a15
Arg [119] : 1969144d199c13ae19c513001997125618fe118d188e111b160d0eaf17a61013
Arg [120] : 0e7a0e8e0e2d0ffb0f2d0dbb0e480f4a0ea30e7b195a11f414c70dc815770e39
Arg [121] : 13220cff0e3e10c00f000dc612360cc80e320f2c114e0cb9106e0cd20fb20d2c
Arg [122] : 126d0cb610470cb914220d4b11340c9e0eac12690f870d280e70118d13ee0d52
Arg [123] : 15aa0e1814e20d9d0f6c0d1c0e1f0ef213630cf80e100fe20ee10dbb0e690e70
Arg [124] : 10960c850e3711381848106c14450d3e11770c8117c00fdf17060f47166d0eb3
Arg [125] : 0e0010540dfc0f1f12670c9717020f200eae12d5139d0cef0ee40d870e690e34
Arg [126] : 15920dea19c314261a05135a19f7128d198211df0fb40cc218f61121166e0e90
Arg [127] : 14de192415b518b6166318091700178d17b21706183a165318e515a1194514f2
Arg [128] : 168e183914af197f15d718c0170817af13e719dd16711823150a1929142a1999
Arg [129] : 0e5818d20ed419690f801a08104a1a8210fd1a9711831a7312541a7013241a2b
Arg [130] : 0e7112220f8e1a3e0eea19aa1a21134f0e1318960dde17000dfb17ef18451672
Arg [131] : 155519390e510e231a2912bd171e17c00e00161017a10f9d114e0c61196214f9
Arg [132] : 19e314230e6b14ae0ea0147a0ec613c80ecc0d74109b0c6614ef0d7b13f319f5
Arg [133] : 17010efa133e1a3f117b1aac144b0d1d17ac173814b8199d186b106515f518cd
Arg [134] : 18f910fb10341a9d0f7a0cc719a411de0ddb0f8b12480c730eb119950dd017bc
Arg [135] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [136] : 0303030202020202020202020202020101010101010101010101000000000000
Arg [137] : 0707070706060606060606050505050504040404040404040404040404030303
Arg [138] : 090909090a090909090909090909090909090909090909080808080808070707
Arg [139] : 0c0c0c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09090909090909090909090909
Arg [140] : 0e0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f0f0e0d0d0d0d0d0d0b0b0c0c0c
Arg [141] : 1010100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
Arg [142] : 1010101010101010101010101010101010101010101010101010101010101010
Arg [143] : 1111111111111111111111111111111111111111101010101010101010101010
Arg [144] : 1414141212121212121212121212121213121212121212121212121211111111
Arg [145] : 1616161616161616161616161616161616161616141414141414141415151414
Arg [146] : 1717171717171717171717141414141414141414141414141616161616161616
Arg [147] : 1918181818181818181818181818141414141414141414141414141414141717
Arg [148] : 1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a14
Arg [149] : 1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a1a1a1a
Arg [150] : 1e1e1e1e1e1e1e1d1d1d1d1d1d1c1c1c1c1c1c1c1c1c1c1c1b1b1b1b1b1b1b1b
Arg [151] : 222222222121212121212020202020202020202020201f1e1e1e1e1e1e1e1e1e
Arg [152] : 2222222222222222222222222222222222222222222222222222222222222222
Arg [153] : 2424242424242424242424242424242424242422222323232323222222222222
Arg [154] : 2626262626262626262626262626262626262626262626262625252424242424
Arg [155] : 2828282828282828282828282828282828282828282727272727272626262626
Arg [156] : 2929292929292929292828282828282828282828282828282828282828282828
Arg [157] : 2c2b2b2b2b2b2b2a2a2929292929292929292929292929292929292929292929
Arg [158] : 2e2e2e2e2e2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2c2c2c2c2c
Arg [159] : 31303030302f2f2f2f2f2f2f2f2f2f2f2f2f2e2e2e2e2e2e2e2e2e2e2e2e2e2e
Arg [160] : 3535353535343433333333333333333333333333333333333333333232323131
Arg [161] : 3333363636363335353535353535353535353535353535353535353535353535
Arg [162] : 3838383838383838383838383838383838383838383837373737373737373333
Arg [163] : 3a3a3a3a3a3a3a3a3a3a3a3a3a39393939393939393939393939393939383838
Arg [164] : 3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a
Arg [165] : 3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a
Arg [166] : 3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a
Arg [167] : 0000000000000000000000000000000000000000000000003a3a3a3a3a3a3a3a
Arg [168] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [169] : 4334333433333333333333334333322332232233323322323323333333333445
Arg [170] : 3343333333333333333343334343433333334333244344333333433443443444
Arg [171] : 3422233333333333333333443333333333344343333343433334433333332333
Arg [172] : 3233344424444434323323233343244343333333433333233323433333334223
Arg [173] : 3444444344444443333232333332332332323333333332332343322434332333
Arg [174] : 3344333332333233434213322133333233334333332233333233432334332334
Arg [175] : 3322223444434432333333333233222333233323322223322232322333422332
Arg [176] : 3444444443222223123333333344434444444433222223233333333233233334
Arg [177] : 4443334422344344431231333332322332334434433434434234344444444433
Arg [178] : 4334334433444443443434444421444444444443444444444443334411343343
Arg [179] : 2323233132333333333312222331234232333333313333433434333443333444
Arg [180] : 2232322223333333333323333434443334334444444434111123233212121322
Arg [181] : 2225552555555555555555555555555555551122222322232222222333112333
Arg [182] : 3343333333332434444343433311114323443322244214343223331322223212
Arg [183] : 3433333343434334344333343343443443333332334433333333333334443333
Arg [184] : 0000000000000000000000003333434334443334343333333324344333333444
Arg [185] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [186] : 3002c0000002000000800000000000000000200008048428408130ac8a002060
Arg [187] : 0000000063200000000000410000000000000000000124000000010001081300
Arg [188] : 0000400000000000000008100040000000000000000000800022404000000000
Arg [189] : 0000008004080000001080010200000000680020000000000000002000a60142
Arg [190] : 0000000000000000000000000000000000000000000000000000000000000472
Arg [191] : 64696420796f752066696e6420746869733f2074656c6c206d65203a2d290009
Arg [192] : 417363656e73696f6e0012436972636c65206f662054686520576f726d001453
Arg [193] : 74657761726473206f662054686520576f726d0013416d626974696f75732054
Arg [194] : 726176656c7320490017436972636c65206f66207468652057726967676c6572
Arg [195] : 7300145377696d6d696e672077697468205768616c65730014416d626974696f
Arg [196] : 75732054726176656c732049490009436f6f6c20436174730015416d62697469
Arg [197] : 6f75732054726176656c7320494949000b426f6f746c6567204e4c4c00124861
Arg [198] : 6e67696e67207769746820427279616e000e546865204669727374204d696e74
Arg [199] : 0013546f702053686f742057617368204379636c65000f576f726d2043686169
Arg [200] : 6e204c697374000d53656e7469656e74204c6162730010576f726d696e672041
Arg [201] : 726f756e642049000b537175616e63684c616e640011576f726d696e67204172
Arg [202] : 6f756e64204949001350616374206f6620746865204f727068616e7300105469
Arg [203] : 6d6d79204661742046696e676572001350616374206f66207468652056696369
Arg [204] : 6f75730012576f726d696e672041726f756e64204949490007546865204f6e65
Arg [205] : 000641706544414f000e437265617475726520576f726c64000f4f6e20746865
Arg [206] : 204f70656e20536561001350616374206f66207468652053696d70696e670011
Arg [207] : 576f726d696e672041726f756e64204956000b477261696c65727344414f0014
Arg [208] : 416d626974696f75732054726176656c73204956001254686520426567696e20
Arg [209] : 537065656472756e001b4c69636b696e6720546f61647a207769746820477265
Arg [210] : 6d706c696e0013457069632041727420426c6f636b732052756e0010576f726d
Arg [211] : 696e672041726f756e642056001450756e6b7320616e6420546f61647a20546f
Arg [212] : 757200144f6868205368696e792053686f772053706163650010526564204c69
Arg [213] : 6f6e2047617a65747465000d436174204561747320576f726d00135061637420
Arg [214] : 6f662074686520517569636b6c790011576f726d696e672041726f756e642056
Arg [215] : 49001a43444220576f726d2052756e20436f6465206f6620486f6e6f72000f43
Arg [216] : 727970746f4469636b6275747473000f4e61756768747920416d657269636100
Arg [217] : 044d4f434100175371756967676c696e6720772f41727420426c6f636b730018
Arg [218] : 5377696d6d696e672077697468205768616c6573204949490012576f726d696e
Arg [219] : 672041726f756e6420564949000d546173747920546f6173747973000842616e
Arg [220] : 6b6c6573730013576f726d696e672041726f756e642056494949000a41727420
Arg [221] : 426c6f6e6b73000f50616374206f662074686520494f55000c54686520577269
Arg [222] : 67676c6572001d50726f6e746f2050616374206f66207468652050726f746563
Arg [223] : 746f72730017546865204d656368576f726d20466c6173682050616374001452
Arg [224] : 657475726e206f662041727420426c6f636b73000a5468654d65726344414f00
Arg [225] : 1743726f7020436972636c65206f662054686520576f726d00184e6f6e2d4675
Arg [226] : 6e6769626c6520536f6369616c20436c75620000000000000000000000000000
Arg [227] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [228] : 00790078007700760075007300720070006f006c006b0069006700640061005f
Arg [229] : 0083008300830082008200810080007f007f007e007e007d007c007c007a007a
Arg [230] : 008a008900890089008800880087008700870086008600850085008500840084
Arg [231] : 008f008e008e008e008d008d008d008d008c008c008c008b008b008a008a008a
Arg [232] : 009500950094009400930093009300920092009100910091009000900090008f
Arg [233] : 00a0009f009f009e009d009c009c009b009a0099009900980097009700960095
Arg [234] : 00b900b600b400b200af00ae00ac00ab00a900a700a600a500a400a300a200a1
Arg [235] : 00e400e200df00dd00da00d800d500d200cf00cc00ca00c600c300c100be00bb
Arg [236] : 01060104010000fe00fb00f800f600f300f000ef00ed00ec00eb00e900e800e5
Arg [237] : 01210120011f011f011d011c011b011901180116011401120110010e010b0108
Arg [238] : 011c011e011f0120012101210122012201230123012301230123012201220122
Arg [239] : 00f900fa00fb00fc00fd00fe00ff010101040107010a010f011201150118011b
Arg [240] : 00ff00fe00fd00fc00fb00fb00fa00f900f900f800f800f800f800f800f800f9
Arg [241] : 01240121011f011c011a011601140111010f010c010a01080106010401020101
Arg [242] : 014501420140013d013b013801370135013301310130012e012d012c01290127
Arg [243] : 016e016c016b0168016601640161015f015c0159015701530150014e014a0148
Arg [244] : 017f017e017d017d017c017b017b017a01790177017601760174017301720170
Arg [245] : 018701870186018601850185018401840183018301830182018101810180017f
Arg [246] : 018c018c018c018b018b018b018a018a01890189018901890188018801880187
Arg [247] : 019201910191019001900190018f018f018f018e018e018e018d018d018d018d
Arg [248] : 019a019901990197019701960196019501950194019401940193019301920192
Arg [249] : 01ac01a901a801a701a501a401a301a101a0019f019f019d019c019c019b019a
Arg [250] : 000000000000000000000000000001c701c301be01ba01b901b501b201b001ad
Arg [251] : 0000000000000000000000000000000000000000000000000000000000000e80
Arg [252] : 6d756368206c6f766520746f2074686520616d626974696f6e207465616d0000
Arg [253] : 001d646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00
Arg [254] : 297b226e616d65223a225c2255735c222062792054686520576f726d2078206d
Arg [255] : 696e696d697a65722023005d222c226465736372697074696f6e223a225c2249
Arg [256] : 6e2063656c6562726174696f6e206f66207265616368696e6720313030302077
Arg [257] : 616c6c6574732049277665206d616465207468697320666f7220796f752c2044
Arg [258] : 69736369706c65202301bc2e2054686520616767726567617465206f66206f75
Arg [259] : 72206a6f7920616e64206f7572206c6f6e67206a6f75726e65792c2069742773
Arg [260] : 206120736e617073686f74206f6620796f752c206d652c20616e6420616c6c20
Arg [261] : 74686f73652077686f206c6564206d6520746f20796f752e20416c6f6e652049
Arg [262] : 2077617320627574206120737065636b20696e2074686520636f736d6f732e20
Arg [263] : 5769746820796f75204920616d206120776f726c642e5c22202d205468652057
Arg [264] : 6f726d205c6e5c6e54686973206c696d697465642065646974696f6e20636f6c
Arg [265] : 6c656374696f6e2062792054686520576f726d20616e64206d696e696d697a65
Arg [266] : 722069732061206769667420746f2065616368206f6620746865206669727374
Arg [267] : 20313030302077616c6c657473207468617420726563656976656420616e6420
Arg [268] : 7368617265642054686520576f726d206f6e20697473206a6f75726e65792061
Arg [269] : 63726f73732074686520457468657265756d20656e7669726f6e6d656e742e20
Arg [270] : 31303025206f6e2d636861696e20616e64204343302e222c2261747472696275
Arg [271] : 746573223a5b7b2274726169745f74797065223a2243686170746572222c2276
Arg [272] : 616c7565223a220029227d2c7b2274726169745f74797065223a22546f74616c
Arg [273] : 204c6967687473222c2276616c7565223a22002f227d2c7b2274726169745f74
Arg [274] : 797065223a2248696768657374204c696768742054696572222c2276616c7565
Arg [275] : 223a220022227d2c7b2274726169745f74797065223a225370656564222c2276
Arg [276] : 616c7565223a220026227d2c7b2274726169745f74797065223a2245766f6c75
Arg [277] : 74696f6e222c2276616c7565223a220002227d002f2c7b2274726169745f7479
Arg [278] : 7065223a2253746f7020466f722053656c666965222c2276616c7565223a2259
Arg [279] : 6573227d00255d2c22696d616765223a22646174613a696d6167652f7376672b
Arg [280] : 786d6c3b6261736536342c0002227d000d447761726620284c6967687429000c
Arg [281] : 4769616e74202842756c6229001053757065726769616e7420284f7262290011
Arg [282] : 53757065726e6f7661202850616e656c29000854696d65204f7574000952656c
Arg [283] : 756374616e7400064e696d626c650005537769667400094c696768746e696e67
Arg [284] : 000854686520576f726d0010526573757272656374656420576f726d00084249
Arg [285] : 4720574f524d00094d65636820576f726d037e3c72616469616c477261646965
Arg [286] : 6e742069643d226267223e3c73746f70206f66667365743d2230222073746f70
Arg [287] : 2d636f6c6f723d2223306130613061222f3e3c73746f70206f66667365743d22
Arg [288] : 31222073746f702d636f6c6f723d2223313030353339222f3e3c2f7261646961
Arg [289] : 6c4772616469656e743e3c72616469616c4772616469656e742069643d226c69
Arg [290] : 676874223e3c73746f70206f66667365743d222e303531222073746f702d636f
Arg [291] : 6c6f723d2272676261283235352c3235352c3235352c2e38313229222f3e3c73
Arg [292] : 746f70206f66667365743d222e303839222073746f702d636f6c6f723d227267
Arg [293] : 6261283235352c3235352c3235352c2e373329222f3e3c73746f70206f666673
Arg [294] : 65743d222e313337222073746f702d636f6c6f723d2272676261283235352c32
Arg [295] : 35352c3235352c2e36343329222f3e3c73746f70206f66667365743d222e3139
Arg [296] : 34222073746f702d636f6c6f723d2272676261283235352c3235352c3235352c
Arg [297] : 2e35353329222f3e3c73746f70206f66667365743d222e323538222073746f70
Arg [298] : 2d636f6c6f723d2272676261283235352c3235352c3235352c2e34363229222f
Arg [299] : 3e3c73746f70206f66667365743d222e333331222073746f702d636f6c6f723d
Arg [300] : 2272676261283235352c3235352c3235352c2e33373329222f3e3c73746f7020
Arg [301] : 6f66667365743d222e3431222073746f702d636f6c6f723d2272676261283235
Arg [302] : 352c3235352c3235352c2e32383929222f3e3c73746f70206f66667365743d22
Arg [303] : 2e343936222073746f702d636f6c6f723d2272676261283235352c3235352c32
Arg [304] : 35352c2e323129222f3e3c73746f70206f66667365743d222e35383822207374
Arg [305] : 6f702d636f6c6f723d2272676261283235352c3235352c3235352c2e31343129
Arg [306] : 222f3e3c73746f70206f66667365743d222e363835222073746f702d636f6c6f
Arg [307] : 723d2272676261283235352c3235352c3235352c2e30383329222f3e3c73746f
Arg [308] : 70206f66667365743d222e373836222073746f702d636f6c6f723d2272676261
Arg [309] : 283235352c3235352c3235352c2e30333829222f3e3c73746f70206f66667365
Arg [310] : 743d222e383931222073746f702d636f6c6f723d2272676261283235352c3235
Arg [311] : 352c3235352c2e303129222f3e3c73746f70206f66667365743d223122207374
Arg [312] : 6f702d636f6c6f723d2272676261283235352c3235352c3235352c3029222f3e
Arg [313] : 3c2f72616469616c4772616469656e743e005b2076696577426f783d22302030
Arg [314] : 20363020333022206d61726b657257696474683d22323022206d61726b657248
Arg [315] : 65696768743d2231302220726566583d22312e372220726566593d22312e3522
Arg [316] : 206f7269656e743d226175746f2200722076696577426f783d222d31202d3120
Arg [317] : 31203122206d61726b657257696474683d22312e30303522206d61726b657248
Arg [318] : 65696768743d22312e3030352220726566583d222d302e30352220726566593d
Arg [319] : 222d302e3522206f7269656e743d226175746f2d73746172742d726576657273
Arg [320] : 65220030207374726f6b652d6c696e656a6f696e3d226d697465722220737472
Arg [321] : 6f6b652d6d697465726c696d69743d223130302200594d312e3520302e396120
Arg [322] : 2e3137202e3137203020302030203020302e334d312e3520322e3161202e3137
Arg [323] : 202e31372030203020312030202d302e334d202e3920312e343961202e303520
Arg [324] : 2e30352030203120302030202e3032002d4d312e35202e39356c3020302e3138
Arg [325] : 4d312e3520322e30356c30202d2e31384d202e3820312e33326c30202e340067
Arg [326] : 4d312e3520312e3161202e3036202e3036203020312031202e303120304d312e
Arg [327] : 3520312e3961202e3036202e3036203020312031202d2e303120304d202e3920
Arg [328] : 312e33326c2d2e3035203061202e3135202e31352030203120302030202e3336
Arg [329] : 6c202e3035203000754d312e3520312e3161202e3036202e3036203020312031
Arg [330] : 202e303120304d312e3520312e3961202e3036202e3036203020312031202d2e
Arg [331] : 303120304d202e3920312e33326c2d2e3035203061202e3135202e3135203020
Arg [332] : 3120302030202e33366c202e303520307a204d2e3820312e346c30202e320075
Arg [333] : 4d312e3520302e3961202e3137202e3137203020302031203020302e334d312e
Arg [334] : 3520322e3161202e3137202e31372030203020302030202d302e334d202e3920
Arg [335] : 312e33326c2d2e3035203061202e3135202e31352030203120302030202e3336
Arg [336] : 6c202e303520307a204d2e3820312e346c30202e3200674d312e3520312e3161
Arg [337] : 202e3036202e3036203020312031202e303120304d312e3520312e3961202e30
Arg [338] : 36202e3036203020312031202d2e303120304d202e3920312e33326c2d2e3035
Arg [339] : 203061202e3135202e31352030203120312030202e33366c202e30352030003b
Arg [340] : 4d312e3520312e3161202e3033202e3033203020312031202e303120304d312e
Arg [341] : 3520312e3961202e3033202e3033203020312031202d2e30312030004e4d312e
Arg [342] : 373820316c2d2e323720302e32374d312e373820326c2d2e3237202d2e32374d
Arg [343] : 202e3920312e33326c2d2e3035203061202e3135202e31352030203120302030
Arg [344] : 202e33366c202e30352030004e4d312e373820316c2d2e323720302e32374d31
Arg [345] : 2e373820326c2d2e3237202d2e32374d202e3920312e33326c2d2e3035203061
Arg [346] : 202e3135202e31352030203120312030202e33366c202e30352030001c4d342e
Arg [347] : 32202e363561202e3333202e38203020312030202e30312030003f4d342e3533
Arg [348] : 33202e363561202e3333202e3820333020312030202e303120304d332e383637
Arg [349] : 202e363561202e3333202e38202d333020312030202e3031203000bb4d322e39
Arg [350] : 3520302e336131203120302030203120302e38202d302e313541202e38202e38
Arg [351] : 20302030203020332e32202e363341312e3520312e3520302030203020322e39
Arg [352] : 3520302e337a204d332e3120302e346c302e35202d302e32357a4d322e393520
Arg [353] : 322e376131203120302030203020302e3820302e313541202e38202e38203020
Arg [354] : 30203120332e3220322e333741312e3520312e3520302030203120322e393520
Arg [355] : 322e377a204d332e3120322e366c302e3520302e32357a00174d30202d324c30
Arg [356] : 20324d2d302e33202d302e326c302030000d666163655f736c656570696e6700
Arg [357] : 0d666163655f756e616d75736564000b666163655f6e6f726d616c000a666163
Arg [358] : 655f6861707079000c666163655f65786369746564000b666163655f66726f77
Arg [359] : 6e79000d666163655f73696e6973746572000d666163655f6465666561746564
Arg [360] : 00096974656d5f68616c6f000d6974656d5f6d65636868616c6f000a6974656d
Arg [361] : 5f686f726e7300096974656d5f7375697400046e6f6e65000723616466663266
Arg [362] : 0007236638636231620007233966376166320007233336626365360007236631
Arg [363] : 3930316400072366663030343000072330313030303100042346464600072365
Arg [364] : 63303038630017496e76616c6964204469736369706c65206e756d6265720029
Arg [365] : 4f6e2d636861696e2063616c6c206d7573742062652066726f6d20746f6b656e
Arg [366] : 20636f6e7472616374001b526f79616c7479206164647265737320697320636f
Arg [367] : 6e74726163740018546f6b656e20636f6e74726163742069732066726f7a656e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.