From 7a20fbea878588d8fc1aae105263d0560aef751d Mon Sep 17 00:00:00 2001 From: Eiba Date: Wed, 1 Nov 2023 14:40:53 +0900 Subject: [PATCH 001/146] Erc721 ap2 p (#3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * duplicate from sushi-Nouns * correct Contract name * correct Contrant name * deploy NotoSans font * add font view * add font components * fix type and required * update font address * format * update @openzeppelin/contracts * update package * update package * update packages * add font checker * fixing preview * font preview * LocalNouns initial working version * NounsDescriptorV1デプロイ用 * write to address file * 不要なコメント削除 * set contract address to external file * add underscore * format * set prefecture name to Trait * Correct typos * commitie,developper,desighnerを削除 * minter追加 * verifyコマンドのaddress指定修正 * Minterコントラクト追加 * ProviderTokenA1のmintを無効にするためのmint関数を追加 * localhostのアドレス自動読込を追加 * Minter経由だとmsg.senderがMinterになるため、_toを指定 * 自動テスト追加 * 画像データ修正(末尾にオブジェクトタイプを追加) * バッチミント追加 * head,accessoryの名前をtraitsに設定 * mintをpopulateから分離 * head始まり(都道府県)は1期対象から除外 * head partsIdの3桁目以上をバージョンとして扱う対応 * 都道府県地図のheadをバージョン1で登録 * 都道府県地図のheadをバージョン1で登録 * 都道府県をランダムに決定する機能を追加 * 都道府県ランダム指定時のバージョン考慮不足のバグfix * ミント関数の配列パラメタの要素数チェックを追加 * 変数名変更 amount -> counter * remove Opensea's DefaultOperatorFilterer, add "SetPrice" * ERC721AP2PTradable追加 * remove old description * LocalNounsの継承先をERC721AP2PTradableに変更 * correct author * P2Pトレード追加 * add comment * mintSelectedPrefectureに数量指定追加 * mintSelectedPrefectureBatchの削除 * mintSelectedPrefectureBatch削除 * tokenGate追加 * whitelistをpublicに変更 * tokenGateによるチェック追加 * tokenGate追加 * *_localhost.ts追加 * Send ETH チェック追加 * _nextTokenIdは_safeMintで更新されるので indexを追加 * 都道府県ごとのミント数mintNumberPerPrefectureを追加 * コメント修正 * 都道府県番号のチェック追加 * 継承元のmintPrice, mintLimitは使用しない * コメント追加 * ミント数上限のチェック * ownerMint追加 * 都道府県ランダムミントの割合を設定 * determinePrefectureIdのテストコード追加 * 不要コード削除 --------- Co-authored-by: isamu arimoto Co-authored-by: Takuya Mizutani Co-authored-by: Satoshi Nakajima --- .gitignore | 3 +- contract/contracts/LocalNounsToken.sol | 182 +- contract/contracts/MessageTokenV2.sol | 89 + .../external/nouns/NounsDescripter.sol | 5 +- .../contracts/external/nouns/NounsSeeder.sol | 57 + .../imageParts/interfaces/IMessageStoreV2.sol | 43 + .../imageParts/svgstore/MessageStoreV2.sol | 130 + contract/contracts/libs/AssetTokenGate.sol | 2 +- contract/contracts/libs/ProviderTokenA2.sol | 152 + .../localNouns/LocalNounsDescriptor.sol | 776 ++--- .../contracts/localNouns/LocalNounsMinter.sol | 100 + .../localNouns/LocalNounsProvider.sol | 190 +- .../contracts/localNouns/LocalNounsSeeder.sol | 6 +- .../interfaces/IAssetProviderExMint.sol | 2 + .../interfaces/ILocalNounsToken.sol | 33 + .../interfaces/INounsDescriptor.sol | 13 +- .../pNouns/interfaces/INounsDescriptor.sol | 99 + .../interfaces/INounsDescriptorMinimal.sol | 44 + .../pNouns/interfaces/INounsSeeder.sol | 32 + .../packages/ERC721P2P/ERC721AP2P.sol | 46 +- .../packages/ERC721P2P/ERC721AP2PTradable.sol | 48 + .../packages/ERC721P2P/IERC721P2PTradable.sol | 32 + .../ERC721P2P/SampleAP2PTradableToken.sol | 32 + .../contracts/providers/MessageProvider3.sol | 114 + contract/hardhat.config.ts | 7 + contract/scripts/deploy_localNouns.ts | 51 +- contract/scripts/deploy_message.ts | 3 +- contract/scripts/deploy_message_2.ts | 127 + contract/scripts/deploy_nounsDescriptorV1.ts | 16 + contract/scripts/deploy_snow.ts | 2 + contract/scripts/populate_localNouns.ts | 73 +- contract/scripts/populate_localNouns2.ts | 88 + contract/scripts/populate_nounsV1.ts | 37 +- contract/scripts/test_localNouns.ts | 101 + contract/scripts/test_nounsV1.ts | 43 + contract/test/image-local-data.json | 2906 +++++++++-------- contract/test/image-local-data2.json | 440 +++ contract/test/localNouns.ts | 450 +++ contract/test/p2pTradable.ts | 138 + src/abis/MessageProvider3.json | 388 +++ src/abis/MessageStoreV2.json | 377 +++ src/abis/MessageStoreV2___.json | 206 ++ src/abis/MessageTokenV2.json | 937 ++++++ src/utils/addresses.ts | 78 + .../localNounsDescriptor_localhost.ts | 3 + .../addresses/localNounsDescriptor_mumbai.ts | 3 + .../addresses/localNounsMinter_localhost.ts | 3 + .../addresses/localNounsMinter_mumbai.ts | 3 + .../addresses/localNounsProvider_localhost.ts | 3 + .../addresses/localNounsProvider_mumbai.ts | 3 + .../addresses/localNounsToken_localhost.ts | 3 + src/utils/addresses/localNounsToken_mumbai.ts | 3 + src/utils/addresses/localseeder_localhost.ts | 3 + src/utils/addresses/localseeder_mumbai.ts | 3 + .../addresses/londrina_solid_localhost.ts | 4 +- src/utils/addresses/londrina_solid_mumbai.ts | 4 +- src/utils/addresses/londrina_solid_polygon.ts | 3 + src/utils/addresses/messageprovider_goerli.ts | 3 + .../addresses/messageprovider_localhost.ts | 3 + src/utils/addresses/messageprovider_mumbai.ts | 3 + src/utils/addresses/messagestore2_goerli.ts | 3 + .../addresses/messagestore2_localhost.ts | 3 + src/utils/addresses/messagestore2_mumbai.ts | 3 + .../messagestore_londrinasolid_goerli.ts | 3 + .../addresses/messagestore_notosans_goerli.ts | 3 + src/utils/addresses/messagetoken_goerli.ts | 3 + src/utils/addresses/messagetoken_localhost.ts | 3 + src/utils/addresses/messagetoken_mumbai.ts | 3 + .../addresses/nftDescriptor_localhost.ts | 3 + src/utils/addresses/nftDescriptor_mumbai.ts | 3 + .../addresses/nounsDescriptor_localhost.ts | 3 + src/utils/addresses/nounsDescriptor_mumbai.ts | 3 + src/utils/addresses/nounsSeeder_localhost.ts | 3 + src/utils/addresses/nounsSeeder_mumbai.ts | 3 + src/utils/addresses/sample_localhost.ts | 7 +- src/utils/const.ts | 19 +- src/views/Message.vue | 103 +- 77 files changed, 6928 insertions(+), 1991 deletions(-) create mode 100644 contract/contracts/MessageTokenV2.sol create mode 100644 contract/contracts/external/nouns/NounsSeeder.sol create mode 100644 contract/contracts/imageParts/interfaces/IMessageStoreV2.sol create mode 100644 contract/contracts/imageParts/svgstore/MessageStoreV2.sol create mode 100644 contract/contracts/libs/ProviderTokenA2.sol create mode 100644 contract/contracts/localNouns/LocalNounsMinter.sol create mode 100644 contract/contracts/localNouns/interfaces/ILocalNounsToken.sol create mode 100644 contract/contracts/pNouns/interfaces/INounsDescriptor.sol create mode 100644 contract/contracts/pNouns/interfaces/INounsDescriptorMinimal.sol create mode 100644 contract/contracts/pNouns/interfaces/INounsSeeder.sol create mode 100644 contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol create mode 100644 contract/contracts/packages/ERC721P2P/IERC721P2PTradable.sol create mode 100644 contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol create mode 100644 contract/contracts/providers/MessageProvider3.sol create mode 100644 contract/scripts/deploy_message_2.ts create mode 100644 contract/scripts/populate_localNouns2.ts create mode 100644 contract/scripts/test_localNouns.ts create mode 100644 contract/scripts/test_nounsV1.ts create mode 100644 contract/test/image-local-data2.json create mode 100644 contract/test/localNouns.ts create mode 100644 contract/test/p2pTradable.ts create mode 100644 src/abis/MessageProvider3.json create mode 100644 src/abis/MessageStoreV2.json create mode 100644 src/abis/MessageStoreV2___.json create mode 100644 src/abis/MessageTokenV2.json create mode 100644 src/utils/addresses/localNounsDescriptor_localhost.ts create mode 100644 src/utils/addresses/localNounsDescriptor_mumbai.ts create mode 100644 src/utils/addresses/localNounsMinter_localhost.ts create mode 100644 src/utils/addresses/localNounsMinter_mumbai.ts create mode 100644 src/utils/addresses/localNounsProvider_localhost.ts create mode 100644 src/utils/addresses/localNounsProvider_mumbai.ts create mode 100644 src/utils/addresses/localNounsToken_localhost.ts create mode 100644 src/utils/addresses/localNounsToken_mumbai.ts create mode 100644 src/utils/addresses/localseeder_localhost.ts create mode 100644 src/utils/addresses/localseeder_mumbai.ts create mode 100644 src/utils/addresses/londrina_solid_polygon.ts create mode 100644 src/utils/addresses/messageprovider_goerli.ts create mode 100644 src/utils/addresses/messageprovider_localhost.ts create mode 100644 src/utils/addresses/messageprovider_mumbai.ts create mode 100644 src/utils/addresses/messagestore2_goerli.ts create mode 100644 src/utils/addresses/messagestore2_localhost.ts create mode 100644 src/utils/addresses/messagestore2_mumbai.ts create mode 100644 src/utils/addresses/messagestore_londrinasolid_goerli.ts create mode 100644 src/utils/addresses/messagestore_notosans_goerli.ts create mode 100644 src/utils/addresses/messagetoken_goerli.ts create mode 100644 src/utils/addresses/messagetoken_localhost.ts create mode 100644 src/utils/addresses/messagetoken_mumbai.ts create mode 100644 src/utils/addresses/nftDescriptor_localhost.ts create mode 100644 src/utils/addresses/nftDescriptor_mumbai.ts create mode 100644 src/utils/addresses/nounsDescriptor_localhost.ts create mode 100644 src/utils/addresses/nounsDescriptor_mumbai.ts create mode 100644 src/utils/addresses/nounsSeeder_localhost.ts create mode 100644 src/utils/addresses/nounsSeeder_mumbai.ts diff --git a/.gitignore b/.gitignore index 390fe766..54c23a40 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,5 @@ pnpm-debug.log* *~ -contract/contracts/fonts/font.sol \ No newline at end of file +contract/contracts/fonts/font.sol +src/utils/addresses/*_localhost.ts \ No newline at end of file diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index ea32159a..e9785eb9 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -1,51 +1,50 @@ // SPDX-License-Identifier: MIT /* - * Created by Isamu Arimoto (@isamua) + * Created by @eiba8884 */ pragma solidity ^0.8.6; import '@openzeppelin/contracts/utils/Strings.sol'; -import './libs/ProviderTokenA1.sol'; + +import './libs/ProviderTokenA2.sol'; import { INounsSeeder } from './localNouns/interfaces/INounsSeeder.sol'; import './localNouns/interfaces/IAssetProviderExMint.sol'; +import './localNouns/interfaces/ILocalNounsToken.sol'; -contract LocalNounsToken is ProviderTokenA1 { +contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { using Strings for uint256; - // fes committee - address public committee; - address public designer; - address public developper; - IAssetProviderExMint public assetProvider2; + address public minter; + mapping(uint256 => uint256[]) public tradePrefecture; // トレード先指定の都道府県 + + address public administratorsAddress; // 運営ウォレット constructor( IAssetProviderExMint _assetProvider, - address _committee, - address _designer, - address _developper - ) ProviderTokenA1(_assetProvider, 'Local Nouns', 'Local Nouns') { + address _minter + ) ProviderTokenA2(_assetProvider, 'Local Nouns', 'Local Nouns') { description = 'Local Nouns Token.'; assetProvider2 = _assetProvider; - mintPrice = 1e13; // 0.001 - mintLimit = 5000; - committee = _committee; - designer = _designer; - developper = _developper; + // mintPrice = 1e13; // 0.001 ※ mintPriceは Minterコントラクトで制御するため使用しない + // mintLimit = 5000; ※ mintLimitは Minterコントラクトで制御するため使用しない + minter = _minter; + administratorsAddress = msg.sender; } function tokenName(uint256 _tokenId) internal pure override returns (string memory) { return string(abi.encodePacked('Local Nouns ', _tokenId.toString())); } + function tokenURI(uint256 _tokenId) public view override returns (string memory) { - require(_tokenId < _nextTokenId(), 'LocalNounsToken.tokenURI: nonexistent token'); + require(_tokenId < _nextTokenId(), 'LocalNounsToken.tokenURI: nonexistent token'); + + (string memory svgPart, string memory tag) = assetProvider2.generateSVGPart(_tokenId); + bytes memory image = bytes(svgPart); - (string memory svgPart, string memory tag) = assetProvider2.generateSVGPart(_tokenId); - bytes memory image = bytes(svgPart); - - return + return string( abi.encodePacked( 'data:application/json;base64,', @@ -67,19 +66,130 @@ contract LocalNounsToken is ProviderTokenA1 { ) ); } - function mint(uint256 prefectureId) public payable virtual returns (uint256 tokenId) { - require(msg.value >= mintPrice, 'Must send the mint price'); - assetProvider2.mint(prefectureId, _nextTokenId()); - super.mint(); - address payable payableTo = payable(committee); - payableTo.transfer(address(this).balance); - - // if ((_nextTokenId() % 10) == 8) { - // assetProvider2.mint(_nextTokenId()); - // _safeMint(designer, 1); - // assetProvider2.mint(_nextTokenId()); - // _safeMint(developper, 1); - // } - return _nextTokenId() - 1; + + /** + 都道府県番号を指定してミントします。 + 都道府県番号の下2桁=0を指定すると都道府県がランダムで選択されます。 + 都道府県番号の下3桁目以降はバージョン番号です。 + ミント価格、ミント上限数は、Minterコントラクト側で制御するため、継承元のmintPrice, mintLimitは使用しません。 + */ + function mintSelectedPrefecture( + address _to, + uint256 _prefectureId, + uint256 _amount + ) public virtual returns (uint256 tokenId) { + require(msg.sender == minter || msg.sender == owner(), 'Sender is not minter nor owner'); + require(_prefectureId % 100 <= 47, 'Invalid prefectureId'); + + for (uint256 i = 0; i < _amount; i++) { + assetProvider2.mint(_prefectureId, _nextTokenId() + i); + } + _safeMint(_to, _amount); + return _nextTokenId() - 1; + } + + function ownerMint( + address[] memory _to, + uint256[] memory _prefectureId, + uint256[] memory _amount + ) public onlyOwner returns (uint256 tokenId) { + // 引数の整合性チェック + require(_to.length == _prefectureId.length && _to.length == _amount.length, 'Invalid Arrays length'); + + for (uint256 i; i < _to.length; i++) { + mintSelectedPrefecture(_to[i], _prefectureId[i], _amount[i]); + } + return _nextTokenId() - 1; + } + + function mint() public payable override returns (uint256 tokenId) { + revert('Cannot use this function'); + } + + function setMinter(address _minter) public onlyOwner { + minter = _minter; + } + + function setAdministratorsAddress(address _admin) external onlyOwner { + administratorsAddress = _admin; + } + + /** + * @param _tokenId the token id for put on the trade list. + * @param _prefectures prefectures that you want to trade. if you don't want specific prefecture, you don't need to set. + */ + function putTradeLocalNoun(uint256 _tokenId, uint256[] memory _prefectures) public { + for (uint256 i = 0; i < _prefectures.length; i++) { + require(_prefectures[i] > 0 && _prefectures[i] <= 47, 'incorrect prefecutre id'); + } + + super.putTrade(_tokenId, true); + tradePrefecture[_tokenId] = _prefectures; + + emit PutTradePrefecture(_tokenId, _prefectures); + } + + function getTradePrefectureFor(uint256 _tokenId) public view returns (uint256[] memory) { + return tradePrefecture[_tokenId]; + } + + function cancelTradeLocalNoun(uint256 _tokenId) public { + super.putTrade(_tokenId, false); + + uint256[] memory emptyArray; + tradePrefecture[_tokenId] = emptyArray; + + emit CancelTradePrefecture(_tokenId); + } + + function executeTradeLocalNoun(uint256 _myTokenId, uint256 _targetTokenId) public { + // tradePrefectureがない場合は、希望都道府県がないためチェック不要 + if (tradePrefecture[_targetTokenId].length > 0) { + uint256 myTokenIdPrefecture = assetProvider2.getPrefectureId(_myTokenId); + bool isIncludesList = false; + for (uint256 i = 0; i < tradePrefecture[_targetTokenId].length; i++) { + if (myTokenIdPrefecture == tradePrefecture[_targetTokenId][i]) { + isIncludesList = true; + break; + } + } + require(isIncludesList, 'unmatch to the wants list'); + } + + super.executeTrade(_myTokenId, _targetTokenId); + } + + function putTrade(uint256 _tokenId, bool _isOnTrade) public override { + revert('Cannot use this function'); + } + + function executeTrade(uint256 _myTokenId, uint256 _targetTokenId) public override { + revert('Cannot use this function'); + } + + // transfer時はトレード解除 + function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal override { + uint256[] memory emptyArray; + tradePrefecture[startTokenId] = emptyArray; + super._beforeTokenTransfers(from, to, startTokenId, quantity); + } + + // pay royalties to admin here + function _processRoyalty(uint _salesPrice, uint _tokenId) internal override returns (uint256 royalty) { + royalty = (_salesPrice * 50) / 1000; // 5.0% + address payable payableTo = payable(administratorsAddress); + payableTo.transfer(royalty); + } + + function withdraw() external payable onlyOwner { + require(administratorsAddress != address(0), "administratorsAddress shouldn't be 0"); + (bool sent, ) = payable(administratorsAddress).call{ value: address(this).balance }(''); + require(sent, 'failed to move fund to administratorsAddress contract'); + } + + // iLocalNounsTokenでERC721のtotalSupplyを使用したいけど、二重継承でエラーになるので個別関数を準備 + function totalSupply2() public view returns (uint256) { + return super.totalSupply(); + } } diff --git a/contract/contracts/MessageTokenV2.sol b/contract/contracts/MessageTokenV2.sol new file mode 100644 index 00000000..10cca455 --- /dev/null +++ b/contract/contracts/MessageTokenV2.sol @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: MIT + +/* + * Created by Takuya Mizutani (@Takuya-Mizutani) + */ + +pragma solidity ^0.8.6; + +import '@openzeppelin/contracts/utils/Strings.sol'; +import './libs/ProviderTokenA1.sol'; +import './imageParts/interfaces/IMessageStoreV2.sol'; +// import './providers/MessageProvider.sol'; + +import './interfaces/IMessageToken.sol'; + +contract MessageTokenV2 is ProviderTokenA1, IMessageToken { + using Strings for uint256; + + IMessageStoreV2 immutable messageStore; + + mapping(uint256 => uint256) assetIds; // tokenId => assetId + + constructor( + IAssetProvider _assetProvider, + IMessageStoreV2 _messageStore + ) ProviderTokenA1(_assetProvider, 'MessageTokenV2', 'MessageTokenV2') { + description = 'MessageTokenV2'; + messageStore = _messageStore; + mintLimit = 1e50; + } + + function tokenName(uint256 _tokenId) internal pure override returns (string memory) { + return string(abi.encodePacked('MessageTokenV2 ', _tokenId.toString())); + } + + function mint() public payable override returns (uint256 tokenId) { + require(false, 'must not call'); + } + + function mintWithAsset(IMessageStoreV2.Asset memory asset) public returns (uint256 tokenId) { + uint256 assetId = messageStore.register(asset); + tokenId = super.mint(); + assetIds[tokenId] = assetId; + } + + function tokenURI(uint256 _tokenId) public view override returns (string memory) { + uint256 assetId = assetIds[_tokenId]; + require(_exists(_tokenId), 'MessageToken.tokenURI: nonexistent token'); + bytes memory image = bytes(generateSVG(assetId)); // ProviderTokenA1.generateSVG + + return + string( + abi.encodePacked( + 'data:application/json;base64,', + Base64.encode( + bytes( + abi.encodePacked( + '{"name":"', + tokenName(_tokenId), + '","description":"', + description, + '","attributes":[', + generateTraits(assetId), + '],"image":"data:image/svg+xml;base64,', + Base64.encode(image), + '"}' + ) + ) + ) + ) + ); + } + + function getMessage(uint256 index) external view returns (string memory output) { + output = messageStore.getMessage(assetIds[index]); + } + + function getLatestMessage() external view returns (string memory output) { + output = messageStore.getMessage(assetIds[_nextTokenId() - 1]); + } + + function getAsset(uint256 index) external view returns (IMessageStoreV2.Asset memory output) { + output = messageStore.getAsset(assetIds[index]); + } + + function getAssetId(uint256 index) external view returns (uint256 output) { + output = assetIds[index]; + } +} diff --git a/contract/contracts/external/nouns/NounsDescripter.sol b/contract/contracts/external/nouns/NounsDescripter.sol index 55361dee..2bbb56ec 100644 --- a/contract/contracts/external/nouns/NounsDescripter.sol +++ b/contract/contracts/external/nouns/NounsDescripter.sol @@ -261,8 +261,9 @@ contract NounsDescriptor is INounsDescriptor, Ownable { */ function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) public view override returns (string memory) { string memory nounId = tokenId.toString(); - string memory name = string(abi.encodePacked('Noun ', nounId)); - string memory description = string(abi.encodePacked('Noun ', nounId, ' is a member of the Nouns DAO')); + + string memory name = string(abi.encodePacked('Aid pNoun ', nounId)); + string memory description = string(abi.encodePacked('Aid pNoun ', nounId, ' is proof of contribution to pNouns DAO.')); return genericDataURI(name, description, seed); } diff --git a/contract/contracts/external/nouns/NounsSeeder.sol b/contract/contracts/external/nouns/NounsSeeder.sol new file mode 100644 index 00000000..5351bec8 --- /dev/null +++ b/contract/contracts/external/nouns/NounsSeeder.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title The NounsToken pseudo-random seed generator + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { INounsDescriptorMinimal } from './interfaces/INounsDescriptorMinimal.sol'; + +contract NounsSeeder is INounsSeeder { + /** + * @notice Generate a pseudo-random Noun seed using the previous blockhash and noun ID. + */ + // prettier-ignore + function generateSeed(uint256 nounId, INounsDescriptorMinimal descriptor) external view override returns (Seed memory) { + uint256 pseudorandomness = uint256( + keccak256(abi.encodePacked(blockhash(block.number - 1), nounId)) + ); + + uint256 backgroundCount = descriptor.backgroundCount(); + uint256 bodyCount = descriptor.bodyCount(); + uint256 accessoryCount = descriptor.accessoryCount(); + uint256 headCount = descriptor.headCount(); + uint256 glassesCount = descriptor.glassesCount(); + + return Seed({ + background: uint48( + uint48(pseudorandomness) % backgroundCount + ), + body: uint48( + uint48(pseudorandomness >> 48) % bodyCount + ), + accessory: uint48( + uint48(pseudorandomness >> 96) % accessoryCount + ), + head: uint48( + uint48(pseudorandomness >> 144) % headCount + ), + glasses: uint48( + uint48(pseudorandomness >> 192) % glassesCount + ) + }); + } +} diff --git a/contract/contracts/imageParts/interfaces/IMessageStoreV2.sol b/contract/contracts/imageParts/interfaces/IMessageStoreV2.sol new file mode 100644 index 00000000..121b3bbd --- /dev/null +++ b/contract/contracts/imageParts/interfaces/IMessageStoreV2.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.6; + +interface IMessageStoreV2 { + struct Asset { + string message; + string color; + string fontName; + string assetName; + } + struct Box { + uint256 w; + uint256 h; + } + + function register(Asset memory asset) external returns (uint256); + + function getAsset(uint256 index) external view returns (Asset memory); + + function getSVGBody(uint256 index) external view returns (bytes memory output); + + function getSVGBodyFromAsset( + string memory message, + string memory color, + string memory fontName, + Box memory box + ) external view returns (bytes memory output); + + function getSVG(uint256 index) external view returns (string memory output); + + function getSVGMessage( + string memory message, + string memory color, + string memory fontName, + Box memory box + ) external view returns (string memory output); + + function getMessage(uint256 index) external view returns (string memory output); + + function getNextPartIndex() external view returns (uint256); + +} diff --git a/contract/contracts/imageParts/svgstore/MessageStoreV2.sol b/contract/contracts/imageParts/svgstore/MessageStoreV2.sol new file mode 100644 index 00000000..44c6a0d2 --- /dev/null +++ b/contract/contracts/imageParts/svgstore/MessageStoreV2.sol @@ -0,0 +1,130 @@ +pragma solidity ^0.8.6; + +import '../../packages/graphics/Path.sol'; +import '../../packages/graphics/SVG.sol'; +import '../../packages/graphics/Text.sol'; + +import '../interfaces/IMessageStoreV2.sol'; +import '../../packages/graphics/IFontProvider.sol'; +import '@openzeppelin/contracts/utils/math/Math.sol'; + +contract MessageStoreV2 is IMessageStoreV2 { + using SVG for SVG.Element; + using TX for string; + + // fontName -> FontProvider + mapping(string => IFontProvider) public fonts; + + uint256 public nextPartIndex = 1; + mapping(uint256 => Asset) public partsList; + + function getAsset(uint256 index) external view returns (Asset memory) { + return partsList[index]; + } + + function registerFont(string memory fontName, IFontProvider fontProvider) external { + fonts[fontName] = fontProvider; + } + + function register(Asset memory asset) external returns (uint256) { + require(fonts[asset.fontName] != IFontProvider(address(0)), "Font not registered"); + // nextPartIndex is 1-based + partsList[nextPartIndex] = asset; + nextPartIndex++; + return nextPartIndex - 1; + } + + function generateSVGBody(uint256 id) internal view returns (bytes memory output) { + Asset memory asset = partsList[id]; + Box memory box; + box.w = 1024; + box.h = 1024; + output = generateSVGBody(asset.message, asset.color, asset.fontName, box); + } + + // for provider + function getSVGBody(uint256 index) external view override returns (bytes memory output) { + output = generateSVGBody(index); + } + + function getSVGBodyFromAsset( + string memory message, + string memory color, + string memory fontName, + Box memory box + ) external view override returns (bytes memory output) { + output = generateSVGBody(message, color, fontName, box); + } + + function getSVG(uint256 index) external view override returns (string memory output) { + SVG.Element[] memory samples = new SVG.Element[](0); + + output = SVG.document('0 0 1024 1024', SVG.list(samples).svg(), generateSVGBody(index)); + } + + // for web + function getSVGMessage( + string memory message, + string memory color, + string memory fontName, + Box memory box + ) external view override returns (string memory output) { + SVG.Element[] memory samples = new SVG.Element[](1); + output = SVG.document('0 0 1024 1024', SVG.list(samples).svg(), generateSVGBody(message, color, fontName, box)); + } + + function test(string memory message) external view returns (string[] memory output) { + output = Text.split(message, 0x0a); + } + + function generateSVGBody( + string memory message, + string memory color, + string memory fontName, + Box memory box + ) internal view returns (bytes memory output) { + string[] memory messages = Text.split(message, 0x0a); // split \n + SVG.Element[] memory elements = new SVG.Element[](messages.length); + + IFontProvider font = fonts[fontName]; + + // default w scale 1/4 + uint256 maxWidth = box.w * 4; + for (uint256 i = 0; i < messages.length; i++) { + uint256 width = SVG.textWidth(font, messages[i]); + if (width > maxWidth) { + maxWidth = width; + } + elements[i] = SVG.text(font, messages[i]).transform(TX.translate(0, int(font.height() * i))); + } + /* + uint256 scaleW = (box.w * 1000) / maxWidth; + uint256 maxHeight = font.height() * messages.length; + uint256 scaleH = (box.h * 1000) / maxHeight; + uint256 scale = Math.min(scaleW, scaleH); + */ + uint256 scale = Math.min((box.w * 1000) / maxWidth, (box.h * 1000) / (font.height() * messages.length)); + + SVG.Element memory tmp = SVG.group(elements).transform(TX.scale1000(scale)); + tmp = tmp.fill(color); + + SVG.Element[] memory lists = new SVG.Element[](1); + lists[0] = tmp; + + output = SVG.list(lists).svg(); + } + + function getMessage(uint256 index) external view override returns (string memory output) { + Asset memory asset = partsList[index]; + output = asset.message; + } + + function isFontRegistered(string memory fontName) public view returns (bool) { + return fonts[fontName] != IFontProvider(address(0)); + } + + function getNextPartIndex() public view override returns (uint256) { + return nextPartIndex; + } + +} diff --git a/contract/contracts/libs/AssetTokenGate.sol b/contract/contracts/libs/AssetTokenGate.sol index a4a4fd1b..dd74f803 100644 --- a/contract/contracts/libs/AssetTokenGate.sol +++ b/contract/contracts/libs/AssetTokenGate.sol @@ -11,7 +11,7 @@ import '@openzeppelin/contracts/token/ERC721/IERC721.sol'; import '../interfaces/ITokenGate.sol'; contract AssetTokenGate is Ownable, ITokenGate { - IERC721[] whitelist; + IERC721[] public whitelist; function setWhitelist(IERC721[] memory _whitelist) external onlyOwner { whitelist = _whitelist; diff --git a/contract/contracts/libs/ProviderTokenA2.sol b/contract/contracts/libs/ProviderTokenA2.sol new file mode 100644 index 00000000..3a913139 --- /dev/null +++ b/contract/contracts/libs/ProviderTokenA2.sol @@ -0,0 +1,152 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.6; + +// import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +// import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import '../packages/ERC721P2P/ERC721AP2PTradable.sol'; +import { Base64 } from 'base64-sol/base64.sol'; +import '@openzeppelin/contracts/utils/Strings.sol'; +import 'assetprovider.sol/IAssetProvider.sol'; + +/** + * ProviderToken is an abstract implentation of ERC721, which is built on top of an asset provider. + * The specified asset provider is responsible in providing images for NFTs in SVG format, + * which turns them into fully on-chain NFTs. + * + * When implementing the mint method, and it should call processPayout method of the asset provider like this: + * + * provider.processPayout{value:msg.value}(assetId) + * + */ +abstract contract ProviderTokenA2 is ERC721AP2PTradable { + using Strings for uint256; + using Strings for uint16; + + // To be specified by the concrete contract + string public description; + uint public mintPrice; + uint public mintLimit; + + IAssetProvider public assetProvider; + + constructor( + IAssetProvider _assetProvider, + string memory _title, + string memory _shortTitle + ) ERC721A(_title, _shortTitle) { + assetProvider = _assetProvider; + } + + function setAssetProvider(IAssetProvider _assetProvider) external onlyOwner { + assetProvider = _assetProvider; // upgradable + } + + function setDescription(string memory _description) external onlyOwner { + description = _description; + } + + function setMintPrice(uint256 _price) external onlyOwner { + mintPrice = _price; + } + + function setMintLimit(uint256 _limit) external onlyOwner { + mintLimit = _limit; + } + + string constant SVGHeader = + '\n' + '\n'; + + /* + * A function of IAssetStoreToken interface. + * It generates SVG with the specified style, using the given "SVG Part". + */ + function generateSVG(uint256 _assetId) internal view returns (string memory) { + // Constants of non-value type not yet implemented by Solidity + (string memory svgPart, string memory tag) = assetProvider.generateSVGPart(_assetId); + return + string( + abi.encodePacked( + SVGHeader, + svgPart, + '\n' + '\n' + '\n' + ) + ); + } + + /** + * @notice A distinct Uniform Resource Identifier (URI) for a given asset. + * @dev See {IERC721Metadata-tokenURI}. + */ + function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { + require(_exists(_tokenId), 'ProviderToken.tokenURI: nonexistent token'); + bytes memory image = bytes(generateSVG(_tokenId)); + + return + string( + abi.encodePacked( + 'data:application/json;base64,', + Base64.encode( + bytes( + abi.encodePacked( + '{"name":"', + tokenName(_tokenId), + '","description":"', + description, + '","attributes":[', + generateTraits(_tokenId), + '],"image":"data:image/svg+xml;base64,', + Base64.encode(image), + '"}' + ) + ) + ) + ) + ); + } + + function tokenName(uint256 _tokenId) internal view virtual returns (string memory) { + return _tokenId.toString(); + } + + /** + * For non-free minting, + * 1. Override this method + * 2. Check for the required payment, by calling mintPriceFor() + * 3. Call the processPayout method of the asset provider with appropriate value + */ + function mint() public payable virtual returns (uint256 tokenId) { + require(_nextTokenId() < mintLimit, 'Sold out'); + _safeMint(msg.sender, 1); + + return _nextTokenId() - 1; + } + + /** + * The concreate contract may override to offer custom pricing, + * such as token-gated discount. + */ + function mintPriceFor(address) public view virtual returns (uint256) { + return mintPrice; + } + + function totalSupply() public view override returns (uint256) { + return _nextTokenId(); + } + + function generateTraits(uint256 _tokenId) internal view returns (bytes memory traits) { + traits = bytes(assetProvider.generateTraits(_tokenId)); + } + + function debugTokenURI(uint256 _tokenId) public view returns (string memory uri, uint256 gas) { + gas = gasleft(); + uri = tokenURI(_tokenId); + gas -= gasleft(); + } +} diff --git a/contract/contracts/localNouns/LocalNounsDescriptor.sol b/contract/contracts/localNouns/LocalNounsDescriptor.sol index a4903292..0c2adf3f 100644 --- a/contract/contracts/localNouns/LocalNounsDescriptor.sol +++ b/contract/contracts/localNouns/LocalNounsDescriptor.sol @@ -25,373 +25,413 @@ import { MultiPartRLEToSVG } from '../external/nouns/libs/MultiPartRLEToSVG.sol' import { NFTDescriptor } from '../external/nouns/libs/NFTDescriptor.sol'; contract LocalNounsDescriptor is INounsDescriptor, Ownable { - using Strings for uint256; + using Strings for uint256; + + // original + INounsDescriptor public immutable descriptor; + + // prettier-ignore + // https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt + bytes32 constant COPYRIGHT_CC0_1_0_UNIVERSAL_LICENSE = 0xa2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499; + + // Whether or not new Noun parts can be added + bool public override arePartsLocked; + + // Whether or not `tokenURI` should be returned as a data URI (Default: true) + bool public override isDataURIEnabled = true; + + // Base URI + string public override baseURI; + + // Noun Color Palettes (Index => Hex Colors) + mapping(uint8 => string[]) public override palettes; + + // Noun Backgrounds (Hex Colors) + string[] public override backgrounds; + + // Noun Bodies (Custom RLE) + bytes[] public override bodies; + + // Noun Accessories (Custom RLE) + bytes[] public override accessories; + + // Noun Heads (Custom RLE) + bytes[] public override heads; + + // Noun Glasses (Custom RLE) + bytes[] public override glasses; + + // prefectureId => parts index of heads + mapping(uint256 => uint256[]) public prefectureHeads; + + // prefectureId => parts index of accessories + mapping(uint256 => uint256[]) public prefectureAccessories; + + // parts index => parts name of heads + mapping(uint256 => string) public headsName; + + // parts index => parts name of accessories + mapping(uint256 => string) public AccessoriesName; + + constructor(INounsDescriptor _descriptor) { + descriptor = _descriptor; + } + + /** + * @notice Require that the parts have not been locked. + */ + modifier whenPartsNotLocked() { + require(!arePartsLocked, 'Parts are locked'); + _; + } + + /** + * @notice Get the number of available Noun `backgrounds`. + */ + function backgroundCount() external view override returns (uint256) { + return backgrounds.length; + } + + /** + * @notice Get the number of available Noun `bodies`. + */ + function bodyCount() external view override returns (uint256) { + return descriptor.bodyCount(); + // return bodies.length; + } + + /** + * @notice Get the number of available Noun `accessories`. + */ + function accessoryCount() external view override returns (uint256) { + return accessories.length; + } + + /** + * @notice Get the number of available Noun `accessories` in the prefecture. + */ + function accessoryCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { + return prefectureAccessories[prefectureId].length; + } + + /** + * @notice Get the number of available Noun `accessories` in the prefecture. + */ + function accessoryInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { + return prefectureAccessories[prefectureId][seqNo]; + } + + /** + * @notice Get the name of accessories. + */ + function accessoryName(uint256 _partsId) external view override returns (string memory) { + return AccessoriesName[_partsId]; + } + + /** + * @notice Get the number of available Noun `heads`. + */ + function headCount() external view override returns (uint256) { + return heads.length; + } + + /** + * @notice Get the number of available Noun `heads` in the prefecture. + */ + function headCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { + return prefectureHeads[prefectureId].length; + } + + /** + * @notice Get the number of available Noun `heads` in the prefecture. + */ + function headInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { + return prefectureHeads[prefectureId][seqNo]; + } + + /** + * @notice Get the name of heads. + */ + function headName(uint256 _partsId) external view override returns (string memory) { + return headsName[_partsId]; + } + + /** + * @notice Get the number of available Noun `glasses`. + */ + function glassesCount() external view override returns (uint256) { + return descriptor.glassesCount(); + // return glasses.length; + } + + /** + * @notice Add colors to a color palette. + * @dev This function can only be called by the owner. + */ + function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external override onlyOwner { + require(palettes[paletteIndex].length + newColors.length <= 256, 'Palettes can only hold 256 colors'); + for (uint256 i = 0; i < newColors.length; i++) { + _addColorToPalette(paletteIndex, newColors[i]); + } + } + + /** + * @notice Batch add Noun backgrounds. + * @dev This function can only be called by the owner when not locked. + */ + function addManyBackgrounds(string[] calldata _backgrounds) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _backgrounds.length; i++) { + _addBackground(_backgrounds[i]); + } + } + + /** + * @notice Batch add Noun bodies. + * @dev This function can only be called by the owner when not locked. + */ + function addManyBodies(bytes[] calldata _bodies) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _bodies.length; i++) { + _addBody(_bodies[i]); + } + } + + /** + * @notice Batch add Noun accessories. + * @dev This function can only be called by the owner when not locked. + */ + function addManyAccessories( + uint256 prefectureId, + bytes[] calldata _accessories, + string[] calldata _names + ) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _accessories.length; i++) { + _addAccessory(prefectureId, _accessories[i], _names[i]); + } + } + + /** + * @notice Batch add Noun heads. + * @dev This function can only be called by the owner when not locked. + */ + function addManyHeads( + uint256 prefectureId, + bytes[] calldata _heads, + string[] calldata _names + ) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _heads.length; i++) { + _addHead(prefectureId, _heads[i], _names[i]); + } + } + + /** + * @notice Batch add Noun glasses. + * @dev This function can only be called by the owner when not locked. + */ + function addManyGlasses(bytes[] calldata _glasses) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _glasses.length; i++) { + _addGlasses(_glasses[i]); + } + } + + /** + * @notice Add a single color to a color palette. + * @dev This function can only be called by the owner. + */ + function addColorToPalette(uint8 _paletteIndex, string calldata _color) external override onlyOwner { + require(palettes[_paletteIndex].length <= 255, 'Palettes can only hold 256 colors'); + _addColorToPalette(_paletteIndex, _color); + } + + /** + * @notice Add a Noun background. + * @dev This function can only be called by the owner when not locked. + */ + function addBackground(string calldata _background) external override onlyOwner whenPartsNotLocked { + _addBackground(_background); + } + + /** + * @notice Add a Noun body. + * @dev This function can only be called by the owner when not locked. + */ + function addBody(bytes calldata _body) external override onlyOwner whenPartsNotLocked { + _addBody(_body); + } + + /** + * @notice Add a Noun accessory. + * @dev This function can only be called by the owner when not locked. + */ + function addAccessory( + uint256 prefectureId, + bytes calldata _accessory, + string calldata _name + ) external override onlyOwner whenPartsNotLocked { + _addAccessory(prefectureId, _accessory, _name); + } + + /** + * @notice Add a Noun head. + * @dev This function can only be called by the owner when not locked. + */ + function addHead( + uint256 prefectureId, + bytes calldata _head, + string calldata _name + ) external override onlyOwner whenPartsNotLocked { + _addHead(prefectureId, _head, _name); + } + + /** + * @notice Add Noun glasses. + * @dev This function can only be called by the owner when not locked. + */ + function addGlasses(bytes calldata _glasses) external override onlyOwner whenPartsNotLocked { + _addGlasses(_glasses); + } + + /** + * @notice Lock all Noun parts. + * @dev This cannot be reversed and can only be called by the owner when not locked. + */ + function lockParts() external override onlyOwner whenPartsNotLocked { + arePartsLocked = true; + + emit PartsLocked(); + } + + /** + * @notice Toggle a boolean value which determines if `tokenURI` returns a data URI + * or an HTTP URL. + * @dev This can only be called by the owner. + */ + function toggleDataURIEnabled() external override onlyOwner { + bool enabled = !isDataURIEnabled; + + isDataURIEnabled = enabled; + emit DataURIToggled(enabled); + } + + /** + * @notice Set the base URI for all token IDs. It is automatically + * added as a prefix to the value returned in {tokenURI}, or to the + * token ID if {tokenURI} is empty. + * @dev This can only be called by the owner. + */ + function setBaseURI(string calldata _baseURI) external override onlyOwner { + baseURI = _baseURI; + + emit BaseURIUpdated(_baseURI); + } + + /** + * @notice Given a token ID and seed, construct a token URI for an official Nouns DAO noun. + * @dev The returned value may be a base64 encoded data URI or an API URL. + */ + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory) { + if (isDataURIEnabled) { + return dataURI(tokenId, seed); + } + return string(abi.encodePacked(baseURI, tokenId.toString())); + } + + /** + * @notice Given a token ID and seed, construct a base64 encoded data URI for an official Nouns DAO noun. + */ + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) public view override returns (string memory) { + string memory nounId = tokenId.toString(); + string memory name = string(abi.encodePacked('Noun ', nounId)); + string memory description = string(abi.encodePacked('Noun ', nounId, ' is a member of the Nouns DAO')); + + return genericDataURI(name, description, seed); + } + + /** + * @notice Given a name, description, and seed, construct a base64 encoded data URI. + */ + function genericDataURI( + string memory name, + string memory description, + INounsSeeder.Seed memory seed + ) public view override returns (string memory) { + NFTDescriptor.TokenURIParams memory params = NFTDescriptor.TokenURIParams({ + name: name, + description: description, + parts: _getPartsForSeed(seed), + background: descriptor.backgrounds(seed.background) + }); + return NFTDescriptor.constructTokenURI(params, palettes); + } + + /** + * @notice Given a seed, construct a base64 encoded SVG image. + */ + function generateSVGImage(INounsSeeder.Seed memory seed) external view override returns (string memory) { + MultiPartRLEToSVG.SVGParams memory params = MultiPartRLEToSVG.SVGParams({ + parts: _getPartsForSeed(seed), + background: descriptor.backgrounds(seed.background) + }); + return NFTDescriptor.generateSVGImage(params, palettes); + } + + /** + * @notice Add a single color to a color palette. + */ + function _addColorToPalette(uint8 _paletteIndex, string calldata _color) internal { + palettes[_paletteIndex].push(_color); + } + + /** + * @notice Add a Noun background. + */ + function _addBackground(string calldata _background) internal { + backgrounds.push(_background); + } + + /** + * @notice Add a Noun body. + */ + + function _addBody(bytes calldata _body) internal { + // nothing + // bodies.push(_body); + } + + /** + * @notice Add a Noun accessory. + */ + function _addAccessory(uint256 prefectureId, bytes calldata _accessory, string calldata _name) internal { + prefectureAccessories[prefectureId].push(accessories.length); + AccessoriesName[accessories.length] = _name; + accessories.push(_accessory); + } + + /** + * @notice Add a Noun head. + */ + function _addHead(uint256 prefectureId, bytes calldata _head, string calldata _name) internal { + prefectureHeads[prefectureId].push(heads.length); + headsName[heads.length] = _name; + heads.push(_head); + } + + /** + * @notice Add Noun glasses. + */ + function _addGlasses(bytes calldata _glasses) internal { + // glasses.push(_glasses); + } + + /** + * @notice Get all Noun parts for the passed `seed`. + */ + function _getPartsForSeed(INounsSeeder.Seed memory seed) internal view returns (bytes[] memory) { + bytes[] memory _parts = new bytes[](4); + _parts[0] = descriptor.bodies(seed.body); + _parts[1] = accessories[seed.accessory]; + _parts[2] = heads[seed.head]; + _parts[3] = descriptor.glasses(seed.glasses); + return _parts; + } - // original - INounsDescriptor public immutable descriptor; - - // prettier-ignore - // https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt - bytes32 constant COPYRIGHT_CC0_1_0_UNIVERSAL_LICENSE = 0xa2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499; - - // Whether or not new Noun parts can be added - bool public override arePartsLocked; - - // Whether or not `tokenURI` should be returned as a data URI (Default: true) - bool public override isDataURIEnabled = true; - - // Base URI - string public override baseURI; - - // Noun Color Palettes (Index => Hex Colors) - mapping(uint8 => string[]) public override palettes; - - // Noun Backgrounds (Hex Colors) - string[] public override backgrounds; - - // Noun Bodies (Custom RLE) - bytes[] public override bodies; - - // Noun Accessories (Custom RLE) - bytes[] public override accessories; - - // Noun Heads (Custom RLE) - bytes[] public override heads; - - // Noun Glasses (Custom RLE) - bytes[] public override glasses; - - // prefectureId => parts index of heads - mapping(uint256 => uint256[]) public prefectureHeads; - - // prefectureId => parts index of accessories - mapping(uint256 => uint256[]) public prefectureAccessories; - - constructor(INounsDescriptor _descriptor) { - descriptor = _descriptor; - } - /** - * @notice Require that the parts have not been locked. - */ - modifier whenPartsNotLocked() { - require(!arePartsLocked, 'Parts are locked'); - _; - } - - /** - * @notice Get the number of available Noun `backgrounds`. - */ - function backgroundCount() external view override returns (uint256) { - return backgrounds.length; - } - - /** - * @notice Get the number of available Noun `bodies`. - */ - function bodyCount() external view override returns (uint256) { - return descriptor.bodyCount(); - // return bodies.length; - } - - /** - * @notice Get the number of available Noun `accessories`. - */ - function accessoryCount() external view override returns (uint256) { - return accessories.length; - } - - /** - * @notice Get the number of available Noun `accessories` in the prefecture. - */ - function accessoryCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { - return prefectureAccessories[prefectureId].length; - } - - /** - * @notice Get the number of available Noun `accessories` in the prefecture. - */ - function accessoryInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { - return prefectureAccessories[prefectureId][seqNo]; - } - - /** - * @notice Get the number of available Noun `heads`. - */ - function headCount() external view override returns (uint256) { - return heads.length; - } - - /** - * @notice Get the number of available Noun `heads` in the prefecture. - */ - function headCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { - return prefectureHeads[prefectureId].length; - } - - /** - * @notice Get the number of available Noun `heads` in the prefecture. - */ - function headInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { - return prefectureHeads[prefectureId][seqNo]; - } - - /** - * @notice Get the number of available Noun `glasses`. - */ - function glassesCount() external view override returns (uint256) { - return descriptor.glassesCount(); - // return glasses.length; - } - - /** - * @notice Add colors to a color palette. - * @dev This function can only be called by the owner. - */ - function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external override onlyOwner { - require(palettes[paletteIndex].length + newColors.length <= 256, 'Palettes can only hold 256 colors'); - for (uint256 i = 0; i < newColors.length; i++) { - _addColorToPalette(paletteIndex, newColors[i]); - } - } - - /** - * @notice Batch add Noun backgrounds. - * @dev This function can only be called by the owner when not locked. - */ - function addManyBackgrounds(string[] calldata _backgrounds) external override onlyOwner whenPartsNotLocked { - for (uint256 i = 0; i < _backgrounds.length; i++) { - _addBackground(_backgrounds[i]); - } - } - - /** - * @notice Batch add Noun bodies. - * @dev This function can only be called by the owner when not locked. - */ - function addManyBodies(bytes[] calldata _bodies) external override onlyOwner whenPartsNotLocked { - for (uint256 i = 0; i < _bodies.length; i++) { - _addBody(_bodies[i]); - } - } - - /** - * @notice Batch add Noun accessories. - * @dev This function can only be called by the owner when not locked. - */ - function addManyAccessories(uint256 prefectureId, bytes[] calldata _accessories) external override onlyOwner whenPartsNotLocked { - for (uint256 i = 0; i < _accessories.length; i++) { - _addAccessory(prefectureId, _accessories[i]); - } - } - - /** - * @notice Batch add Noun heads. - * @dev This function can only be called by the owner when not locked. - */ - function addManyHeads(uint256 prefectureId, bytes[] calldata _heads) external override onlyOwner whenPartsNotLocked { - for (uint256 i = 0; i < _heads.length; i++) { - _addHead(prefectureId, _heads[i]); - } - } - - /** - * @notice Batch add Noun glasses. - * @dev This function can only be called by the owner when not locked. - */ - function addManyGlasses(bytes[] calldata _glasses) external override onlyOwner whenPartsNotLocked { - for (uint256 i = 0; i < _glasses.length; i++) { - _addGlasses(_glasses[i]); - } - } - - /** - * @notice Add a single color to a color palette. - * @dev This function can only be called by the owner. - */ - function addColorToPalette(uint8 _paletteIndex, string calldata _color) external override onlyOwner { - require(palettes[_paletteIndex].length <= 255, 'Palettes can only hold 256 colors'); - _addColorToPalette(_paletteIndex, _color); - } - - /** - * @notice Add a Noun background. - * @dev This function can only be called by the owner when not locked. - */ - function addBackground(string calldata _background) external override onlyOwner whenPartsNotLocked { - _addBackground(_background); - } - - /** - * @notice Add a Noun body. - * @dev This function can only be called by the owner when not locked. - */ - function addBody(bytes calldata _body) external override onlyOwner whenPartsNotLocked { - _addBody(_body); - } - - /** - * @notice Add a Noun accessory. - * @dev This function can only be called by the owner when not locked. - */ - function addAccessory(uint256 prefectureId, bytes calldata _accessory) external override onlyOwner whenPartsNotLocked { - _addAccessory(prefectureId, _accessory); - } - - /** - * @notice Add a Noun head. - * @dev This function can only be called by the owner when not locked. - */ - function addHead(uint256 prefectureId, bytes calldata _head) external override onlyOwner whenPartsNotLocked { - _addHead(prefectureId, _head); - } - - /** - * @notice Add Noun glasses. - * @dev This function can only be called by the owner when not locked. - */ - function addGlasses(bytes calldata _glasses) external override onlyOwner whenPartsNotLocked { - _addGlasses(_glasses); - } - - /** - * @notice Lock all Noun parts. - * @dev This cannot be reversed and can only be called by the owner when not locked. - */ - function lockParts() external override onlyOwner whenPartsNotLocked { - arePartsLocked = true; - - emit PartsLocked(); - } - - /** - * @notice Toggle a boolean value which determines if `tokenURI` returns a data URI - * or an HTTP URL. - * @dev This can only be called by the owner. - */ - function toggleDataURIEnabled() external override onlyOwner { - bool enabled = !isDataURIEnabled; - - isDataURIEnabled = enabled; - emit DataURIToggled(enabled); - } - - /** - * @notice Set the base URI for all token IDs. It is automatically - * added as a prefix to the value returned in {tokenURI}, or to the - * token ID if {tokenURI} is empty. - * @dev This can only be called by the owner. - */ - function setBaseURI(string calldata _baseURI) external override onlyOwner { - baseURI = _baseURI; - - emit BaseURIUpdated(_baseURI); - } - - /** - * @notice Given a token ID and seed, construct a token URI for an official Nouns DAO noun. - * @dev The returned value may be a base64 encoded data URI or an API URL. - */ - function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory) { - if (isDataURIEnabled) { - return dataURI(tokenId, seed); - } - return string(abi.encodePacked(baseURI, tokenId.toString())); - } - - /** - * @notice Given a token ID and seed, construct a base64 encoded data URI for an official Nouns DAO noun. - */ - function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) public view override returns (string memory) { - string memory nounId = tokenId.toString(); - string memory name = string(abi.encodePacked('Noun ', nounId)); - string memory description = string(abi.encodePacked('Noun ', nounId, ' is a member of the Nouns DAO')); - - return genericDataURI(name, description, seed); - } - - /** - * @notice Given a name, description, and seed, construct a base64 encoded data URI. - */ - function genericDataURI( - string memory name, - string memory description, - INounsSeeder.Seed memory seed - ) public view override returns (string memory) { - NFTDescriptor.TokenURIParams memory params = NFTDescriptor.TokenURIParams({ - name: name, - description: description, - parts: _getPartsForSeed(seed), - background: descriptor.backgrounds(seed.background) - }); - return NFTDescriptor.constructTokenURI(params, palettes); - } - - /** - * @notice Given a seed, construct a base64 encoded SVG image. - */ - function generateSVGImage(INounsSeeder.Seed memory seed) external view override returns (string memory) { - MultiPartRLEToSVG.SVGParams memory params = MultiPartRLEToSVG.SVGParams({ - parts: _getPartsForSeed(seed), - background: descriptor.backgrounds(seed.background) - }); - return NFTDescriptor.generateSVGImage(params, palettes); - } - - /** - * @notice Add a single color to a color palette. - */ - function _addColorToPalette(uint8 _paletteIndex, string calldata _color) internal { - palettes[_paletteIndex].push(_color); - } - - /** - * @notice Add a Noun background. - */ - function _addBackground(string calldata _background) internal { - backgrounds.push(_background); - } - - /** - * @notice Add a Noun body. - */ - - function _addBody(bytes calldata _body) internal { - // nothing - // bodies.push(_body); - } - - /** - * @notice Add a Noun accessory. - */ - function _addAccessory(uint256 prefectureId, bytes calldata _accessory) internal { - prefectureAccessories[prefectureId].push(accessories.length); - accessories.push(_accessory); - } - - /** - * @notice Add a Noun head. - */ - function _addHead(uint256 prefectureId, bytes calldata _head) internal { - prefectureHeads[prefectureId].push(heads.length); - heads.push(_head); - } - - /** - * @notice Add Noun glasses. - */ - function _addGlasses(bytes calldata _glasses) internal { - // glasses.push(_glasses); - } - - /** - * @notice Get all Noun parts for the passed `seed`. - */ - function _getPartsForSeed(INounsSeeder.Seed memory seed) internal view returns (bytes[] memory) { - bytes[] memory _parts = new bytes[](4); - _parts[0] = descriptor.bodies(seed.body); - _parts[1] = accessories[seed.accessory]; - _parts[2] = heads[seed.head]; - _parts[3] = descriptor.glasses(seed.glasses); - return _parts; - } } diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol new file mode 100644 index 00000000..9195dce6 --- /dev/null +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsSeeder + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +import './interfaces/ILocalNounsToken.sol'; +import '../interfaces/ITokenGate.sol'; + +contract LocalNounsMinter is Ownable { + ILocalNounsToken public token; + ITokenGate public immutable tokenGate; + + uint256 public mintPriceForSpecified = 0.003 ether; + uint256 public mintPriceForNotSpecified = 0.001 ether; + + uint256 public mintMax = 1500; + + mapping(address => uint256) public preferentialPurchacedCount; + + enum SalePhase { + Locked, + PreSale, + PublicSale + } + + SalePhase public phase = SalePhase.Locked; // セールフェーズ + + address public administratorsAddress; // 運営ウォレット + + constructor(ILocalNounsToken _token, ITokenGate _tokenGate) { + token = _token; + administratorsAddress = msg.sender; + tokenGate = _tokenGate; + } + + function setMintMax(uint256 _mintMax) external onlyOwner { + mintMax = _mintMax; + } + + function setLocalNounsToken(ILocalNounsToken _token) external onlyOwner { + token = _token; + } + + function setMintPriceForSpecified(uint256 _price) external onlyOwner { + mintPriceForSpecified = _price; + } + + function setMintPriceForNotSpecified(uint256 _price) external onlyOwner { + mintPriceForNotSpecified = _price; + } + + function setPhase(SalePhase _phase) external onlyOwner { + phase = _phase; + } + + function setAdministratorsAddress(address _admin) external onlyOwner { + administratorsAddress = _admin; + } + + function mintSelectedPrefecture(uint256 _prefectureId, uint256 _amount) public payable returns (uint256 tokenId) { + if (phase == SalePhase.Locked) { + revert('Sale is locked'); + } else if (phase == SalePhase.PreSale) { + require(tokenGate.balanceOf(msg.sender) > 0, 'TokenGate token is needed'); + } + + require(token.totalSupply2() + _amount <= mintMax, 'Over the mint limit'); + + uint256 mintPrice; + if(_prefectureId == 0){ + mintPrice = mintPriceForNotSpecified; + }else{ + mintPrice = mintPriceForSpecified; + } + require(msg.value >= mintPrice * _amount, 'Must send the mint price'); + + return token.mintSelectedPrefecture(msg.sender, _prefectureId, _amount); + } + + function withdraw() external payable onlyOwner { + require(administratorsAddress != address(0), "administratorsAddress shouldn't be 0"); + (bool sent, ) = payable(administratorsAddress).call{ value: address(this).balance }(''); + require(sent, 'failed to move fund to administratorsAddress contract'); + } +} diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index e78f59f7..25503f4c 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -23,26 +23,96 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { address public receiver; uint256 public nextTokenId; - + INounsDescriptor public immutable descriptor; INounsDescriptor public immutable localDescriptor; INounsSeeder public immutable seeder; - ILocalNounsSeeder public immutable localSeader; - + ILocalNounsSeeder public immutable localSeeder; + mapping(uint256 => INounsSeeder.Seed) public seeds; + mapping(uint256 => uint256) public tokenIdToPrefectureId; + mapping(uint256 => string) public prefectureName; + mapping(uint256 => uint256) public mintNumberPerPrefecture; // 都道府県ごとのミント数 + // mapping(uint256 => uint256) public prefectureRatio; // ランダムミント時に決定される都道府県の割合 + uint256 totalPrefectureRatio; + + uint256[5] ratioRank = [5, 4, 3, 3, 2]; + uint256[5] acumurationRatioRank; + uint256 acumurationRatioRankTotal; + mapping(uint256 => uint256[]) public prefectureRatio; constructor( - INounsDescriptor _descriptor, - INounsDescriptor _localDescriptor, - INounsSeeder _seeder, - ILocalNounsSeeder _localSeader - ) { - receiver = owner(); + INounsDescriptor _descriptor, + INounsDescriptor _localDescriptor, + INounsSeeder _seeder, + ILocalNounsSeeder _localSeeder + ) { + receiver = owner(); + + descriptor = _descriptor; + localDescriptor = _localDescriptor; + seeder = _seeder; + localSeeder = _localSeeder; + + prefectureName[1] = 'Hokkaido'; + prefectureName[2] = 'Aomori'; + prefectureName[3] = 'Iwate'; + prefectureName[4] = 'Miyagi'; + prefectureName[5] = 'Akita'; + prefectureName[6] = 'Yamagata'; + prefectureName[7] = 'Fukushima'; + prefectureName[8] = 'Ibaraki'; + prefectureName[9] = 'Tochigi'; + prefectureName[10] = 'Gunma'; + prefectureName[11] = 'Saitama'; + prefectureName[12] = 'Chiba'; + prefectureName[13] = 'Tokyo'; + prefectureName[14] = 'Kanagawa'; + prefectureName[15] = 'Niigata'; + prefectureName[16] = 'Toyama'; + prefectureName[17] = 'Ishikawa'; + prefectureName[18] = 'Fukui'; + prefectureName[19] = 'Yamanashi'; + prefectureName[20] = 'Nagano'; + prefectureName[21] = 'Gifu'; + prefectureName[22] = 'Shizuoka'; + prefectureName[23] = 'Aichi'; + prefectureName[24] = 'Mie'; + prefectureName[25] = 'Shiga'; + prefectureName[26] = 'Kyoto'; + prefectureName[27] = 'Osaka'; + prefectureName[28] = 'Hyogo'; + prefectureName[29] = 'Nara'; + prefectureName[30] = 'Wakayama'; + prefectureName[31] = 'Tottori'; + prefectureName[32] = 'Shimane'; + prefectureName[33] = 'Okayama'; + prefectureName[34] = 'Hiroshima'; + prefectureName[35] = 'Yamaguchi'; + prefectureName[36] = 'Tokushima'; + prefectureName[37] = 'Kagawa'; + prefectureName[38] = 'Ehime'; + prefectureName[39] = 'Kochi'; + prefectureName[40] = 'Fukuoka'; + prefectureName[41] = 'Saga'; + prefectureName[42] = 'Nagasaki'; + prefectureName[43] = 'Kumamoto'; + prefectureName[44] = 'Oita'; + prefectureName[45] = 'Miyazaki'; + prefectureName[46] = 'Kagoshima'; + prefectureName[47] = 'Okinawa'; + + prefectureRatio[0] = [13, 14, 27, 23, 11, 12, 28, 1, 40]; + prefectureRatio[1] = [22, 8, 34, 26, 4, 15, 20, 21, 10]; + prefectureRatio[2] = [9, 33, 7, 24, 43, 46, 47, 25, 35]; + prefectureRatio[3] = [29, 38, 42, 2, 3, 17, 44, 45, 6, 16]; + prefectureRatio[4] = [37, 5, 30, 19, 41, 18, 36, 39, 32, 31]; + + for (uint256 i = 0; i < ratioRank.length; i++) { + acumurationRatioRankTotal += ratioRank[i]; + acumurationRatioRank[i] = acumurationRatioRankTotal; + } - descriptor = _descriptor; - localDescriptor = _localDescriptor; - seeder = _seeder; - localSeader = _localSeader; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { @@ -71,6 +141,98 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { receiver = _receiver; } + function generateSeed( + uint256 prefectureId, + uint256 _assetId + ) internal view returns (INounsSeeder.Seed memory mixedSeed) { + INounsSeeder.Seed memory seed1 = seeder.generateSeed(_assetId, descriptor); + ILocalNounsSeeder.Seed memory seed2 = localSeeder.generateSeed(prefectureId, _assetId, localDescriptor); + + mixedSeed = INounsSeeder.Seed({ + background: seed1.background, + body: seed1.body, + accessory: seed2.accessory, + head: seed2.head, + glasses: seed1.glasses + }); + } + + function generateSVGPart(uint256 _assetId) public view override returns (string memory svgPart, string memory tag) { + // INounsSeeder.Seed memory seed = generateSeed(_assetId); + INounsSeeder.Seed memory seed = seeds[_assetId]; + svgPart = localDescriptor.generateSVGImage(seed); + + // generateSVGImage + tag = string(''); + // svgPart = string(""); + } + + function generateTraits(uint256 _assetId) external view override returns (string memory traits) { + uint256 headPartsId = seeds[_assetId].head; + uint256 accessoryPartsId = seeds[_assetId].accessory; + traits = string( + abi.encodePacked( + '{"trait_type": "prefecture" , "value":"', + prefectureName[tokenIdToPrefectureId[_assetId]], + '"}', + ',{"trait_type": "head" , "value":"', + localDescriptor.headName(headPartsId), + '"}', + ',{"trait_type": "accessory" , "value":"', + localDescriptor.accessoryName(accessoryPartsId), + '"}' + ) + ); + } + + bool randomValueForTest = false; + + function setRandomValueForTest(bool _test) public onlyOwner { + randomValueForTest = _test; + } + + // テスト用にpublic + function determinePrefectureId(uint256 _assetId) public view returns (uint256) { + uint256 randomValue; + if (randomValueForTest) { + // For TEST + randomValue = _assetId; + } else { + // ブロック番号とアセット番号から計算した値 -> ランダム値 + randomValue = uint256(keccak256(abi.encodePacked(block.timestamp, _assetId))); + } + + uint256 rank = randomValue % acumurationRatioRankTotal; + for (uint256 i = 0; i < acumurationRatioRank.length; i++) { + if (rank < acumurationRatioRank[i]) { + rank = i; + break; + } + } + return prefectureRatio[rank][randomValue % prefectureRatio[rank].length]; + } + + function mint(uint256 _prefectureId, uint256 _assetId) external returns (uint256) { + uint256 prefectureId; + // 末尾2桁が00の場合は都道府県をランダムに決定する + if (_prefectureId % 100 == 0) { + prefectureId = _prefectureId + determinePrefectureId(_assetId); + } else { + prefectureId = _prefectureId; + } + + seeds[_assetId] = generateSeed(prefectureId, _assetId); + tokenIdToPrefectureId[_assetId] = prefectureId % 100; + mintNumberPerPrefecture[prefectureId % 100]++; + nextTokenId++; + + return _assetId; + } + + function getPrefectureId(uint256 _tokenId) external override returns (uint256) { + return tokenIdToPrefectureId[_tokenId]; + } +======= function generateSeed(uint256 prefectureId, uint256 _assetId) internal view returns (INounsSeeder.Seed memory mixedSeed) { INounsSeeder.Seed memory seed1 = seeder.generateSeed(_assetId, descriptor); ILocalNounsSeeder.Seed memory seed2 = localSeader.generateSeed(prefectureId, _assetId, localDescriptor); @@ -107,6 +269,4 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { return _assetId; } - - } diff --git a/contract/contracts/localNouns/LocalNounsSeeder.sol b/contract/contracts/localNouns/LocalNounsSeeder.sol index 5885601f..1f8b3f74 100644 --- a/contract/contracts/localNouns/LocalNounsSeeder.sol +++ b/contract/contracts/localNouns/LocalNounsSeeder.sol @@ -29,10 +29,12 @@ contract LocalNounsSeeder is ILocalNounsSeeder { keccak256(abi.encodePacked(blockhash(block.number - 1), nounId)) ); - uint256 accessoryCount = descriptor.accessoryCountInPrefecture(prefectureId); + + uint256 accessoryCount = descriptor.accessoryCountInPrefecture(prefectureId % 100); // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 uint256 headCount = descriptor.headCountInPrefecture(prefectureId); - uint256 accesoryPartId = descriptor.accessoryInPrefecture(prefectureId, (pseudorandomness >> 96) % accessoryCount); + uint256 accesoryPartId = descriptor.accessoryInPrefecture(prefectureId % 100, (pseudorandomness >> 96) % accessoryCount); + uint256 headPartId = descriptor.headInPrefecture(prefectureId, (pseudorandomness >> 144) % headCount); return Seed({ diff --git a/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol b/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol index d1ed179d..0b263a3a 100644 --- a/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol +++ b/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol @@ -6,4 +6,6 @@ import 'assetprovider.sol/IAssetProvider.sol'; interface IAssetProviderExMint is IAssetProvider { function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256); + function getPrefectureId(uint256 prefectureId) external returns (uint256); + } diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol new file mode 100644 index 00000000..f756793d --- /dev/null +++ b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsSeeder + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +interface ILocalNounsToken { + function mintSelectedPrefecture(address to, uint256 prefectureId, uint256 _amount) external returns (uint256 tokenId); + + function setMinter(address _minter) external; + + // iLocalNounsTokenでERC721のtotalSupplyを使用したいけど、二重継承でエラーになるので個別関数を準備 + function totalSupply2() external returns (uint256); + + // Fires when the owner puts the trade + event PutTradePrefecture(uint256 indexed tokenId, uint256[] _prefectures); + + // Fires when the owner cancel the trade + event CancelTradePrefecture(uint256 indexed tokenId); +} diff --git a/contract/contracts/localNouns/interfaces/INounsDescriptor.sol b/contract/contracts/localNouns/interfaces/INounsDescriptor.sol index 20924c35..1714c648 100644 --- a/contract/contracts/localNouns/interfaces/INounsDescriptor.sol +++ b/contract/contracts/localNouns/interfaces/INounsDescriptor.sol @@ -53,10 +53,14 @@ interface INounsDescriptor is INounsDescriptorMinimal { function accessoryCountInPrefecture(uint256 prefectureId) external view returns (uint256); + + function accessoryName(uint256 partsId) external view returns (string memory); + function headCount() external view override returns (uint256); function headCountInPrefecture(uint256 prefectureId) external view returns (uint256); + function glassesCount() external view override returns (uint256); function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external; @@ -65,9 +69,9 @@ interface INounsDescriptor is INounsDescriptorMinimal { function addManyBodies(bytes[] calldata bodies) external; - function addManyAccessories(uint256 prefectureId, bytes[] calldata accessories) external; + function addManyAccessories(uint256 prefectureId, bytes[] calldata accessories, string[] calldata name) external; - function addManyHeads(uint256 prefectureId, bytes[] calldata heads) external; + function addManyHeads(uint256 prefectureId, bytes[] calldata heads, string[] calldata name) external; function addManyGlasses(bytes[] calldata glasses) external; @@ -77,9 +81,10 @@ interface INounsDescriptor is INounsDescriptorMinimal { function addBody(bytes calldata body) external; - function addAccessory(uint256 prefectureId, bytes calldata accessory) external; - function addHead(uint256 prefectureId, bytes calldata head) external; + function addAccessory(uint256 prefectureId, bytes calldata accessory, string calldata name) external; + + function addHead(uint256 prefectureId, bytes calldata head, string calldata name) external; function addGlasses(bytes calldata glasses) external; diff --git a/contract/contracts/pNouns/interfaces/INounsDescriptor.sol b/contract/contracts/pNouns/interfaces/INounsDescriptor.sol new file mode 100644 index 00000000..6c676f6a --- /dev/null +++ b/contract/contracts/pNouns/interfaces/INounsDescriptor.sol @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsDescriptor + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsSeeder } from './INounsSeeder.sol'; +import { INounsDescriptorMinimal } from './INounsDescriptorMinimal.sol'; + +interface INounsDescriptor is INounsDescriptorMinimal { + event PartsLocked(); + + event DataURIToggled(bool enabled); + + event BaseURIUpdated(string baseURI); + + function arePartsLocked() external returns (bool); + + function isDataURIEnabled() external returns (bool); + + function baseURI() external returns (string memory); + + function palettes(uint8 paletteIndex, uint256 colorIndex) external view returns (string memory); + + function backgrounds(uint256 index) external view returns (string memory); + + function bodies(uint256 index) external view returns (bytes memory); + + function accessories(uint256 index) external view returns (bytes memory); + + function heads(uint256 index) external view returns (bytes memory); + + function glasses(uint256 index) external view returns (bytes memory); + + function backgroundCount() external view override returns (uint256); + + function bodyCount() external view override returns (uint256); + + function accessoryCount() external view override returns (uint256); + + function headCount() external view override returns (uint256); + + function glassesCount() external view override returns (uint256); + + function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external; + + function addManyBackgrounds(string[] calldata backgrounds) external; + + function addManyBodies(bytes[] calldata bodies) external; + + function addManyAccessories(bytes[] calldata accessories) external; + + function addManyHeads(bytes[] calldata heads) external; + + function addManyGlasses(bytes[] calldata glasses) external; + + function addColorToPalette(uint8 paletteIndex, string calldata color) external; + + function addBackground(string calldata background) external; + + function addBody(bytes calldata body) external; + + function addAccessory(bytes calldata accessory) external; + + function addHead(bytes calldata head) external; + + function addGlasses(bytes calldata glasses) external; + + function lockParts() external; + + function toggleDataURIEnabled() external; + + function setBaseURI(string calldata baseURI) external; + + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory); + + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory); + + function genericDataURI( + string calldata name, + string calldata description, + INounsSeeder.Seed memory seed + ) external view returns (string memory); + + function generateSVGImage(INounsSeeder.Seed memory seed) external view returns (string memory); +} diff --git a/contract/contracts/pNouns/interfaces/INounsDescriptorMinimal.sol b/contract/contracts/pNouns/interfaces/INounsDescriptorMinimal.sol new file mode 100644 index 00000000..c49d4c86 --- /dev/null +++ b/contract/contracts/pNouns/interfaces/INounsDescriptorMinimal.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Common interface for NounsDescriptor versions, as used by NounsToken and NounsSeeder. + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsSeeder } from './INounsSeeder.sol'; + +interface INounsDescriptorMinimal { + /// + /// USED BY TOKEN + /// + + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view returns (string memory); + + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view returns (string memory); + + /// + /// USED BY SEEDER + /// + + function backgroundCount() external view returns (uint256); + + function bodyCount() external view returns (uint256); + + function accessoryCount() external view returns (uint256); + + function headCount() external view returns (uint256); + + function glassesCount() external view returns (uint256); +} diff --git a/contract/contracts/pNouns/interfaces/INounsSeeder.sol b/contract/contracts/pNouns/interfaces/INounsSeeder.sol new file mode 100644 index 00000000..8b1b3f62 --- /dev/null +++ b/contract/contracts/pNouns/interfaces/INounsSeeder.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsSeeder + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsDescriptorMinimal } from './INounsDescriptorMinimal.sol'; + +interface INounsSeeder { + struct Seed { + uint48 background; + uint48 body; + uint48 accessory; + uint48 head; + uint48 glasses; + } + + function generateSeed(uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory); +} diff --git a/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol b/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol index 8c903315..7c19098f 100644 --- a/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol +++ b/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol @@ -10,51 +10,8 @@ pragma solidity ^0.8.6; import './IERC721P2P.sol'; import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; import './erc721a/extensions/ERC721AQueryable.sol'; -import './opensea/DefaultOperatorFilterer.sol'; -// From https://github.com/ProjectOpenSea/operator-filter-registry/blob/main/src/example/ExampleERC721.sol -abstract contract ERC721WithOperatorFilter is ERC721A, DefaultOperatorFilterer { - function setApprovalForAll( - address operator, - bool approved - ) public virtual override onlyAllowedOperatorApproval(operator) { - super.setApprovalForAll(operator, approved); - } - - function approve( - address operator, - uint256 tokenId - ) public payable virtual override onlyAllowedOperatorApproval(operator) { - super.approve(operator, tokenId); - } - - function transferFrom( - address from, - address to, - uint256 tokenId - ) public payable virtual override onlyAllowedOperator(from) { - super.transferFrom(from, to, tokenId); - } - - function safeTransferFrom( - address from, - address to, - uint256 tokenId - ) public payable virtual override onlyAllowedOperator(from) { - super.safeTransferFrom(from, to, tokenId); - } - - function safeTransferFrom( - address from, - address to, - uint256 tokenId, - bytes memory data - ) public payable virtual override onlyAllowedOperator(from) { - super.safeTransferFrom(from, to, tokenId, data); - } -} - -abstract contract ERC721AP2P is IERC721P2PCore, ERC721WithOperatorFilter, Ownable { +abstract contract ERC721AP2P is IERC721P2PCore, ERC721A, Ownable { mapping(uint256 => uint256) prices; function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { @@ -64,6 +21,7 @@ abstract contract ERC721AP2P is IERC721P2PCore, ERC721WithOperatorFilter, Ownabl function setPriceOf(uint256 _tokenId, uint256 _price) public override { require(ownerOf(_tokenId) == msg.sender, 'Only the onwer can set the price'); prices[_tokenId] = _price; + emit SetPrice(_tokenId, _price); } function getPriceOf(uint256 _tokenId) external view override returns (uint256) { diff --git a/contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol b/contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol new file mode 100644 index 00000000..938edb13 --- /dev/null +++ b/contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT + +/** + * Inherits ERC721 as an extension + * Please see "https://hackmd.io/@snakajima/BJqG3fkSo" for details. + */ + +pragma solidity ^0.8.6; + +import './IERC721P2PTradable.sol'; +import './ERC721AP2P.sol'; + +abstract contract ERC721AP2PTradable is IERC721P2PTradableCore, ERC721AP2P { + // onTradeList (tokenId => trade on/off) + mapping(uint256 => bool) public trades; + + function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { + return interfaceId == type(IERC721P2PTradableCore).interfaceId || super.supportsInterface(interfaceId); + } + + function putTrade(uint256 _tokenId, bool _isOnTrade) public virtual { + require(ownerOf(_tokenId) == msg.sender, 'Only the onwer can trade'); + trades[_tokenId] = _isOnTrade; + emit PutTrade(_tokenId, _isOnTrade); + } + + function executeTrade(uint256 _myTokenId, uint256 _targetTokenId) public virtual { + require(ownerOf(_myTokenId) == msg.sender, 'Only the onwer can trade'); + require(trades[_targetTokenId] == true, 'TargetTokenId is not on trade'); + + address targetTokenOwner = ownerOf(_targetTokenId); + + _transfer(msg.sender, targetTokenOwner, _myTokenId); + _transfer(targetTokenOwner, msg.sender, _targetTokenId); + } + + // transfer時はセール、トレード解除 + function _beforeTokenTransfers( + address from, + address to, + uint256 startTokenId, + uint256 quantity + ) internal virtual override { + trades[startTokenId] = false; // not trade any more + prices[startTokenId] = 0; // not on sale any more + super._beforeTokenTransfers(from, to, startTokenId, quantity); + } +} diff --git a/contract/contracts/packages/ERC721P2P/IERC721P2PTradable.sol b/contract/contracts/packages/ERC721P2P/IERC721P2PTradable.sol new file mode 100644 index 00000000..b842315d --- /dev/null +++ b/contract/contracts/packages/ERC721P2P/IERC721P2PTradable.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT + +/** + * This is a part of an effort to update ERC271 so that the sales transaction + * becomes decentralized and trustless, which makes it possible to enforce + * royalities without relying on marketplaces. + * + * Please see "https://hackmd.io/@snakajima/BJqG3fkSo" for details. + * + * Created by Satoshi Nakajima (@snakajima) + */ + +pragma solidity ^0.8.6; + +import '@openzeppelin/contracts/token/ERC721/IERC721.sol'; +import './IERC721P2P.sol'; + +interface IERC721P2PTradableCore { + // Put the specified token to trade list(onlyTokenOwner) + function putTrade(uint256 _tokenId, bool _isOnTrade) external; + + // Trade the specified tokens (onlyTokenOwner) + function executeTrade(uint256 _myTokenId, uint256 _targetTokenId) external; + + // Fires when the owner puts the trade + event PutTrade(uint256 indexed tokenId, bool _isOnTrade); +} + +// deprecated +interface IERC721P2PTradable is IERC721P2PTradableCore, IERC721P2P { + +} diff --git a/contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol b/contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol new file mode 100644 index 00000000..7b8b5fa0 --- /dev/null +++ b/contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.6; + +import './ERC721AP2PTradable.sol'; + +contract SampleAP2PTradableToken is ERC721AP2PTradable { + uint public nextTokenId; + uint constant mintLimit = 100; + address payable immutable artist; + + constructor(address _artist) ERC721A('sample', 'SAMPLE') { + artist = payable(_artist); + } + + function _processRoyalty(uint _salesPrice, uint) internal override returns (uint256 royalty) { + royalty = (_salesPrice * 50) / 1000; // 5.0% + artist.transfer(royalty); + } + + function mint() public payable virtual returns (uint256 tokenId) { + require(nextTokenId < mintLimit, 'Sold out'); + tokenId = nextTokenId++; + _safeMint(msg.sender, 1); + } + + + // Helper method for test script + function etherBalanceOf(address _wallet) public view returns (uint256) { + return _wallet.balance; + } +} diff --git a/contract/contracts/providers/MessageProvider3.sol b/contract/contracts/providers/MessageProvider3.sol new file mode 100644 index 00000000..4e23c2ab --- /dev/null +++ b/contract/contracts/providers/MessageProvider3.sol @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: MIT + +/* + * Created by Takuya Mizutani (@Takuya-Mizutani) + */ + +pragma solidity ^0.8.6; + +import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +import 'assetprovider.sol/IAssetProvider.sol'; +import '@openzeppelin/contracts/utils/Strings.sol'; +import '@openzeppelin/contracts/interfaces/IERC165.sol'; +import '../packages/graphics/SVG.sol'; + +import '../imageParts/interfaces/IMessageStoreV2.sol'; + +contract MessageProvider3 is IAssetProvider, IERC165, Ownable { + using Strings for uint256; + using SVG for SVG.Element; + + IMessageStoreV2 immutable messageStore; + + string constant providerKey = 'MessageV3'; + address public receiver; + + mapping(string => IAssetProvider) public assets; + + constructor(IMessageStoreV2 _messageStore) { + messageStore = _messageStore; + receiver = owner(); + } + + function registerAsset(string memory assetName, IAssetProvider assetProvider) external { + assets[assetName] = assetProvider; + } + + function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { + return interfaceId == type(IAssetProvider).interfaceId || interfaceId == type(IERC165).interfaceId; + } + + function getOwner() external view override returns (address) { + return owner(); + } + + function getProviderInfo() external view override returns (ProviderInfo memory) { + return ProviderInfo(providerKey, 'Message', this); + } + + function totalSupply() external pure override returns (uint256) { + return 0; // indicating "dynamically (but deterministically) generated from the given assetId) + } + + function processPayout(uint256 _assetId) external payable override { + address payable payableTo = payable(receiver); + payableTo.transfer(msg.value); + emit Payout(providerKey, _assetId, payableTo, msg.value); + } + + function setReceiver(address _receiver) external onlyOwner { + receiver = _receiver; + } + + function generateSVGPart(uint256 _assetId) public view override returns (string memory svgPart, string memory tag) { + bytes memory path = messageStore.getSVGBody(_assetId); + tag = string(abi.encodePacked(providerKey, _assetId.toString())); + + IMessageStoreV2.Asset memory asset = messageStore.getAsset(_assetId); + string memory assetName = asset.assetName; + IAssetProvider assetProvider = assets[assetName]; + + (string memory noPart, string memory noTag) = assetProvider.generateSVGPart(_assetId); + + bytes memory body = abi.encodePacked('', bytes(noPart), '', '\n', path, '\n'); + + svgPart = string(SVG.group(body).id(tag).svg()); + } + + function generateTraits(uint256 _assetId) external pure override returns (string memory traits) { + // nothing to return + } + + // For debugging + function generateSVGDocument(uint256 _assetId) external view returns (string memory svgDocument) { + string memory svgPart; + string memory tag; + (svgPart, tag) = generateSVGPart(_assetId); + svgDocument = string(SVG.document('0 0 1024 1024', bytes(svgPart), SVG.use(tag).svg())); + } + + function generateSVGMessage( + string memory message, + string memory color, + string memory fontName, + string memory assetName, + IMessageStoreV2.Box memory box + ) public view returns (string memory output) { + // Text + bytes memory path = messageStore.getSVGBodyFromAsset(message, color, fontName, box); + + // Background + uint256 _assetId = messageStore.getNextPartIndex(); + string memory tag = string(abi.encodePacked(providerKey, _assetId.toString())); + + (string memory noPart, string memory noTag) = assets[assetName].generateSVGPart(_assetId); + bytes memory body = abi.encodePacked('', bytes(noPart), '', '\n', path, '\n'); + string memory svgPart = string(SVG.group(body).id(tag).svg()); + output = string(SVG.document('0 0 1024 1024', bytes(svgPart), SVG.use(tag).svg())); + } + + function isAssetRegistered(string memory assetName) public view returns (bool) { + return assets[assetName] != IAssetProvider(address(0)); + } + +} diff --git a/contract/hardhat.config.ts b/contract/hardhat.config.ts index f1ebb4b3..588312a0 100644 --- a/contract/hardhat.config.ts +++ b/contract/hardhat.config.ts @@ -15,6 +15,13 @@ const config: HardhatUserConfig = { solidity: "0.8.17", defaultNetwork: "localhost", networks: { + polygon: { + url: "https://polygon-mainnet.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY, + // gasMultiplier: 1.7, + gasPrice: 110_000_000_000, // 100 Gwei in wei + accounts: + process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], + }, mumbai: { // url: "https://rpc-mumbai.maticvigil.com", url: "https://polygon-mumbai.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY, diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index 811ad549..1cd2cbea 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -1,23 +1,21 @@ import { ethers, network } from 'hardhat'; import { exec } from 'child_process'; -import addresses from '@nouns/sdk/dist/contract/addresses.json'; -// const nounsDescriptor: string = network.name == 'goerli' ? addresses[5].nounsDescriptor : addresses[1].nounsDescriptor; -// const nounsSeeder: string = network.name == 'goerli' ? addresses[5].nounsSeeder : addresses[1].nounsSeeder; -// const nftDescriptor: string = network.name == 'goerli' ? addresses[5].nftDescriptor : addresses[1].nftDescriptor; +import { writeFile } from 'fs'; +import { addresses } from '../../src/utils/addresses'; -const nounsDescriptor: string = '0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107'; // mumbai -const nounsSeeder: string = '0x5f5C984E0BAf150D5a74ae21f4777Fd1947DE8c9'; // mumbai -const nftDescriptor: string = '0xC93218fF7C44cbEB57c7661DCa886deCBc0E07C0'; // mumbai +const nounsDescriptor = addresses.nounsDescriptor[network.name]; +const nounsSeeder = addresses.nounsSeeder[network.name]; +const nftDescriptor = addresses.nftDescriptor[network.name]; -// const nounsDescriptor: string = '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0'; // localhost -// const nounsSeeder: string = '0x5FC8d32690cc91D4c39d9d3abcBD16989F875707'; // localhost -// const nftDescriptor: string = '0x5FbDB2315678afecb367f032d93F642f64180aa3'; // localhost +async function main() { -const committee = "0x52A76a606AC925f7113B4CC8605Fe6bCad431EbB"; -// const committee = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"; // localhost + const [minter] = await ethers.getSigners(); + console.log(`##minter="${minter.address}"`); -async function main() { + const factoryTokenGate = await ethers.getContractFactory('AssetTokenGate'); + const tokenGate = await factoryTokenGate.deploy(); + await tokenGate.deployed(); const factorySeeder = await ethers.getContractFactory('LocalNounsSeeder'); const localseeder = await factorySeeder.deploy(); @@ -25,6 +23,9 @@ async function main() { console.log(`##localseeder="${localseeder.address}"`); await runCommand(`npx hardhat verify ${localseeder.address} --network ${network.name} &`); + const addresses = `export const addresses = {\n` + ` localseeder:"${localseeder.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localseeder_${network.name}.ts`, addresses, () => { }); + const factoryLocalNounsDescriptor = await ethers.getContractFactory('LocalNounsDescriptor', { libraries: { NFTDescriptor: nftDescriptor, @@ -37,17 +38,37 @@ async function main() { console.log(`##localNounsDescriptor="${localNounsDescriptor.address}"`); await runCommand(`npx hardhat verify ${localNounsDescriptor.address} ${nounsDescriptor} --network ${network.name} &`); + const addresses2 = `export const addresses = {\n` + ` localNounsDescriptor:"${localNounsDescriptor.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsDescriptor_${network.name}.ts`, addresses2, () => { }); + const factorySVGStore = await ethers.getContractFactory('LocalNounsProvider'); const provider = await factorySVGStore.deploy(nounsDescriptor, localNounsDescriptor.address, nounsSeeder, localseeder.address); await provider.deployed(); console.log(`##LocalNounsProvider="${provider.address}"`); await runCommand(`npx hardhat verify ${provider.address} ${nounsDescriptor} ${localNounsDescriptor.address} ${nounsSeeder} ${localseeder.address} --network ${network.name} &`); + const addresses3 = `export const addresses = {\n` + ` localNounsProvider:"${provider.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsProvider_${network.name}.ts`, addresses3, () => { }); + const factoryToken = await ethers.getContractFactory('LocalNounsToken'); - const token = await factoryToken.deploy(provider.address, committee, committee, committee); + const token = await factoryToken.deploy(provider.address, minter.address); await token.deployed(); console.log(`##LocalNounsToken="${token.address}"`); - await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${committee} ${committee} ${committee} --network ${network.name} &`); + await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${minter.address} --network ${network.name} &`); + + const addresses4 = `export const addresses = {\n` + ` localNounsToken:"${token.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsToken_${network.name}.ts`, addresses4, () => { }); + + const factoryMinter = await ethers.getContractFactory('LocalNounsMinter'); + const minterContract = await factoryMinter.deploy(token.address, tokenGate.address); + await minterContract.deployed(); + console.log(`##LocalNounsMinter="${minterContract.address}"`); + await runCommand(`npx hardhat verify ${minterContract.address} ${token.address} --network ${network.name} &`); + + const addresses5 = `export const addresses = {\n` + ` localNounsMinter:"${minterContract.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsMinter_${network.name}.ts`, addresses5, () => { }); + + await token.setMinter(minterContract.address); } diff --git a/contract/scripts/deploy_message.ts b/contract/scripts/deploy_message.ts index a6272712..5ad447cd 100644 --- a/contract/scripts/deploy_message.ts +++ b/contract/scripts/deploy_message.ts @@ -23,9 +23,10 @@ async function main() { console.log("factorySVGStore.deploy"); console.log(network.name); // const store = await factorySVGStore.deploy(addresses.londrina_solid[network.name]); // font. + const store = await factorySVGStore.deploy(addresses.noto_sans[network.name]); // font. // for mainnet forking - const store = await factorySVGStore.deploy("0x980aAc123617e2B2ea407081Ceb72d5854BAa3D1"); // font. + // const store = await factorySVGStore.deploy("0x980aAc123617e2B2ea407081Ceb72d5854BAa3D1"); // font. console.log("wait"); await store.deployed(); diff --git a/contract/scripts/deploy_message_2.ts b/contract/scripts/deploy_message_2.ts new file mode 100644 index 00000000..1c406f20 --- /dev/null +++ b/contract/scripts/deploy_message_2.ts @@ -0,0 +1,127 @@ +import { ethers, network } from 'hardhat'; +import { writeFile } from 'fs'; +import { addresses } from '../../src/utils/addresses'; + +const deploy = async (name: string, args: any) => { + const factory = await ethers.getContractFactory(name); + const contract = args ? await factory.deploy(args) : await factory.deploy(); + await contract.deployed(); + return contract; + // console.log(` test="${contract.address}"`); +}; + +const deployNFT = async (name: string, args: any, args2: any) => { + const factory = await ethers.getContractFactory(name); + const contract = await factory.deploy(args, args2); + await contract.deployed(); + return contract; + // console.log(` test="${contract.address}"`); +}; + +async function main() { + console.log("Network Name:", network.name); + const box = {w: 1024, h: 1024}; + + // --------------------------- MessageStoreV2 --------------------------- + const factorySVGStore = await ethers.getContractFactory('MessageStoreV2'); + const store = await factorySVGStore.deploy(); + console.log("wait"); + await store.deployed(); + console.log(`store contract="${store.address}"`); + const storeAddress = `export const addresses = {\n` + ` messageStore: "${store.address}",\n` + `}\n`; + writeFile(`../src/utils/addresses/messagestore2_${network.name}.ts`, storeAddress, () => {}); + + // Goerli Test Net + // await store.registerFont('Noto_Sans', '0xf4fd7f7e9fC89B2F539BE378214EbB768ECBf91B'); + // await store.registerFont('Londrina_Solid', '0xbFde916e6315365567F3504E20166F92474dc4ea'); + + // Mumbai Test Net + await store.registerFont('Noto_Sans', '0xCBbC30D7d8b9DCF720f4FfB98Ef42E5A2633B791'); + await store.registerFont('Londrina_Solid', '0xF3636358069588D2A16a81d27e7e8cB15Eb3827B'); + + const is_ = await store.isFontRegistered('Londrina_Solid'); + console.log(is_); + + // await store.register({ message: 'hello1', color: '#000', fontName: 'Noto_Sans', assetName: 'Splatter' }); + // await store.register({ message: 'hello2', color: '#000', fontName: 'Noto_Sans', assetName: 'Splatter' }); + // await store.register({ message: 'hello3', color: '#000', fontName: 'Londrina_Solid', assetName: 'Splatter' }); + // await store.register({ message: 'hello4', color: '#000', fontName: 'Londrina_Solid', assetName: 'Splatter' }); + + // const res3 = await store.getMessage(3); + // console.log(res3); + // const abc = await store.getSVGMessage("Hello,Hello", "#000", "Londrina_Solid", box); + // console.log(abc); + // ------------------------------------------------------------------------ + + + // // --------------------------- MessageProvider3 --------------------------- + // const storeAddress = '0xb0c6B1FBd00900B60f5Ff5aeB46BF2d8c7708f23'; + const factoryMessageProvider = await ethers.getContractFactory('MessageProvider3'); + const provider = await factoryMessageProvider.deploy(store.address); + console.log("wait"); + await provider.deployed(); + console.log(`provider contract="${provider.address}"`); + const providerAddress = `export const addresses = {\n` + ` messageProvider: "${provider.address}",\n` + `}\n`; + writeFile(`../src/utils/addresses/messageprovider_${network.name}.ts`, providerAddress, () => {}); + + // // Goerli Test Net + // await provider.registerAsset('Splatter', '0x15C40F258B1fc68c109FE3E3CFF191a80f24E4C1'); + // await provider.registerAsset('Snow', '0xa92675Feb3a316d73ec9D8f2A0De7b90b25b1351'); + + // Mumbai Test Net + await provider.registerAsset('Splatter', '0x256Ba9c4DD146f3EBf0f7D0a3Ddea3F400CE806D'); + await provider.registerAsset('Snow', '0x00cF04ec45DE4Ed7e8451948dBa330f7bF614fda'); + + // const is_Splatter = await provider.isAssetRegistered('Splatter'); + // const is_Snow = await provider.isAssetRegistered('Snow'); + // console.log(is_Splatter, is_Snow); + // const id = await store.getNextPartIndex(); + // console.log(id.toNumber()); + // const aaa = await provider.generateSVGMessage("Hello,Hello", "orange", "Noto_Sans", 'Splatter', box); + // console.log(aaa); + // save to file + // writeFile('test.svg', aaa, (err) => { + // if (err) throw err; + // console.log('The file has been saved!'); + // }); + // // ------------------------------------------------------------------------ + + + // // ----------------------------- MessegeToken ----------------------------- + // const providerAddress = '0x3249784e050D06b909117fA4405fe013E9490957'; + const factoryMessageToken = await ethers.getContractFactory('MessageTokenV2'); + const token = await factoryMessageToken.deploy(provider.address, store.address); + console.log("wait"); + await token.deployed(); + console.log(`token contract="${token.address}"`); + const tokenAddress = `export const addresses = {\n` + ` messageToken: "${token.address}",\n` + `}\n`; + writeFile(`../src/utils/addresses/messagetoken_${network.name}.ts`, tokenAddress, () => {}); + + // // mint + // await token.mintWithAsset({ message: 'first nft!', color: 'orange', fontName: 'Noto_Sans' , assetName: 'Snow'}); + // await token.mintWithAsset({ message: '2nd nft!', color: 'orange', fontName: 'Noto_Sans' , assetName: 'Snow'}); + // await token.mintWithAsset({ message: '3rd nft!', color: 'blue', fontName: 'Londrina_Solid' , assetName: 'Snow'}); + // await token.mintWithAsset({ message: '4th nft!', color: 'orange', fontName: 'Noto_Sans' , assetName: 'Snow'}); + + // const message = await token.getLatestMessage(); + // console.log(message); + // const message1 = await token.getMessage(0); + // console.log(message1); + + // const nextId = await token.totalSupply(); + // console.log(nextId.toNumber()); + // const tokenId = nextId.toNumber() - 1; + // console.log(tokenId); + // const bbb = await token.getAsset(tokenId); + // console.log(bbb.assetName); + // const ret = await token.getAssetId(tokenId); + // console.log(ret.toNumber()); + // const uri = await token.tokenURI(2); + // console.log(uri); + // // ------------------------------------------------------------------------ +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); diff --git a/contract/scripts/deploy_nounsDescriptorV1.ts b/contract/scripts/deploy_nounsDescriptorV1.ts index 9836f38e..93ef643d 100644 --- a/contract/scripts/deploy_nounsDescriptorV1.ts +++ b/contract/scripts/deploy_nounsDescriptorV1.ts @@ -2,6 +2,8 @@ import { ethers, network } from 'hardhat'; import { exec } from 'child_process'; import addresses from '@nouns/sdk/dist/contract/addresses.json'; +import { writeFile } from 'fs'; + // const nftDescriptor: string = network.name == 'goerli' ? addresses[5].nftDescriptor : addresses[1].nftDescriptor; // const nftDescriptor: string = '0x1881c541E9d83880008B3720de0E537C34052ecf'; // mumbai // const nftDescriptor: string = '0x5FbDB2315678afecb367f032d93F642f64180aa3'; // localhost @@ -9,12 +11,23 @@ import addresses from '@nouns/sdk/dist/contract/addresses.json'; async function main() { + const factoryNounsSeeder = await ethers.getContractFactory('NounsSeeder'); + const nounsSeeder = await factoryNounsSeeder.deploy(); + await nounsSeeder.deployed(); + console.log(`##nounsSeeder="${nounsSeeder.address}"`); + await runCommand(`npx hardhat verify ${nounsSeeder.address} --network ${network.name} &`); + + const addresses = `export const addresses = {\n` + ` nounsSeeder:"${nounsSeeder.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/nounsSeeder_${network.name}.ts`, addresses, () => { }); + const factoryNFTDescriptor = await ethers.getContractFactory('NFTDescriptor'); const nftDescriptor = await factoryNFTDescriptor.deploy(); await nftDescriptor.deployed(); console.log(`##nftDescriptor="${nftDescriptor.address}"`); await runCommand(`npx hardhat verify ${nftDescriptor.address} --network ${network.name} &`); + const addresses2 = `export const addresses = {\n` + ` nftDescriptor:"${nftDescriptor.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/nftDescriptor_${network.name}.ts`, addresses2, () => { }); const factoryNounsDescriptor = await ethers.getContractFactory('NounsDescriptor', { libraries: { @@ -26,6 +39,9 @@ async function main() { console.log(`##nounsDescriptor="${nounsDescriptor.address}"`); await runCommand(`npx hardhat verify ${nounsDescriptor.address} --network ${network.name} &`); + const addresses3 = `export const addresses = {\n` + ` nounsDescriptor:"${nounsDescriptor.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/nounsDescriptor_${network.name}.ts`, addresses3, () => { }); + } async function runCommand(command: string) { diff --git a/contract/scripts/deploy_snow.ts b/contract/scripts/deploy_snow.ts index 3b147be4..475694bb 100644 --- a/contract/scripts/deploy_snow.ts +++ b/contract/scripts/deploy_snow.ts @@ -20,6 +20,8 @@ async function main() { const result = await contract.generateSVGPart(0); console.log('svg', result.tag); + // const contractSchemes = addresses.colorSchemes[network.name]; + const factoryArt = await ethers.getContractFactory('RepeatProvider'); const contractArt = await factoryArt.deploy(contract.address, 2, 'snowart', 'Snow Art'); await contractArt.deployed(); diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts index 40d853fa..887f3a76 100644 --- a/contract/scripts/populate_localNouns.ts +++ b/contract/scripts/populate_localNouns.ts @@ -1,31 +1,38 @@ import * as dotenv from "dotenv"; import { ethers, network } from 'hardhat'; -import * as fs from 'fs'; + +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; import { images, palette } from "../test/image-local-data"; import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; +import { abi as localMinterABI } from "../artifacts/contracts/localNouns/LocalNounsMinter.sol/LocalNounsMinter"; dotenv.config(); -const localSeederAddress: string = '0xD00fa9C531CEE42ba319B5Bda19c60e54BEddA41'; -const localNounsDescriptorAddress: string = '0xA4D4793f2fFafb1E7278C80565FA7252Ef146623'; -const localProviderAddress: string = '0xDC00D91b1FE2bc91C241Ae1E03b30F867789E83e'; -const localTokenAddress: string = '0x4958bb35e1aEA77133E46f042d0b5d373141E759'; +const localSeederAddress = addresses.localSeeder[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const localProviderAddress = addresses.localProvider[network.name]; +const localTokenAddress = addresses.localNounsToken[network.name]; +const localMinterAddress = addresses.localNounsMinter[network.name]; async function main() { - const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; - const wallet = new ethers.Wallet(privateKey, ethers.provider); - // const [wallet] = await ethers.getSigners(); // localhost + + // const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + // const wallet = new ethers.Wallet(privateKey, ethers.provider); + const [wallet] = await ethers.getSigners(); // localhost // ethers.Contract オブジェクトのインスタンスを作成 const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); - + const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); + if (true) { // set Palette console.log(`set Palette start`); @@ -36,8 +43,10 @@ async function main() { console.log(`set Accessories start`); const accessoryChunk = chunkArrayByPrefectureId(images.accessories); for (const chunk of accessoryChunk) { - const prefectureId = chunk[0].filename.split('-')[0]; - await localNounsDescriptor.addManyAccessories(prefectureId, chunk.map(({ data }) => data)); + + const prefectureId = chunk[0].prefectureId; + await localNounsDescriptor.addManyAccessories(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + // console.log("chunk:", prefectureId, chunk); } console.log(`set Accessories end`); @@ -46,24 +55,25 @@ async function main() { console.log(`set Heads start`); const headChunk = chunkArrayByPrefectureId(images.heads); for (const chunk of headChunk) { - const prefectureId = chunk[0].filename.split('-')[0]; - await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data)); + + const prefectureId = chunk[0].prefectureId; + await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + // console.log("chunk:", prefectureId, chunk); } console.log(`set Heads end`); } - for (var i: number = 1; i <= 47; i++) { - try { - await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); - await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); - await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); - console.log(`mint [`, i, `]`); - } catch (error) { - console.error(error); - }; - } + // for (var i: number = 1; i <= 47; i++) { + // try { + // await localMinter.functions['mintSelectedPrefecture(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.000001') }); + + // console.log(`mint [`, i, `]`); + // } catch (error) { + // console.error(error); + // }; + // } // console.log(`write file start`); // const index = 0; @@ -82,6 +92,8 @@ main().catch(error => { }); interface ImageData { +prefectureId: string; + filename: string; data: string; } @@ -96,7 +108,20 @@ function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { continue; } - let id = imagedata[i].filename.split('-')[0]; + let filename = imagedata[i].filename.split('-'); + let id = filename[0]; + imagedata[i].prefectureId = id; + + // filenameの抽出 ex)"35-yamaguchi-white -snake-accessories" -> "white-snake" + let name = ''; + for (var j = 2; j < filename.length - 1; j++) { + if (name.length > 0) { + name += '-'; + } + name += filename[j].trim(); + } + imagedata[i].filename = name; + console.log("imagedata[i].filename", imagedata[i].filename); if (!map.has(id)) { map.set(id, []); diff --git a/contract/scripts/populate_localNouns2.ts b/contract/scripts/populate_localNouns2.ts new file mode 100644 index 00000000..2d26396a --- /dev/null +++ b/contract/scripts/populate_localNouns2.ts @@ -0,0 +1,88 @@ +/** + * HEADの追加用 + */ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; + +import { images, palette } from "../test/image-local-data2"; +import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; +import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; +import { abi as localMinterABI } from "../artifacts/contracts/localNouns/LocalNounsMinter.sol/LocalNounsMinter"; + +dotenv.config(); + + +const localSeederAddress = addresses.localSeeder[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const localProviderAddress = addresses.localProvider[network.name]; +const localTokenAddress = addresses.localNounsToken[network.name]; +const localMinterAddress = addresses.localNounsMinter[network.name]; + +async function main() { + + // const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + // const wallet = new ethers.Wallet(privateKey, ethers.provider); + const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); + const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); + const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); + + if (true) { + // set Heads + console.log(`set Heads start`); + const headChunk = chunkArrayByPrefectureId(images.heads); + for (const chunk of headChunk) { + const prefectureId = chunk[0].prefectureId; + await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + // console.log("chunk:", prefectureId, chunk); + } + console.log(`set Heads end`); + + } + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + +interface ImageData { + prefectureId: string; + filename: string; + data: string; +} + +function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { + let map = new Map(); + + for (let i = 0; i < imagedata.length; i++) { + // dataが空っぽはスキップ + if (imagedata[i].data === undefined) { + console.error("not define data:", imagedata[i].filename); + continue; + } + + let filename = imagedata[i].filename.split('-'); + let id = filename[0]; + imagedata[i].prefectureId = id; + + // filenameの抽出 ex)"132-head-32-shimane-heads" -> "shimane-map" + imagedata[i].filename = filename[3]+'-map'; + console.log("imagedata[i].filename", imagedata[i].filename); + if (!map.has(id)) { + map.set(id, []); + } + map.get(id)!.push(imagedata[i]); + } + return Array.from(map.values()); +} \ No newline at end of file diff --git a/contract/scripts/populate_nounsV1.ts b/contract/scripts/populate_nounsV1.ts index 6b0825eb..dca19ab6 100644 --- a/contract/scripts/populate_nounsV1.ts +++ b/contract/scripts/populate_nounsV1.ts @@ -5,54 +5,73 @@ import { images, palette, bgcolors } from "../test/image-original-nouns-data"; // import { abi as nounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; import { abi as nounsDescriptorABI } from "../artifacts/contracts/external/nouns/NounsDescripter.sol/NounsDescriptor"; +import { addresses } from '../../src/utils/addresses'; + dotenv.config(); -const nounsDescriptorAddress: string = '0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107'; +const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; async function main() { - const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + var privateKey; + if (network.name == "localhost" || network.name == "hardhat") { + privateKey = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'; + } else { + privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + } + const wallet = new ethers.Wallet(privateKey, ethers.provider); // const [wallet] = await ethers.getSigners(); // localhost // ethers.Contract オブジェクトのインスタンスを作成 const nounsDescriptor = new ethers.Contract(nounsDescriptorAddress, nounsDescriptorABI, wallet); + const feeData = await ethers.provider.getFeeData(); + console.log("feeData:" + feeData.gasPrice); + if (true) { console.log(`set Palette start`); - await nounsDescriptor.addManyColorsToPalette(0, palette); + await nounsDescriptor.addManyColorsToPalette(0, palette, { gasPrice: feeData.gasPrice }); + console.log(`set Palette end`); console.log(`set Accessories start`); const accessoryChunk = chunkArray(images.accessories, 10); for (const chunk of accessoryChunk) { - await nounsDescriptor.addManyAccessories(chunk.map(({ data }) => data)); + + await nounsDescriptor.addManyAccessories(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); + } console.log(`set Accessories end`); console.log(`set Bodies start`); const bodiesChunk = chunkArray(images.bodies, 10); for (const chunk of bodiesChunk) { - await nounsDescriptor.addManyBodies(chunk.map(({ data }) => data)); + + await nounsDescriptor.addManyBodies(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); + } console.log(`set Bodies end`); console.log(`set heads start`); - const headChunk = chunkArray(images.heads, 10); + + const headChunk = chunkArray(images.heads, 5); for (const chunk of headChunk) { - await nounsDescriptor.addManyHeads(chunk.map(({ data }) => data)); + await nounsDescriptor.addManyHeads(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); + } console.log(`set heads end`); console.log(`set glasses start`); const glassesChunk = chunkArray(images.glasses, 10); for (const chunk of glassesChunk) { - await nounsDescriptor.addManyGlasses(chunk.map(({ data }) => data)); + await nounsDescriptor.addManyGlasses(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); } console.log(`set glasses end`); console.log(`set backgrounds start`); - await nounsDescriptor.addManyBackgrounds(bgcolors); + + await nounsDescriptor.addManyBackgrounds(bgcolors, { gasPrice: feeData.gasPrice }); console.log(`set backgrounds end`); } diff --git a/contract/scripts/test_localNouns.ts b/contract/scripts/test_localNouns.ts new file mode 100644 index 00000000..1f264683 --- /dev/null +++ b/contract/scripts/test_localNouns.ts @@ -0,0 +1,101 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; + +import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; +import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; +import { abi as localMinterABI } from "../artifacts/contracts/localNouns/LocalNounsMinter.sol/LocalNounsMinter"; + +dotenv.config(); + + +const localSeederAddress = addresses.localSeeder[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const localProviderAddress = addresses.localProvider[network.name]; +const localTokenAddress = addresses.localNounsToken[network.name]; +const localMinterAddress = addresses.localNounsMinter[network.name]; + +async function main() { + + // const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + // const wallet = new ethers.Wallet(privateKey, ethers.provider); + const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); + const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); + const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); + + console.log("localToken:", localTokenAddress); + + for (var i: number = 101; i <= 147; i++) { + // for (var i: number = 1; i <= 47; i++) { + try { + await localMinter.functions['mintSelectedPrefecture(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.000001') }); + + console.log(`mint [`, i, `]`); + } catch (error) { + console.log(`mint error [`, i, `]`); + // console.error(error); + }; + } + + // console.log(`write file start`); + // const index = 0; + // const ret = await localToken.tokenURI(index); + // const json = Buffer.from(ret.split(",")[1], 'base64').toString(); + // const svgB = Buffer.from(JSON.parse(json)["image"].split(",")[1], 'base64').toString(); + // const svg = Buffer.from(svgB, 'base64').toString(); + // // fs.writeFileSync(`./svg/${index}.svg`, svg, { encoding: 'utf8' }); + // console.log(`write file end`); + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + +interface ImageData { + prefectureId: string; + filename: string; + data: string; +} + +function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { + let map = new Map(); + + for (let i = 0; i < imagedata.length; i++) { + // dataが空っぽはスキップ + if (imagedata[i].data === undefined) { + console.error("not define data:", imagedata[i].filename); + continue; + } + + let filename = imagedata[i].filename.split('-'); + let id = filename[0]; + imagedata[i].prefectureId = id; + + // filenameの抽出 ex)"35-yamaguchi-white -snake-accessories" -> "white-snake" + let name = ''; + for (var j = 2; j < filename.length - 1; j++) { + if (name.length > 0) { + name += '-'; + } + name += filename[j].trim(); + } + imagedata[i].filename = name; + console.log("imagedata[i].filename", imagedata[i].filename); + if (!map.has(id)) { + map.set(id, []); + } + map.get(id)!.push(imagedata[i]); + } + return Array.from(map.values()); +} \ No newline at end of file diff --git a/contract/scripts/test_nounsV1.ts b/contract/scripts/test_nounsV1.ts new file mode 100644 index 00000000..6915c86d --- /dev/null +++ b/contract/scripts/test_nounsV1.ts @@ -0,0 +1,43 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; + +import { images, palette, bgcolors } from "../test/image-original-nouns-data"; +// import { abi as nounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as nounsDescriptorABI } from "../artifacts/contracts/external/nouns/NounsDescripter.sol/NounsDescriptor"; + +dotenv.config(); + +const nounsDescriptorAddress: string = '0x4DCD10c8Da99C062E06dc28f7a26917B3D45dC73'; + +async function main() { + var privateKey; + if (network.name == "localhost") { + privateKey = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'; + } else { + privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + } + const wallet = new ethers.Wallet(privateKey, ethers.provider); + // const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const nounsDescriptor = new ethers.Contract(nounsDescriptorAddress, nounsDescriptorABI, wallet); + + const seed = { + background: 0, body: 14, accessory: 132, head: 94, glasses: 18 + }; + + const svg = await nounsDescriptor.generateSVGImage(seed); + console.log(svg); + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + + +interface ImageData { + filename: string; + data: string; +} diff --git a/contract/test/image-local-data.json b/contract/test/image-local-data.json index 100d84ea..4f374a26 100644 --- a/contract/test/image-local-data.json +++ b/contract/test/image-local-data.json @@ -1,1447 +1,1465 @@ { - "bgcolors": [ - "d5d7e1", - "e1d7d5" + "bgcolors": [ + "d5d7e1", + "e1d7d5" + ], + "palette": [ + "", + "ffffff", + "c5b9a1", + "cfc2ab", + "63a0f9", + "807f7e", + "caeff9", + "5648ed", + "5a423f", + "b9185c", + "b87b11", + "fffdf2", + "4b4949", + "343235", + "1f1d29", + "068940", + "867c1d", + "ae3208", + "9f21a0", + "f98f30", + "fe500c", + "d26451", + "fd8b5b", + "5a65fa", + "d22209", + "e9265c", + "c54e38", + "80a72d", + "4bea69", + "34ac80", + "eed811", + "62616d", + "ff638d", + "8bc0c5", + "c4da53", + "000000", + "f3322c", + "ffae1a", + "ffc110", + "505a5c", + "ffef16", + "fff671", + "fff449", + "db8323", + "df2c39", + "f938d8", + "5c25fb", + "2a86fd", + "45faff", + "38dd56", + "ff3a0e", + "d32a09", + "903707", + "6e3206", + "552e05", + "e8705b", + "f38b7c", + "e4a499", + "667af9", + "648df9", + "7cc4f2", + "97f2fb", + "a3efd0", + "87e4d9", + "71bde4", + "ff1a0b", + "f78a18", + "2b83f6", + "d62149", + "834398", + "ffc925", + "d9391f", + "bd2d24", + "ff7216", + "254efb", + "e5e5de", + "00a556", + "c5030e", + "abf131", + "fb4694", + "e7a32c", + "fff0ee", + "009c59", + "0385eb", + "00499c", + "e11833", + "26b1f3", + "fff0be", + "d8dadf", + "d7d3cd", + "1929f4", + "eab118", + "0b5027", + "f9f5cb", + "cfc9b8", + "feb9d5", + "f8d689", + "5d6061", + "76858b", + "757576", + "ff0e0e", + "0adc4d", + "fdf8ff", + "70e890", + "f7913d", + "ff1ad2", + "ff82ad", + "535a15", + "fa6fe2", + "ffe939", + "ab36be", + "adc8cc", + "604666", + "f20422", + "abaaa8", + "4b65f7", + "a19c9a", + "58565c", + "da42cb", + "027c92", + "cec189", + "909b0e", + "74580d", + "027ee6", + "b2958d", + "efad81", + "7d635e", + "eff2fa", + "6f597a", + "d4b7b2", + "d18687", + "cd916d", + "6b3f39", + "4d271b", + "85634f", + "f9f4e6", + "f8ddb0", + "b92b3c", + "d08b11", + "257ced", + "a3baed", + "5fd4fb", + "c16710", + "a28ef4", + "3a085b", + "67b1e3", + "1e3445", + "ffd067", + "962236", + "769ca9", + "5a6b7b", + "7e5243", + "a86f60", + "8f785e", + "cc0595", + "42ffb0", + "d56333", + "b8ced2", + "b91b43", + "f39713", + "e8e8e2", + "ec5b43", + "235476", + "b2a8a5", + "d6c3be", + "49b38b", + "fccf25", + "f59b34", + "375dfc", + "99e6de", + "27a463", + "554543", + "b19e00", + "d4a015", + "9f4b27", + "f9e8dd", + "6b7212", + "9d8e6e", + "4243f8", + "fa5e20", + "f82905", + "555353", + "876f69", + "410d66", + "552d1d", + "f71248", + "fee3f3", + "c16923", + "2b2834", + "0079fc", + "d31e14", + "f83001", + "8dd122", + "fffdf4", + "ffa21e", + "e4afa3", + "fbc311", + "aa940c", + "eedc00", + "fff006", + "9cb4b8", + "a38654", + "ae6c0a", + "2bb26b", + "e2c8c0", + "f89865", + "f86100", + "dcd8d3", + "049d43", + "d0aea9", + "f39d44", + "eeb78c", + "f9f5e9", + "5d3500", + "c3a199", + "aaa6a4", + "caa26a", + "fde7f5", + "fdf008", + "fdcef2", + "f681e6", + "018146", + "d19a54", + "9eb5e1", + "f5fcff", + "3f9323", + "00fcff", + "4a5358", + "fbc800", + "d596a6", + "ffb913", + "e9ba12", + "767c0e", + "f9f6d1", + "d29607", + "f8ce47", + "395ed1", + "ffc5f0", + "cbc1bc", + "d4cfc0", + "fe6612", + "fe6412", + "fe6b14", + "fff5cb", + "544e4a", + "01499c", + "1f3445", + "282728", + "d3ad78", + "f9e1ba", + "d5d7e1" + ], + "images": { + "bodies": [ + { + "filename": "body-bege-bsod-bodies", + "data": "0x0015171f090e020e020e020e02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02" + }, + { + "filename": "body-bege-crt-bodies", + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + }, + { + "filename": "body-blue-sky-bodies", + "data": "0x0015171f090e040e040e040e04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04" + }, + { + "filename": "body-bluegrey-bodies", + "data": "0x0015171f090e050e050e050e05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05" + }, + { + "filename": "body-cold-bodies", + "data": "0x0015171f090e060e060e060e06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06" + }, + { + "filename": "body-computerblue-bodies", + "data": "0x0015171f090e070e070e070e07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07" + }, + { + "filename": "body-darkbrown-bodies", + "data": "0x0015171f090e080e080e080e08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08" + }, + { + "filename": "body-darkpink-bodies", + "data": "0x0015171f090e090e090e090e09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09" + }, + { + "filename": "body-foggrey-bodies", + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + }, + { + "filename": "body-gold-bodies", + "data": "0x0015171f090e0a0e0a0e0a0e0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a" + }, + { + "filename": "body-grayscale-1-bodies", + "data": "0x0015171f090e0b0e0b0e0b0e0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b" + }, + { + "filename": "body-grayscale-7-bodies", + "data": "0x0015171f090e0c0e0c0e0c0e0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c" + }, + { + "filename": "body-grayscale-8-bodies", + "data": "0x0015171f090e0d0e0d0e0d0e0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d" + }, + { + "filename": "body-grayscale-9-bodies", + "data": "0x0015171f090e0e0e0e0e0e0e0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e" + }, + { + "filename": "body-green-bodies", + "data": "0x0015171f090e0f0e0f0e0f0e0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f" + }, + { + "filename": "body-gunk-bodies", + "data": "0x0015171f090e100e100e100e10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10" + }, + { + "filename": "body-hotbrown-bodies", + "data": "0x0015171f090e110e110e110e11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11" + }, + { + "filename": "body-magenta-bodies", + "data": "0x0015171f090e120e120e120e12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12" + }, + { + "filename": "body-orange-yellow-bodies", + "data": "0x0015171f090e130e130e130e13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13" + }, + { + "filename": "body-orange-bodies", + "data": "0x0015171f090e140e140e140e14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14" + }, + { + "filename": "body-peachy-B-bodies", + "data": "0x0015171f090e150e150e150e15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15" + }, + { + "filename": "body-peachy-a-bodies", + "data": "0x0015171f090e160e160e160e16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16" + }, + { + "filename": "body-purple-bodies", + "data": "0x0015171f090e170e170e170e17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17" + }, + { + "filename": "body-red-bodies", + "data": "0x0015171f090e180e180e180e18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18" + }, + { + "filename": "body-redpinkish-bodies", + "data": "0x0015171f090e190e190e190e19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19" + }, + { + "filename": "body-rust-bodies", + "data": "0x0015171f090e1a0e1a0e1a0e1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a" + }, + { + "filename": "body-slimegreen-bodies", + "data": "0x0015171f090e1b0e1b0e1b0e1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b" + }, + { + "filename": "body-teal-light-bodies", + "data": "0x0015171f090e1c0e1c0e1c0e1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c" + }, + { + "filename": "body-teal-bodies", + "data": "0x0015171f090e1d0e1d0e1d0e1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d" + }, + { + "filename": "body-yellow-bodies", + "data": "0x0015171f090e1e0e1e0e1e0e1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e" + } ], - "palette": [ - "", - "ffffff", - "c5b9a1", - "cfc2ab", - "63a0f9", - "807f7e", - "caeff9", - "5648ed", - "5a423f", - "b9185c", - "b87b11", - "fffdf2", - "4b4949", - "343235", - "1f1d29", - "068940", - "867c1d", - "ae3208", - "9f21a0", - "f98f30", - "fe500c", - "d26451", - "fd8b5b", - "5a65fa", - "d22209", - "e9265c", - "c54e38", - "80a72d", - "4bea69", - "34ac80", - "eed811", - "62616d", - "ff638d", - "8bc0c5", - "c4da53", - "000000", - "f3322c", - "ffae1a", - "ffc110", - "505a5c", - "ffef16", - "fff671", - "fff449", - "db8323", - "df2c39", - "f938d8", - "5c25fb", - "2a86fd", - "45faff", - "38dd56", - "ff3a0e", - "d32a09", - "903707", - "6e3206", - "552e05", - "e8705b", - "f38b7c", - "e4a499", - "667af9", - "648df9", - "7cc4f2", - "97f2fb", - "a3efd0", - "87e4d9", - "71bde4", - "ff1a0b", - "f78a18", - "2b83f6", - "d62149", - "834398", - "ffc925", - "d9391f", - "bd2d24", - "ff7216", - "254efb", - "e5e5de", - "00a556", - "c5030e", - "abf131", - "fb4694", - "e7a32c", - "fff0ee", - "009c59", - "0385eb", - "00499c", - "e11833", - "26b1f3", - "fff0be", - "d8dadf", - "d7d3cd", - "1929f4", - "eab118", - "0b5027", - "f9f5cb", - "cfc9b8", - "feb9d5", - "f8d689", - "5d6061", - "76858b", - "757576", - "ff0e0e", - "0adc4d", - "fdf8ff", - "70e890", - "f7913d", - "ff1ad2", - "ff82ad", - "535a15", - "fa6fe2", - "ffe939", - "ab36be", - "adc8cc", - "604666", - "f20422", - "abaaa8", - "4b65f7", - "a19c9a", - "58565c", - "da42cb", - "027c92", - "cec189", - "909b0e", - "74580d", - "027ee6", - "b2958d", - "efad81", - "7d635e", - "eff2fa", - "6f597a", - "d4b7b2", - "d18687", - "cd916d", - "6b3f39", - "4d271b", - "85634f", - "f9f4e6", - "f8ddb0", - "b92b3c", - "d08b11", - "257ced", - "a3baed", - "5fd4fb", - "c16710", - "a28ef4", - "3a085b", - "67b1e3", - "1e3445", - "ffd067", - "962236", - "769ca9", - "5a6b7b", - "7e5243", - "a86f60", - "8f785e", - "cc0595", - "42ffb0", - "d56333", - "b8ced2", - "b91b43", - "f39713", - "e8e8e2", - "ec5b43", - "235476", - "b2a8a5", - "d6c3be", - "49b38b", - "fccf25", - "f59b34", - "375dfc", - "99e6de", - "27a463", - "554543", - "b19e00", - "d4a015", - "9f4b27", - "f9e8dd", - "6b7212", - "9d8e6e", - "4243f8", - "fa5e20", - "f82905", - "555353", - "876f69", - "410d66", - "552d1d", - "f71248", - "fee3f3", - "c16923", - "2b2834", - "0079fc", - "d31e14", - "f83001", - "8dd122", - "fffdf4", - "ffa21e", - "e4afa3", - "fbc311", - "aa940c", - "eedc00", - "fff006", - "9cb4b8", - "a38654", - "ae6c0a", - "2bb26b", - "e2c8c0", - "f89865", - "f86100", - "dcd8d3", - "049d43", - "d0aea9", - "f39d44", - "eeb78c", - "f9f5e9", - "5d3500", - "c3a199", - "aaa6a4", - "caa26a", - "fde7f5", - "fdf008", - "fdcef2", - "f681e6", - "018146", - "d19a54", - "9eb5e1", - "f5fcff", - "3f9323", - "00fcff", - "4a5358", - "fbc800", - "d596a6", - "ffb913", - "e9ba12", - "767c0e", - "f9f6d1", - "d29607", - "f8ce47", - "395ed1", - "ffc5f0", - "cbc1bc", - "d4cfc0", - "fe6612", - "fe6412", - "fe6b14", - "fff5cb", - "544e4a", - "01499c", - "1f3445", - "282728", - "d3ad78", - "f9e1ba", - "d5d7e1" + "accessories": [ + { + "filename": "01-hokkaido-crab-accessories", + "data": "0x0019161c0d0113010001130100011301000113010001130100011301000108011301080100011301000200051302000100011301000313010001130100" + }, + { + "filename": "01-hokkaido-melon-accessories", + "data": "0x0018131a0e014203000142012203420122010003220100" + }, + { + "filename": "01-hokkaido-sheep-accessories", + "data": "0x0018141d0e020001c1010e020003c10300010e0100010e0300040001c1010e020003c101000200010e0100010e0100" + }, + { + "filename": "02-aomori-jade-accessories", + "data": "0x0015141e090400010205000102050001020300010201000500017f0102011c01020101010004000101010001dd0102019b0100017f0700015203000b000b000b000b0002010900" + }, + { + "filename": "02-aomori-squid-accessories", + "data": "0x0018151d0f0300010802000100010102080101010002000208020001010100010801330200010001010123013301000101010101000101010001010100" + }, + { + "filename": "02-aomori-tsugaru-shamisen-accessories", + "data": "0x0018121c0f010001360123012301360123010001360100020b0100020b0100" + }, + { + "filename": "03-iwate-egg-accessories", + "data": "0x0018141b100100020101000101021e01010101021e0101010002010100" + }, + { + "filename": "03-iwate-fujiwara-accessories", + "data": "0x0017141c0f0100012303000200012302000200015d02000100026701cd0100046701310101013101670201" + }, + { + "filename": "04-miyagi-beeftongue-accessories", + "data": "0x0019131a0e013501a1013501a10135018501a1018501a10135" + }, + { + "filename": "04-miyagi-matsushima-accessories", + "data": "0x0016171f0c0600022901010100010104000301012903000b000b00025c0100025c01000129010003a205b106000300015c0100015c01290100025c0100030004b1010002b1010001a20a00020002a2010002290400" + }, + { + "filename": "04-miyagi-zunda-accessories", + "data": "0x0019131b10024e0100034e014e0101014e" + }, + { + "filename": "05-akita-fireworks-accessories", + "data": "0x0015171f0c060001c7010001c70200030001c101c7020001c1010001c10100050001c7010001c7020001c7020001c101c7050001c70100040001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c703000100014a010001c1010001c7020001c702000400014a010001c1020001c101000300014a0100014a05000400014a0600" + }, + { + "filename": "05-akita-hatahata-accessories", + "data": "0x0018141b0e011005000100015d021001230110011001000101025d01010300015d0200" + }, + { + "filename": "05-akita-raspberry-accessories", + "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e02b906b9020002b90200" + }, + { + "filename": "06-yamagata-cherry-accessories", + "data": "0x0018131c0e02c0030001c0010001c0020001c0020001c0010002410100024101e40141010001e40141" + }, + { + "filename": "06-yamagata-lafrance-accessories", + "data": "0x0019131c10010001840100010001840122022201c601de0222" + }, + { + "filename": "06-yamagata-shogi-accessories", + "data": "0x0018131b10010001230100010002230123020001000223" + }, + { + "filename": "07-fukushima-akabeko-accessories", + "data": "0x0019141b0f01230133010101230100013301230133010101330133010001330200" + }, + { + "filename": "07-fukushima-inawashiro-accessories", + "data": "0x0018171e0c030001e0010001a2019504000200029203a202950200039208a20b000b000400010101230500030002010600" + }, + { + "filename": "07-fukushima-train-accessories", + "data": "0x0018131b0f015802570158010e0285010e0485016a0258016a" + }, + { + "filename": "08-ibaraki-bellpepper-accessories", + "data": "0x0018121b0f01dd01e101dd01dd010f01dd01dd010f01dd0100010f0100" + }, + { + "filename": "08-ibaraki-natto-accessories", + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + }, + { + "filename": "08-ibaraki-rokkakudo-accessories", + "data": "0x0017171f09070001860400029107000186060004000161050001860300010001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d408000a0002910200050002910700" + }, + { + "filename": "09-tochigi-gyoza-accessories", + "data": "0x0018141b0e0100013401000134010001340134012501340125013401250188022501880225010001340100013401000134" + }, + { + "filename": "09-tochigi-lemon-accessories", + "data": "0x0018131c100152020103c701c7015201c7010101c701010352" + }, + { + "filename": "09-tochigi-shimotsukare-accessories", + "data": "0x0019131b0f016001930150014901500187019301600193014901ce0187" + }, + { + "filename": "10-gunma-akagiyama-accessories", + "data": "0x0019171b0c0100014901bf020002bf020001bf014901bf0149011b014901460149011b014901bf011b01460b06" + }, + { + "filename": "10-gunma-tomiokasilkmill-accessories", + "data": "0x001717190902320137033201370332013703320137010102b4010102b40101013701b4010101b4013701010232010003320137033201370332" + }, + { + "filename": "10-gunma-yakimanjyu-accessories", + "data": "0x0017161e0e04000236011101220300023401230101010003000136011101340136010002000134011101230101020001000134013601340101013602000100011101340123013403000100012201360134040001220700" + }, + { + "filename": "11-saitama-icicle-accessories", + "data": "0x0015171c090e0104000101010001010100010101000101010001010100040001e0010001010100010101000101010001010100060001010100010101000101010001e0010006000101010001e001000101030006000101030001e00300060001e0030001e00300060001e00700" + }, + { + "filename": "11-saitama-soka-senbei-accessories", + "data": "0x0018131b0f0100016001e6010002e601110160011103e60100011101e60100" + }, + { + "filename": "12-chiba-inubosaki-accessories", + "data": "0x0018171f0d0128010001280100042802000700010102000700010102000600040f04000154010104b105000254010102b103000354010102b101000354010103b10300" + }, + { + "filename": "12-chiba-orca-accessories", + "data": "0x0018151c0d0100010d0600020d0200010d03000200050d01000300020d020b01000100025601000156010d01000156" + }, + { + "filename": "12-chiba-peanuts-accessories", + "data": "0x0018131b100100016001d8010002600260010001d801600100" + }, + { + "filename": "13-tokyo-tower-accessories", + "data": "0x0016151d0e060001da02000141020001da010002000101030001da02000141020001da010001000301030001000341030001000141010001410300014101000141010001410200" + }, + { + "filename": "13-tokyo-yamanote-accessories", + "data": "0x0018141c0f010001c0010101c00100010103bc010101c003bc01c00101010001bc01000101010001c0010101c00100" + }, + { + "filename": "14-ibaraki-natto-accessories", + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + }, + { + "filename": "14-kanagawa-baybridge-accessories", + "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010001a201a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" + }, + { + "filename": "14-kanagawa-yacht-accessories", + "data": "0x0018141c100100015402000254014301000254024302000243037f0100" + }, + { + "filename": "15-nigata-edamame-accessories", + "data": "0x0019141b0e0200014e0200014e0100014e01c00100014e01c0011e01c00100011e01c00100" + }, + { + "filename": "15-niigata-riceear-accessories", + "data": "0x0018131d0f02000128010001000128020001c001280100012801c001000128010002c0020002c00200" + }, + { + "filename": "16-toyama-kutabe-accessories", + "data": "0x0019141e030100010e0200030e0a00010e0200020e0201010e0400011803bf0188020e0100020e0201010e0400011801bf020e01bf0100060e0500011804bf0100060e0a000100010e0100010e0100020e0a00" + }, + { + "filename": "16-toyama-shiroebi-accessories", + "data": "0x0018131a0e0400010e010002ba010e01ba01ba0400" + }, + { + "filename": "16-toyama-tateyama-accessories", + "data": "0x0019171c090100017f020001a2017f0300027f01a20100017f027f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" + }, + { + "filename": "17-ishikawa-kotoji-accessories", + "data": "0x0018131c0e02000172020001000372010002000158020001000158010001580100015803000158" + }, + { + "filename": "17-ishikawa-kutani-kaga-gosai-accessories", + "data": "0x0018121a0f0118010f01c401a201e0018001c4010f0118" + }, + { + "filename": "17-ishikawa-oyster-accessories", + "data": "0x0017151c0e030001a0026b01a002000301016b01a0010001a0040101a001000401015d010001a00201015d01990200019901c301990400" + }, + { + "filename": "18-fukui-echizen-crab-accessories", + "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b80414020001000114010001b80214010001b80100" + }, + { + "filename": "18-fukui-heshiko-accessories", + "data": "0x0019131a0f018303e3029c0185019c" + }, + { + "filename": "18-fukui-yokan-accessories", + "data": "0x0018131b0e02000385020003850200038502570385" + }, + { + "filename": "19-yamanashi-fuji-accessories", + "data": "0x0017171e0c0600020b03000500020b01eb010b0200030007eb01000beb0b58010007580300020001e0015802e00500030002e0030002a90100" + }, + { + "filename": "19-yamanashi-grape-accessories", + "data": "0x0018121b0e0200019a01220100019a0112019a019a0112016e01120112016e01450100" + }, + { + "filename": "20-nagano-kappa-accessories", + "data": "0x0018131a0e020f0201010f0100013e0123013e01000100023e022a" + }, + { + "filename": "20-nagano-oyaki-accessories", + "data": "0x0018121b0e01b0011b02000157011b01b0011b0157028a0157010002570100" + }, + { + "filename": "21-gifu-gero-accessories", + "data": "0x0018141c0e020001010100010101000100010101000101020001c8013d0101013d010101c801c8043d01c8010004c80100" + }, + { + "filename": "21-gifu-gohei-mochi-accessories", + "data": "0x0019141b0d020004110100020101600111011a0111010102000260021a0100" + }, + { + "filename": "21-gifu-sarubobo-accessories", + "data": "0x0018131d0f010002230100012302440123017102440171010002230100010002230100017102000171" + }, + { + "filename": "21-gifu-ukaibody-accessories", + "data": "0x0015171f090592075402920592075402920592075402920592075402920292010002920754029202920100029207540292029201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" + }, + { + "filename": "22-shizuoka-fuji-accessories", + "data": "0x0017171d0c090002e0020003e0020001010300060002320101020003e0020005320100040001e10632020001dd04e1043204dd07e1" + }, + { + "filename": "23-aichi-oguratoast-accessories", + "data": "0x0018131c0e0293028401930193028401b80193019301b8028401930193018401b8018401930593" + }, + { + "filename": "23-aichi-tebasaki-accessories", + "data": "0x0017131a0e010001480300014804000548010003480100" + }, + { + "filename": "24-mie-iseebi-accessories", + "data": "0x0017151e0d02000132020001320200010001320100023201000132010001000132010002320100013201000132021802320218013201320100011802b40118010001320100011801000232010001180100030002b40300020001180132011801320200" + }, + { + "filename": "24-mie-mochi-accessories", + "data": "0x0019121a0f018401b80184018401b80184" + }, + { + "filename": "25-shiga-funazushi-accessories", + "data": "0x0018151a0e01420100013701000137020001420100014201000137010001370142010001420100014201000142" + }, + { + "filename": "25-shiga-hieizan-accessories", + "data": "0x0018171b090700020f05000500070f0200020f01000b0f028d01000b8d" + }, + { + "filename": "26-kyoto-daimonji-accessories", + "data": "0x0017161d0d0300011405000200011401490114040003140149031402000749020002000114014901140400021401490100014904140249030003490100" + }, + { + "filename": "26-kyoto-yatsuhashi-accessories", + "data": "0x0018131a0e02000157020001000157018601570100015702860257" + }, + { + "filename": "27-osaka-cheesecake-accessories", + "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b015707570100015701b7015701b701570100" + }, + { + "filename": "27-osaka-jinbezame-accessories", + "data": "0x0018161c0d010001a2020001a20400010601a2010002a20400020001a2010602a20106020002a2012302a20106012302a202000206025f01060200" + }, + { + "filename": "28-hyogo-akashiyaki-accessories", + "data": "0x0019141b0f02000260010001000160015d016001ae015d016002ae0160" + }, + { + "filename": "28-hyogo-tower-museum-accessories", + "data": "0x0017171e0c020001010800020001490200013f0500020001c20200026f0100013e0200020001490100013e016f023e0300020001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" + }, + { + "filename": "29-nara-kakinohasushi-accessories", + "data": "0x0019141c0f010001c0011b01c0011b0100011b02c0011b019501a2019501a2010002cc019701cc0100" + }, + { + "filename": "29-nara-narazuke-accessories", + "data": "0x0019121a0f03b801b8010001b8" + }, + { + "filename": "30-wakayama-mikan-kaki-accessories", + "data": "0x0018121a0f03c201c201e101c203c2" + }, + { + "filename": "30-wakayama-nankoume-accessories", + "data": "0x001a151b0d024e010002a60100029c024e010002a60100029c" + }, + { + "filename": "33-oakayama-mamakari-accessories", + "data": "0x0019151b0e01a2019d01a2019d01a201000157019d01a2019d01a2019d01060100050601000157" + }, + { + "filename": "33-okauama-muscat-accessories", + "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" + }, + { + "filename": "33-okayama-denim-jacket01-accessories", + "data": "0x0015171f090354049201000492025404540392010103920354055401920354019204540e540754010106540a54019201010192015402540100075403920154025401000454010102540392015402540100085401920254025401000b5402540100045401010654" + }, + { + "filename": "33-okayama-denim-jacket02-accessories", + "data": "0x0015171f0903540392040003920154045402920400029202540554019204000192035406540400045405540101040004540654040001540192010101920254010003540400015403920254010002540101040001540392025401000354040002540192015402540100035404000454025401000254010104000454" + }, + { + "filename": "33-okayama-denim-jacket03-accessories", + "data": "0x0015171f09035302540700025403530254070002540453025405000254015306530500035306530500010102530653050003530253010003530500010102530253010003530500035302530c0002530c0002530c00" + }, + { + "filename": "33-okayama-kibidango-accessories", + "data": "0x0018131b0f010002570100015703eb04eb010002eb0100" + }, + { + "filename": "33-okayama-momotaro-accessories", + "data": "0x0015171f080100054d010105040101024d0100054d010105040101024d01000204034d010105040101024d01000204034d010105040101024d010002040100024d010105040101024d010002040100024d010105040101024d01000204010001eb014d010105740101024d01eb020401eb010a01eb010105740101024d01eb020402eb014d010105540101024d01eb020402eb014d010105540101024d01eb020402eb014d010105540101024d" + }, + { + "filename": "33-okayama-peach02-accessories", + "data": "0x0018151c0e0300015f03000200035f02000100055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" + }, + { + "filename": "33-okayama-retainer-accessories", + "data": "0x0015171f09054d010105040101024d054d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" + }, + { + "filename": "34-hiroshima-battleship-accessories", + "data": "0x0019171f09060001d70700030001d7010002d7070001d7020004d7010001d7010001d7020001d702d701000ad70100024801000b4802a201000ba202a201000ba2" + }, + { + "filename": "34-hiroshima-lemon-accessories", + "data": "0x0019131c0f0100022901220429042903290100" + }, + { + "filename": "34-hiroshima-oyster-accessories", + "data": "0x0018131c0e020001d901060101010001060288010101e9038801010106020c0101010003010200" + }, + { + "filename": "34-hiroshima-rice-scoop-accessories", + "data": "0x0018131c10036003600360010001600100010001600100" + }, + { + "filename": "34-hiroshima-shrine-accessories", + "data": "0x0018171f09040008770200050006bf0300060001bf020001bf0400050006bf0300060001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" + }, + { + "filename": "34-hiroshima-wani-accessories", + "data": "0x0017141d0d04560300015602000156030003000156030001000256040003000456070003000456" + }, + { + "filename": "35-yamaguchi-kintaikyo-accessories", + "data": "0x001b171f09010001ca020002ca010002ca010002ca010001ca01ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188013f023f01000b3f023f01000b3f" + }, + { + "filename": "35-yamaguchi-motonosumiinari-accessories", + "data": "0x0017171f090e53055303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" + }, + { + "filename": "35-yamaguchi-white -snake-accessories", + "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" + }, + { + "filename": "35-yamaguhchi-tsunoshima-big-bridge-accessories", + "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" + }, + { + "filename": "36-tokushima-awaodori-accessories", + "data": "0x0018131b0f0220015a01010100022301000100025f01000100025f0100" + }, + { + "filename": "36-tokushima-citrus-sudachi-accessories", + "data": "0x0018131c0e0100035c0100015c010101c70101015c015c01c7010101c7015c015c010101c70101015c0100035c0100" + }, + { + "filename": "36-tokushima-narutomaki-accessories", + "data": "0x0017141c0d02000301020001000101034f010101000101014f0301014f01010101014f0101014f0101014f01010101034f0101014f0101010005010100" + }, + { + "filename": "37-kagawa-oliveoil-accessories", + "data": "0x0017121c0f010001ac01000100015c0100035c015c01c6015c015c01c6015c035c" + }, + { + "filename": "38-ehime-dango-accessories", + "data": "0x0018131c0e0300021b020002a6011b0100027001a60100010001570170020001570400" + }, + { + "filename": "38-ehime-juice-accessories", + "data": "0x0018131f0c02000106018d01060200010602000140030001060140040601010106010003060100010606000142060001420600014206000142" + }, + { + "filename": "38-ehime-mandarin-orange-accessories", + "data": "0x0019121a0f014201e101420342" + }, + { + "filename": "38-ehime-turt-accessories", + "data": "0x0018141c0e0100045701000157037002570157017001570270015701570270015701700157010004570100" + }, + { + "filename": "39-kochi-seared-bonito-accessories", + "data": "0x0019131b0f0378010001780294017801780394" + }, + { + "filename": "40-fukuoka-mentaiko-accessories", + "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf016a026a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" + }, + { + "filename": "40-fukuoka-umegaeda-accessories", + "data": "0x0018131c0e010003c1010002c1019702c101c1019701c1019701c101c1029702c1010003c10100" + }, + { + "filename": "41-saga-saga-accessories", + "data": "0x0017151d0e010002560200015601000100015602000156010001560256020001560100015607000156040001560100015601000156010001560100015603560100015601000156" + }, + { + "filename": "41-saga-yobuko-squid-accessories", + "data": "0x0017131c0e020001510200010003510100010003510100055101000123015101230100025101000251" + }, + { + "filename": "42-nagasaki-castella-accessories", + "data": "0x0018131b0f04ae0428042804ae" + }, + { + "filename": "42-nagasaki-gunkanto-accessories", + "data": "0x0016171f09020001010b000e00010001010c00050002620200016204000400036201000262040001000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" + }, + { + "filename": "42-nagasaki-milkshake-accessories", + "data": "0x0018121d0f014d02000157017101570357037f0100017f0100037f" + }, + { + "filename": "43-kumamoto-hitomojiguruguru-accessories", + "data": "0x001913190e014e01e101c001e1014e" + }, + { + "filename": "43-kumamoto-ikinaridango-accessories", + "data": "0x0018131b0e01000351010001d401b8028401d401d40129012a012901d4010003d40100" + }, + { + "filename": "44-oita-toriten-accessories", + "data": "0x0019121b0f01000293039301930200" + }, + { + "filename": "44-oita-yaseuma-accessories", + "data": "0x0018121a0e026002880288026002600288" + }, + { + "filename": "45-miyazaki-mango-accessories", + "data": "0x0018131a0e0100014601e601460100014601e6014601e601460100014601e601460100" + }, + { + "filename": "45-miyazaki-takachihokyo-accessories", + "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e10127010501270106010101050127012701050201013d010501270127053d0127" + }, + { + "filename": "46-kagoshima-senganen-accessories", + "data": "0x0016171f0907000201050005000101019d0500020103000461070001000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" + }, + { + "filename": "46-kagoshima-shochu-accessories", + "data": "0x0017121c0f0100012301000100013401000334017f01b7017f01b7027f0334" + }, + { + "filename": "47-okinawa-fish-accessories", + "data": "0x0017171d0d012401000224060001000224010001240500012401000224010001280100022801000600022801000128019b0100029b010001280100022801000100029b0100019b0500019b0100029b0600" + }, + { + "filename": "47-okinawa-satokibi-accessories", + "data": "0x0018161c0d0100011e010001c00100011e0100011e0100010001c00100011e010001c00100011e01c001c0011e010001c00100011e010001c00100010001c0010001c0010001c00100011e01000100011e0100011e0100011e0100011e0100" + }, + { + "filename": "47-okinawa-sukugarasu-accessories", + "data": "0x0018141d0e0200020102000100040101000101010e02b101ef01010101039d0201010004010100020002010200" + } ], - "images": { - "glasses": [ - { - "filename": "glasses-hip-rose", - "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" - }, - { - "filename": "glasses-square-black-eyes-red", - "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" - }, - { - "filename": "glasses-square-black-rgb", - "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" - }, - { - "filename": "glasses-square-black", - "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" - }, - { - "filename": "glasses-square-blue-med-saturated", - "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" - }, - { - "filename": "glasses-square-blue", - "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" - }, - { - "filename": "glasses-square-frog-green", - "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" - }, - { - "filename": "glasses-square-fullblack", - "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" - }, - { - "filename": "glasses-square-green-blue-multi", - "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" - }, - { - "filename": "glasses-square-grey-light", - "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" - }, - { - "filename": "glasses-square-guava", - "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" - }, - { - "filename": "glasses-square-honey", - "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" - }, - { - "filename": "glasses-square-magenta", - "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" - }, - { - "filename": "glasses-square-orange", - "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" - }, - { - "filename": "glasses-square-pink-purple-multi", - "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" - }, - { - "filename": "glasses-square-red", - "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" - }, - { - "filename": "glasses-square-smoke", - "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" - }, - { - "filename": "glasses-square-teal", - "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" - }, - { - "filename": "glasses-square-watermelon", - "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" - }, - { - "filename": "glasses-square-yellow-orange-multi", - "data": "0x000b17100703000626010006130300012602010223012601000113020102230113034201260201022301260142011302010223011301260200012602010223012601000113020102230113012602000126020102230126010001130201022301130300062601000613" - }, - { - "filename": "glasses-square-yellow-saturated", - "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" - } - ], - "accessories": [ - { - "filename": "01-hokkaido-crab", - "data": "0x0019161c0d0113010001130100011301000113010001130100011301000108011301080100011301000200051302000100011301000313010001130100" - }, - { - "filename": "01-hokkaido-melon", - "data": "0x0018131a0e014203000142012203420122010003220100" - }, - { - "filename": "01-hokkaido-sheep", - "data": "0x0018141d0e020001c1010e020003c10300010e0100010e0300040001c1010e020003c101000200010e0100010e0100" - }, - { - "filename": "02-aomori-jade", - "data": "0x0015141e090400010205000102050001020300010201000500017f0102011c01020101010004000101010001dd0102019b0100017f0700015203000b000b000b000b0002010900" - }, - { - "filename": "02-aomori-squid", - "data": "0x0018151d0f0300010802000100010102080101010002000208020001010100010801330200010001010123013301000101010101000101010001010100" - }, - { - "filename": "03-iwate-egg", - "data": "0x0018141b100100020101000101021e01010101021e0101010002010100" - }, - { - "filename": "03-iwate-fujiwara", - "data": "0x0017141c0f0100012303000200012302000200015d02000100026701cd0100046701310101013101670201" - }, - { - "filename": "04-miyagi-matsushima", - "data": "0x0016171f0c0600022901010100010104000301012903000b000b00025c0100025c01000129010003a205b106000300015c0100015c01290100025c0100030004b1010002b1010001a20a00020002a2010002290400" - }, - { - "filename": "04-miyagi-zunda", - "data": "0x0019131b10024e0100034e014e0101014e" - }, - { - "filename": "05-akita-fireworks", - "data": "0x0015171f0c060001c7010001c70200030001c101c7020001c1010001c10100050001c7010001c7020001c7020001c101c7050001c70100040001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c703000100014a010001c1010001c7020001c702000400014a010001c1020001c101000300014a0100014a05000400014a0600" - }, - { - "filename": "05-akita-hatahata", - "data": "0x0018141b0e011005000100015d021001230110011001000101025d01010300015d0200" - }, - { - "filename": "05-akita-raspberry", - "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e02b906b9020002b90200" - }, - { - "filename": "06-yamagata-lafrance", - "data": "0x0019131c10010001840100010001840122022201c601de0222" - }, - { - "filename": "06-yamagata-shogi", - "data": "0x0018131b10010001230100010002230123020001000223" - }, - { - "filename": "07-fukushima-akabeko", - "data": "0x0019141b0f01230133010101230100013301230133010101330133010001330200" - }, - { - "filename": "07-fukushima-train", - "data": "0x0018131b0f015802570158010e0285010e0485016a0258016a" - }, - { - "filename": "08-ibaraki-bellpepper", - "data": "0x0018121b0f01dd01e101dd01dd010f01dd01dd010f01dd0100010f0100" - }, - { - "filename": "08-ibaraki-natto", - "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" - }, - { - "filename": "08-ibaraki-rokkakudo", - "data": "0x0017171f09070001860400029107000186060004000161050001860300010001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d408000a0002910200050002910700" - }, - { - "filename": "09-tochigi-gyoza", - "data": "0x0018141b0e0100013401000134010001340134012501340125013401250188022501880225010001340100013401000134" - }, - { - "filename": "09-tochigi-lemon", - "data": "0x0018131c100152020103c701c7015201c7010101c701010352" - }, - { - "filename": "09-tochigi-shimotsukare", - "data": "0x0019131b0f016001930150014901500187019301600193014901ce0187" - }, - { - "filename": "10-gunma-akagiyama", - "data": "0x0019171b0c0100014901bf020002bf020001bf014901bf0149011b014901460149011b014901bf011b01460b06" - }, - { - "filename": "10-gunma-yakimanjyu", - "data": "0x0017161e0e04000236011101220300023401230101010003000136011101340136010002000134011101230101020001000134013601340101013602000100011101340123013403000100012201360134040001220700" - }, - { - "filename": "11-saitama-icicle", - "data": "0x0015171c090e0104000101010001010100010101000101010001010100040001e0010001010100010101000101010001010100060001010100010101000101010001e0010006000101010001e001000101030006000101030001e00300060001e0030001e00300060001e00700" - }, - { - "filename": "11-saitama-soka-senbei", - "data": "0x0018131b0f0100016001e6010002e601110160011103e60100011101e60100" - }, - { - "filename": "12-chiba-inubosaki", - "data": "0x0018171f0d0128010001280100042802000700010102000700010102000600040f04000154010104b105000254010102b103000354010102b101000354010103b10300" - }, - { - "filename": "12-chiba-peanuts", - "data": "0x0018131b100100016001d8010002600260010001d801600100" - }, - { - "filename": "13-tokyo-tower", - "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" - }, - { - "filename": "13-tokyo-yamanote", - "data": "0x0018141c0f010001c0010101c00100010103bc010101c003bc01c00101010001bc01000101010001c0010101c00100" - }, - { - "filename": "14-ibaraki-natto", - "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" - }, - { - "filename": "14-kanagawa-baybridge", - "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010001a201a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" - }, - { - "filename": "14-kanagawa-yacht", - "data": "0x0018141c100100015402000254014301000254024302000243037f0100" - }, - { - "filename": "15-nigata-edamame", - "data": "0x0019141b0e0200014e0200014e0100014e01c00100014e01c0011e01c00100011e01c00100" - }, - { - "filename": "15-niigata-riceear", - "data": "0x0018131d0f02000128010001000128020001c001280100012801c001000128010002c0020002c00200" - }, - { - "filename": "16-toyama-kutabe", - "data": "0x00031a17010d00060e06000b000a0e04000400010e04000e0e02000300010e04000f0e02000300020e0300100e01000300030e0200050e0501060e01000400070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e0401030e0a0e0701010e0401030e0a0e0501020e0501030e0a0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e01000500010e1300" - }, - { - "filename": "16-toyama-shiroebi", - "data": "0x0018131a0e0400010e010002ba010e01ba01ba0400" - }, - { - "filename": "16-toyama-tateyama", - "data": "0x0019171c090100017f020001a2017f0300027f01a20100017f027f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" - }, - { - "filename": "17-ishikawa-kotoji", - "data": "0x0018131c0e02000172020001000372010002000158020001000158010001580100015803000158" - }, - { - "filename": "17-ishikawa-kutani-kaga-gosai", - "data": "0x0018121a0f0118010f01c401a201e0018001c4010f0118" - }, - { - "filename": "17-ishikawa-oyster", - "data": "0x0017151c0e030001a0026b01a002000301016b01a0010001a0040101a001000401015d010001a00201015d01990200019901c301990400" - }, - { - "filename": "18-fukui-echizen-crab", - "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b80414020001000114010001b80214010001b80100" - }, - { - "filename": "18-fukui-yokan", - "data": "0x0018131b0e02000385020003850200038502570385" - }, - { - "filename": "19-yamanashi-fuji", - "data": "0x0017171e0c0600020b03000500020b01eb010b0200030007eb01000beb0b58010007580300020001e0015802e00500030002e0030002a90100" - }, - { - "filename": "19-yamanashi-grape", - "data": "0x0018121b0e0200019a01220100019a0112019a019a0112016e01120112016e01450100" - }, - { - "filename": "20-nagano-kappa", - "data": "0x0018131a0e020f0201010f0100013e0123013e01000100023e022a" - }, - { - "filename": "20-nagano-oyaki", - "data": "0x0018121b0e01b0011b02000157011b01b0011b0157028a0157010002570100" - }, - { - "filename": "21-gifu-gero", - "data": "0x0018141c0e020001010100010101000100010101000101020001c8013d0101013d010101c801c8043d01c8010004c80100" - }, - { - "filename": "21-gifu-gohei-mochi", - "data": "0x0019141b0d020004110100020101600111011a0111010102000260021a0100" - }, - { - "filename": "21-gifu-sarubobo", - "data": "0x0018131d0f010002230100012302440123017102440171010002230100010002230100017102000171" - }, - { - "filename": "21-gifu-ukaibody", - "data": "0x0015171f090592075402920592075402920592075402920592075402920292010002920754029202920100029207540292029201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" - }, - { - "filename": "22-shizuoka-fuji", - "data": "0x0017171d0c090002e0020003e0020001010300060002320101020003e0020005320100040001e10632020001dd04e1043204dd07e1" - }, - { - "filename": "23-aichi-oguratoast", - "data": "0x0018131c0e0293028401930193028401b80193019301b8028401930193018401b8018401930593" - }, - { - "filename": "23-aichi-tebasaki", - "data": "0x0017131a0e010001480300014804000548010003480100" - }, - { - "filename": "24-mie-iseebi", - "data": "0x0017151e0d02000132020001320200010001320100023201000132010001000132010002320100013201000132021802320218013201320100011802b40118010001320100011801000232010001180100030002b40300020001180132011801320200" - }, - { - "filename": "24-mie_mochi", - "data": "0x0019121a0f018401b80184018401b80184" - }, - { - "filename": "25-shiga-funazushi", - "data": "0x0018151a0e01420100013701000137020001420100014201000137010001370142010001420100014201000142" - }, - { - "filename": "25-shiga_hieizan", - "data": "0x0018171b090700020f05000500070f0200020f01000b0f028d01000b8d" - }, - { - "filename": "26-kyoto-daimonji", - "data": "0x0017161d0d0300011405000200011401490114040003140149031402000749020002000114014901140400021401490100014904140249030003490100" - }, - { - "filename": "26-kyoto-yatsuhashi", - "data": "0x0018131a0e02000157020001000157018601570100015702860257" - }, - { - "filename": "27-osaka-cheesecake", - "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b015707570100015701b7015701b701570100" - }, - { - "filename": "27-osaka-jinbezame", - "data": "0x0018161c0d010001a2020001a20400010601a2010002a20400020001a2010602a20106020002a2012302a20106012302a202000206025f01060200" - }, - { - "filename": "28-hyogo-akashiyaki", - "data": "0x0019141b0f02000260010001000160015d016001ae015d016002ae0160" - }, - { - "filename": "28-hyogo-tower-museum", - "data": "0x0017171e0c020001010800020001490200013f0500020001c20200026f0100013e0200020001490100013e016f023e0300020001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" - }, - { - "filename": "29-nara-kakinohasushi", - "data": "0x0019141c0f010001c0011b01c0011b0100011b02c0011b019501a2019501a2010002cc019701cc0100" - }, - { - "filename": "29-nara-narazuke", - "data": "0x0019121a0f03b801b8010001b8" - }, - { - "filename": "30-wakayama-mikan-kaki", - "data": "0x0018121a0f03c201c201e101c203c2" - }, - { - "filename": "30-wakayama-nankoume", - "data": "0x001a151b0d024e010002a60100029c024e010002a60100029c" - }, - { - "filename": "33-oakayama-mamakari", - "data": "0x0019151b0e01a2019d01a2019d01a201000157019d01a2019d01a2019d01060100050601000157" - }, - { - "filename": "33-okauama-muscat", - "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" - }, - { - "filename": "33-okayama-denim-jacket01", - "data": "0x0015171f090354049201000492025404540392010103920354055401920354019204540e540754010106540a54019201010192015402540100075403920154025401000454010102540392015402540100085401920254025401000b5402540100045401010654" - }, - { - "filename": "33-okayama-denim-jacket02", - "data": "0x0015171f0903540392040003920154045402920400029202540554019204000192035406540400045405540101040004540654040001540192010101920254010003540400015403920254010002540101040001540392025401000354040002540192015402540100035404000454025401000254010104000454" - }, - { - "filename": "33-okayama-denim-jacket03", - "data": "0x0015171f09035302540700025403530254070002540453025405000254015306530500035306530500010102530653050003530253010003530500010102530253010003530500035302530c0002530c0002530c00" - }, - { - "filename": "33-okayama-kibidango", - "data": "0x0018131b0f010002570100015703eb04eb010002eb0100" - }, - { - "filename": "33-okayama-momotaro", - "data": "0x00021914050200020c10000100030c1000040c1000030c0201040c0500040c020003000101060c0374060c010002000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c010012570100010012570100010012570100020001741057010003000557040c0757010003001057010004000e570200" - }, - { - "filename": "33-okayama-peach02", - "data": "0x0018151c0e0300015f03000200035f02000100055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" - }, - { - "filename": "33-okayama-retainer", - "data": "0x0015171f09054d010105040101024d054d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" - }, - { - "filename": "34-hiroshima-battleship", - "data": "0x0019171f09060001d70700030001d7010002d7070001d7020004d7010001d7010001d7020001d702d701000ad70100024801000b4802a201000ba202a201000ba2" - }, - { - "filename": "34-hiroshima-lemon", - "data": "0x0019131c0f0100022901220429042903290100" - }, - { - "filename": "34-hiroshima-oyster", - "data": "0x0018131c0e020001d901060101010001060288010101e9038801010106020c0101010003010200" - }, - { - "filename": "34-hiroshima-rice-scoop", - "data": "0x0018131c10036003600360010001600100010001600100" - }, - { - "filename": "34-hiroshima-shrine", - "data": "0x0018171f09040008770200050006bf0300060001bf020001bf0400050006bf0300060001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" - }, - { - "filename": "34-hiroshima-wani", - "data": "0x0017141d0d04560300015602000156030003000156030001000256040003000456070003000456" - }, - { - "filename": "35-yamaguchi-kintaikyo", - "data": "0x001b171f09010001ca020002ca010002ca010002ca010001ca01ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188013f023f01000b3f023f01000b3f" - }, - { - "filename": "35-yamaguchi-motonosumiinari", - "data": "0x0017171f090e53055303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" - }, - { - "filename": "35-yamaguchi-white -snake", - "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" - }, - { - "filename": "35-yamaguhchi-tsunoshima-big-bridge", - "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" - }, - { - "filename": "36-tokushima-awaodori", - "data": "0x0018131b0f0220015a01010100022301000100025f01000100025f0100" - }, - { - "filename": "36-tokushima-citrus-sudachi", - "data": "0x0018131c0e0100035c0100015c010101c70101015c015c01c7010101c7015c015c010101c70101015c0100035c0100" - }, - { - "filename": "36-tokushima-narutomaki", - "data": "0x0017141c0d02000301020001000101034f010101000101014f0301014f01010101014f0101014f0101014f01010101034f0101014f0101010005010100" - }, - { - "filename": "37-kagawa-oliveoil", - "data": "0x0017121c0f010001ac01000100015c0100035c015c01c6015c015c01c6015c035c" - }, - { - "filename": "38-ehime-dango", - "data": "0x0018131c0e0300021b020002a6011b0100027001a60100010001570170020001570400" - }, - { - "filename": "38-ehime-juice", - "data": "0x0018131f0c02000106018d01060200010602000140030001060140040601010106010003060100010606000142060001420600014206000142" - }, - { - "filename": "38-ehime-mandarin-orange", - "data": "0x00061a140604000c4204000200084201e1074202000100024201250f4201000242012511420142012512420142012512421442144214421442144214420100054203b30a42010002001042020003000e420300" - }, - { - "filename": "38-ehime-turt", - "data": "0x0018141c0e0100045701000157037002570157017001570270015701570270015701700157010004570100" - }, - { - "filename": "39-kochi-seared-bonito", - "data": "0x0019131b0f0378010001780294017801780394" - }, - { - "filename": "40-fukuoka-mentaiko", - "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf016a026a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" - }, - { - "filename": "40-fukuoka-umegaeda", - "data": "0x0018131c0e010003c1010002c1019702c101c1019701c1019701c101c1029702c1010003c10100" - }, - { - "filename": "41-saga-saga", - "data": "0x0017151d0e010002560200015601000100015602000156010001560256020001560100015607000156040001560100015601000156010001560100015603560100015601000156" - }, - { - "filename": "42-nagasaki-castella", - "data": "0x0018131b0f04ae0428042804ae" - }, - { - "filename": "42-nagasaki-gunkanto", - "data": "0x0016171f09020001010b000e00010001010c00050002620200016204000400036201000262040001000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" - }, - { - "filename": "43-kumamoto-hitomojiguruguru", - "data": "0x001913190e014e01e101c001e1014e" - }, - { - "filename": "43-kumamoto-ikinaridango", - "data": "0x0018131b0e01000351010001d401b8028401d401d40129012a012901d4010003d40100" - }, - { - "filename": "44-oita-yaseuma", - "data": "0x0018121a0e026002880288026002600288" - }, - { - "filename": "44-oita_toriten", - "data": "0x0019121b0f01000293039301930200" - }, - { - "filename": "45-miyazaki-mango", - "data": "0x0018131a0e0100014601e601460100014601e6014601e601460100014601e601460100" - }, - { - "filename": "45-miyazaki-takachihokyo", - "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e10127010501270106010101050127012701050201013d010501270127053d0127" - }, - { - "filename": "46-kagoshima-senganen", - "data": "0x0016171f0907000201050005000101019d0500020103000461070001000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" - }, - { - "filename": "46-kagoshima-shochu", - "data": "0x0017121c0f0100012301000100013401000334017f01b7017f01b7027f0334" - }, - { - "filename": "47-okinawa-fish", - "data": "0x0017171d0d012401000224060001000224010001240500012401000224010001280100022801000600022801000128019b0100029b010001280100022801000100029b0100019b0500019b0100029b0600" - }, - { - "filename": "47-okinawa-satokibi", - "data": "0x0018161c0d0100011e010001c00100011e0100011e0100010001c00100011e010001c00100011e01c001c0011e010001c00100011e010001c00100010001c0010001c0010001c00100011e01000100011e0100011e0100011e0100011e0100" - } - ], - "heads": [ - { - "filename": "01-head-01-hokkaido", - "data": "0x00021f1a0109000154140008000354130006000154010004541200090004541100090005541000090006540e000154090007540c000254090009540600015403000154010009000c540200025402000154020009000f540200015403000800105406000700125404000154070012540100025402000300025403001254040004000254010011540600040010540a00030010540b00020010540c000100035401000354020007540d000100025403000154040005540e00010002540a0003540e00020003540a0001540e0002000454180001000354010001541800010002541b00" - }, - { - "filename": "01-hokkaido-goryokaku", - "data": "0x00021b16040b0002540a000a00045409000900025401c001dd025408000800025401c001dd01c001dd025407000700035401dd02c001dd0254018706000500035402c001dd03c001dd0187035404000300035401c0015401c002dd03c0018702dd045402000100035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd025401000300025401c001dd02c00287029204c002dd01c00254010003000187015402c001dd03c0029203c001dd02c0025402000200015402870154018701dd08c001dd01c0025403000100015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c0025404000100025401c0025401c001dd02c004dd02c001dd01c0015404000300035401c001dd01c001dd04c001dd01c001dd01c0025403000400025401c002dd01c0045401c002dd01c0025403000400025401dd02c0065402c001dd025403000500055404000554040005000354080003540400" - }, - { - "filename": "01-hokkaido-ishikari", - "data": "0x00031c15040400067f0200017f0b000200037f0400017f0300027f0100017f07000100017f0200037f0200010d037f02e1010003a201e004000200027f0100017f020d06e103a203e004000400020d015702e101a2019501a201e103a2010d02e0019504000300020d015702a2019501ce029704a204e0010d03000200020d019501a201ce029703ce03a205e0020d02000100020d015704ce01cd02ce01cd02a206e00157020d01000100010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d010e010e010d01220957015d0657034e010d010e010e010d03010e570149024e010d010e0100010d0301015701f30c570249014e010d01000100010d01220101015701490d570149014e020d01000200020d034901570434025705010157020d02000300020d01490157023401af033405010157020d03000400030d033402af01340501020d04000600020d05340257030d060009000334030d0900" - }, - { - "filename": "01-hokkaido-tokeidai", - "data": "0x00011b14060a00010b0a00090002a101370900070002a1013701e9013701a10137070007000237030102370700080001e901010196010101e908000800015d01960201015d0800080002e9013702e90800080001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033702a102a1013702a10237010b01e903ca01e9010b01a1023702a10237023702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e901000100015d016f035d016f035d010b035d016f035d016f015d01000100080b013701a10137080b01000100035d010b035d02a10337035d010b035d0100010001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e901000100015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d0100010003e9010b04e9030b04e9010b03e90100" - }, - { - "filename": "02-aomori-apple", - "data": "0x00051915080800011b080004000455011b045504000200045502a6011b02a60455020001000655011e011b011e025501010355010001000a5501010455010011551155115511551155115511550100025501a60c55010001000f5501000200065502a60555020003000b550300050007550500" - }, - { - "filename": "02-aomori-dogu", - "data": "0x00021814080400080a04000400020a0236010a0236010a040004000136030a01ca020a013604000600020a0136010a06000500010a04ca010a05000500030a01ca020a0500010001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a01000500010a01ca030a01ca0500050001ca020a018a010a01ca05000500010a01ca010a01ca020a0500050006ca05000500060a0500050001ca040a01ca05000600010a02ca010a0600" - }, - { - "filename": "02-head-02-aomori", - "data": "0x00021b17040d00015409000c0003540400015403000c0005540100025403000c00085403000b00055401000254040005000154010001540300045402000254040004000554020001540500025404000500045407000354040006000454020001540300035404000500055402000254020003540400050005540200035401000354040005000f54030004001054030002001254030001001354030015540200010015540100010005540100055401000a5401000154060003540300085401000e0004540100015403000e00025407000e0001540800" - }, - { - "filename": "03-head-03-iwate", - "data": "0x00021717090900015404000600055403000200015401000754030002000a54020001000a54030001000b54020002000b5401000d54010001000c5401000d54010001000d5401000d540d5401000e540c54020001000c5401000c54020001000c54010001000a540300020006540600040004540600050001540800" - }, - { - "filename": "03-iwate-moriokamen", - "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" - }, - { - "filename": "03-iwate-nanbutekki", - "data": "0x00031b14060700050e09000400030e0500030e06000300010e0b00010e05000200010e0d00010e04000200010e0d00010e04000200010e0600010e0600010e04000300010e0100090e0100010e050003000d0e050002000f0e04000100110e03000100110e0100020e150e140e0100140e01000100130e01000100050e0163010e0163010e0163010e0163060e020002000f0e040003000d0e0500" - }, - { - "filename": "04-head-04-miyagi", - "data": "0x00031c1808060001540a00025401000500045408000254010003000954040002540100015404000754030001540100025402000500085401000454020004000d54030003000f54020004000d54030003000f54020004000d54030004000d54010001540100030008540100015403000254020003000954050001540200020009540900020008540a00020008540a00010008540b0009540b0009540b00020007540b00050003540c00060002540c00" - }, - { - "filename": "04-miyagi-datemasamune", - "data": "0x00011d150517000128150002280100120002010128030008000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e080003000528030103280192010e019207000100020e01000192010e0192020103280192010e0192010e0192010e0100020e03000100010e0100010e0192010e0b92020e0100010e03000200020e0292030e0192010e0192010e0192030e0192020e04000200030e0192020e0192020e0192020e0192020e0192020e04000300010e01920188010e0192030e0192030e0192020e019205000300010e01920c880192010e05000300010e01540c880154010e05000300012801540c8801540128050002000128010e01540788016004880154010e012804000200020e01540788016004880154020e040001000128020e01540788016004880154020e012803000100030e01540588026004880154040e03000200030e01540388042303880154030e04000400020e025406880254020e0600080006540a00" - }, - { - "filename": "04-miyagi-tanabata", - "data": "0x00041c160406000de1010001bf0300050001e1010001010400010104000101010002e1010001560100040001e1020001010400010104000101020001c701e10200030001e102000356020003bf020003c7030001bf0100020001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c7020001560100010001e10300055605bf05c70400010001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" - }, - { - "filename": "05-akita-akitainu", - "data": "0x00031a14021100012b06001000022b010105001000032b020103000f00042b01010123020101800e00042b06010c00062b0301025f01000b00072b0501015f0a00092b0201030009000b2b010103000200040103000b2b0101030001000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b050001000201032b0101052b020102000101022b05000200040101000101042b010103000201012b05000800032b0301030003010400" - }, - { - "filename": "05-akita-magewappa", - "data": "0x00041a15040200108e0400010012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de0200010001de0788016001880184068801de0300020007de01d801de018406de04001600030012c90100020014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de018803000888016001880184078801000400018e01de018e02de018e04de018e02de018e01de018e0200" - }, - { - "filename": "05-akita-namahage", - "data": "0x00021a16040700014109000141040007000241070002410400080002410500024105000600062301000523040005000123060e0123050e0123030004000123010e0623010e0523010e0123020003000123010e0123010e0123040e0123040e0223010e0123010003000123010e0123010e022307410323010e0123010003000123010e0123010e014103230318032301410123010e0123010003000123010e0123010e034102230141022303410123010e0123010002000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e0123010001000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e0123010001000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e0123010001000123010e0123010e012301410101012301cf041801cf0123010101410123010e0123010001000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" - }, - { - "filename": "05-head-05-akita", - "data": "0x00031617090300055403000254040009540400095403000a5403000954010002000a540100015401000a5401000d5403000854020004000854010004000754020004000754020004000754020004000654030003000754030003000754030002000954020002000a540100040007540200050007540100070003540300" - }, - { - "filename": "06-head-06-yamagata", - "data": "0x000318180a05000254070005000454050004000754030004000854020004000954010003000b5402000c5401000d5401000c5401000e5402000c5402000c5404000954010004000854020004000854020002000a540200020009540300020008540400020007540500020007540500030006540500060003540500" - }, - { - "filename": "06-yamagata-hanagasa", - "data": "0x00021b170508000641080006000241065702410600040002410a5702410400030001410a5701320141025701410300020001410157013201410132025701c603570132024101320257014102000200014101570441025701dd025703410132014101570141020001000141015701320341025701dd045701410132014103570141010001000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd085701410141035701c6035702dd0341085701410141075701dd024101320241035701410132025701410141035701410357024101320141013201410257044101570141014102570132024102570332024101320141015702410132014101570141014102570141013201410132025702410232014102570132024101320157014101000141015701320241013203570341015701280257023201570141010001000141025701410132075701280123012804570141010002000141035701c6075701280123012802570141020002000141065701320341013201570128012301280157014102000300014105570141013201410132035701280157014103000400024104570141013204570241040006000241065702410600080006410800" - }, - { - "filename": "06-yamagata-zaookama", - "data": "0x00041d14040a00072702010227040007000b2703010127030005000e27024c0101012702000400022701010c2704010127010003000127020103270a010127024c0101012701000200020102270301073004010127030101270100010102270201019b0b3002010127024c01010127022703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f3003010127020001000201014c01010e3003010127020002000101014c03010a300201014c01010127030003000201014c0b01014c0101014c0101040005000401014c0101014c0101014c0301014c01010600" - }, - { - "filename": "07-fukushima-peach", - "data": "0x00041d16040500020f12000300030f0197010f0100030f0d000100060f0297030f0100020f0a000100030f05b90297030f0197010f09000100020f04b9011902b9020f0297030f0100020f05000100020f04b9011903b9040f0197010f0100030f04000100010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297020f040f05b9040f05b9011902b9040f0d0f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f01000600020f0100050f03b9021903b903000a00030f04b9011903b904000a00010f020003b9011904b90400100003b90600" - }, - { - "filename": "07-fukushima-tsurugacastle", - "data": "0x00011a140309000162050001620700080001620700016206000900078907000900078907000800098906000900020103080201070007000b89050006000d89040007000201017f0108010101890101017f0108020105000600068901010689040005000689010101a301010689030006000101017f010107890101017f01010400050005890201017f0201058903000300019406890501068901940100020002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" - }, - { - "filename": "07-head-07-fukushima", - "data": "0x00051b17030e00035407000e0006540200015401000800035403000654020002540700055402000a5406001254050013540500135403001554185401001754010017541854020016540200075402000d540100065406000a540100010003540a00095401000e00095401000f000354010002540300100001540700" - }, - { - "filename": "08-head-08-ibaraki", - "data": "0x0003191807090001540300015404000900025401000554010009000754020009000754020008000854020008000754030008000754030008000654040008000654040007000754040004000a54040002000b54050002000b5405000e5404000e54040002000c54040003000c54030003000c54030004000c5402000700045403000254020010000154010011000154" - }, - { - "filename": "08-ibaraki-anglerfish", - "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" - }, - { - "filename": "08-ibaraki-hananuki-ravine", - "data": "0x00041c1502040001c006000136019701c601d80197013602bf0700020001c0060001bf01000136019701d801bf01970136060001bf0200060001bf010001bf0100029704d802970800040002c604000136019701d8019702d801970136020002bf0400070001c601000197013601d80188019701bf018801d8013601bf030001c0030009000136019702d8029702d801970136010001c0020002c00100010002c0020001c0010001bf01000136019701bf018802970288019701360700030001c0010002bf01000197013603d8029703d8013601970600080002970388029703880297020001c6010001bf010007000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf0300010002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d802970400010002bf02000136029705d8029705d802970136030005000136019701d802bf02d802bf019701d802bf03d801c60136010001bf01000400019701360197038802bf0188019702bf048801c60197013602bf0100040001970136019706d8029706d8019704bf170002bf0100" - }, - { - "filename": "08-ibaraki-rocket", - "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a26010101000500057f0b2601000400057f0b2602000300057f0b26030002000155047f0b260400024201000155027f020109260500040001550100030107260600030001420100020d0301032601290126017f060002000142010001730100020d03010326017f0700050001420100010d0100027f0201017f08000600017301000155027f0101017f0900030001730200024201000155027f0a000a0001550b00" - }, - { - "filename": "09-head-09-tochigi", - "data": "0x000418160709000454040007000854020005000b54010003000d54010002000e54010001000f54010002000e54010001000f54010001001054105401001054010003000d54010002000e54010002000e54010002000d54020001000e54020002000954010001540400030006540800060003540800" - }, - { - "filename": "09-tochigi-sanzaru", - "data": "0x00041e1401050003340500043404000434040003000634030006340200063403000300023401af013401af02340100023401af013401af063401af013401af013403000200013401b805af033405af043405af013402000200013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af01340200020002b805af01b8023404af01b801af01340135013405b803000300023401af020e01af01b8023401af04b80135033402b8010e02b8013402000200033403af0434013504b801340135033402af04340100010001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af013403000100063402af0100023405af0135033403af01340400010003340235013401af0234020005af0135043401af013405000200013401350734010005af053401350234040002000b3403af013506340135023403000100063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" - }, - { - "filename": "09-tochigi-strawberry", - "data": "0x000416150602000122020001c0010001c008000300012204c003710500020001c0022204c004710300010005c00571010102710200020002c006710101017101010171020002c0017101c0077101010371010001000e71010001000f7101000f7101000f7101000f7102000e7102000d71010003000c710100040004710146027101460371010005000471024603710200070007710200090004710300" - }, - { - "filename": "09-tochigi-toshogu", - "data": "0x00031f1402060001c70f0001c70600070003c7022901c7012908c70700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30700060002c702e3012701e3012701e3012701e3012701e3012702e302c706000500012902e301c7012901c701e302c7015402c701e303c702e301c705000600016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0600050001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290500090001c7027f01c7037f01c7027f01c70900070002c70154014101c70154014101c70141015401c70141015402c70700010001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014102c701c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" - }, - { - "filename": "10-gunma-kusatsu", - "data": "0x00041d15030600020d0200020d0200020d0200020d06000400013201da028802da028802da028802da028801da013204000400013201da023202da023202da023202da023201da01320400050001da025702da025702da025702da025701da0500060002570200025702000257020002570600060002570200025702000257020002570600030003e6025702e6025702e6025702e6025703e6030003000193013e018d0257023e0257023e0257023e02570101013e0193030003000193013e0101033e018d023e018d033e018d033e018d013e0193030003000193013e028d053e018d043e028d023e018d0193030003000193023e018d013e018d013e018d023e018d013e028d013e018d033e0193030003000193018d053e018d023e018d053e018d013e018d0193030003000193013e018d033e018d063e018d013e018d023e010101930300030001930101033e018d033e018d023e018d023e018d013e018d013e0193030003000193033e018d033e047f018d013e018d043e019303000100027f0193033e018d033e017f023e018d033e027f023e027f0100017f017f0200017f03e6017f0ce6027f01e603000100027f0100027f1400" - }, - { - "filename": "10-gunma-negi", - "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030001dd03dd0100034c03dd0100034c010003dd04dd034c04dd034c03dd0100010003dd034c04dd024c04dd0100010003dd034c04dd024c03dd0200010004dd024c03dd024c04dd0200020003dd024c03dd024c03dd0300030002dd024c03dd024c02dd0400050001dd014c02dd024c01dd06000500074e06000600054e0700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c103ca01c10700060001c1010101c1010101c107000700010101c101010800" - }, - { - "filename": "10-head-10-gunma", - "data": "0x00021c17060c00015409000a00035409000a000454080009000854050009000754060007000a54050005000b54060002000e54060001000f5406000100105405001254040011540500115405000100025401000d54050004000c54060004000e5404000300095401000754020004000754070003540100030008540a000154040005540d00040003540f00040002541000" - }, - { - "filename": "11-head-11-saitama", - "data": "0x00071c1403080002540f00080005540c000700095401000254060007000e54040005001154030003001354030001001654020017540200185401001854010001000554010012540300025405000f540d000c540e000254020002540500" - }, - { - "filename": "11-saitama-tokinokane", - "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" - }, - { - "filename": "11-saitama-whitetiger", - "data": "0x00031a1406020002010b00020103000100040109000401020001000101015f020109000201015f010102000201025f020107000201025f01010200090103e3060102000100030101e3050101e3050101e3010102000200010101e3040101e3030101e3040101e302000200040101e3020101e3010101e3020101e303010200020010010200020001e30e0101e30200020010010200020010010200020001e30e0101e30200020010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" - }, - { - "filename": "12-chiba-loquat", - "data": "0x0003181508070002c9070006000426060004000826040003000a26030002000c26020001000e26010001000e260100102610261026102610261026102601000f26010006260186012601860526010002000626018605260200040008260400050006260500" - }, - { - "filename": "12-chiba-nanohana", - "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a02000300012a0100012a0100022a0100022a0100012a0100022a0100022a06000200012a0100122a0100012a02000200172a01000100062a0122112a01000100152a0122022a01000100032a0122152a1a2a042a01c0102a01c0042a032a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a02000100012a020001c0102a01c0012a0100012a0100" - }, - { - "filename": "12-head-12-chiba", - "data": "0x000219170801541000010001540f00010002540e000200035404000354050002000c54030001000e5402000100105402000b540400020001540100085405000500065406000400065407000300075407000200085407000100095407000a540700020008540700010009540700010008540800010004540c00020002540d0004540d00010002540e00" - }, - { - "filename": "13-head-13-tokyo", - "data": "0x00091c140301000254160007541200010009540f0001000a540300025402000654010002001654010003001654040015540600135407000f54010001540100080006540300055403000c0003540400045402000d000154070002540200" - }, - { - "filename": "13-tokyo-station", - "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" - }, - { - "filename": "13-tokyo-tower" - }, - { - "filename": "14-head-14-kanagawa", - "data": "0x00041d160306000254120007000254110007000354060004540600070007540300055404000600095402000754020006000a54010009540400155401000200145404000100165403001654040002001454040002001454040003000c5401000654040003000754090004540300020006540c0005540100020005540d0004540200020005540e0004540100030005540c000254040004000254010001540d0002540300" - }, - { - "filename": "14-ibaraki-anglerfish", - "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" - }, - { - "filename": "14-kanagawa-curry", - "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d4043502010100030102000400020105d40535020106000300030105d40635020105000300020106d40635020105000300020106d40635020105000300030105d40635020105000400020104d40635020106000400030103d40635020106000500030101d401860142016003350201070006000401033503010800070008010900090004010b00" - }, - { - "filename": "14-kanagawa-king", - "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" - }, - { - "filename": "15-head-15-niigata", - "data": "0x00021b170413000254020013000254020009000154090004540800015409000554070002540900035402000700035407000454020008000254050006540200070002540400095401000c00095402000c00095402000c00085403000b00095403000a000854050009000754070008000954060007000954070004000d54060002000f540600085402000554010001540600010002540100035403000454090001000154090002540a000b0001540b00" - }, - { - "filename": "15-niigata-sasadango", - "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" - }, - { - "filename": "15-niigata-tulip", - "data": "0x00041a1506090002b90900080004b90800010002b9040006b9040002b9010004b9030006b9030004b905b9010008b9010005b914b914b914b914b914b914b914b9010012b90100010012b90100020010b90200020009b9016a06b90200040006b9016a05b90400060008b90600" - }, - { - "filename": "16-head-16-toyama", - "data": "0x00051b17050300045409000454020002000454090006540100020003540a00065401000100055408000854010007540600085401001554165401001554165401001554010014540100010014540100010013540200145402000b54010001540100065402000854080003540300010006540f0001000154030002540f00050001541000" - }, - { - "filename": "16-toyama-blackramen", - "data": "0x00041b150508000633080006000a33060004000e3304000300053306850533030002000433038502d3058504330200010003330385018803d303e4048503330100010002330285018803d302010222010103e402850233010003330285018802d3070103e40185033302330285018803d3082202e40285023302330285018802d3092203e4018502330233028503d3080104e4018502330333018504d3062204e40185033301000233028504d3040104e4028502330100010003330185018805d3078503330100020003330185018803d3028503e402850333020003000333048503e40385033303000400043306850433040006000a330600" - }, - { - "filename": "16-toyama-kutabe" - }, - { - "filename": "16-toyama-raicho", - "data": "0x00031d15021200047f05001100077f03001100047f020e017f010e02000600010f0a00077f020e0100050001dd010f01dd0800077f0400050001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f04000100010e017f0200010f01dd017e107f03000100017f020e157f02000200177f02000200177f02000300167f02000300157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e0300010002dd017e010f0300027f0400027f0500010f017e02dd02000300010f037e0100027f010e0300027f010e0300027e010f0400" - }, - { - "filename": "17-head-17-ishikawa", - "data": "0x00031517080a0003540700055401000600065401000600045403000500035405000500035401000154030006000454030006000454030007000154050006000254050006000154060005000354050005000254060004000454050003000454060002000554060001000754050007540600010007540500020005540600050002540600" - }, - { - "filename": "17-ishikawa-curry", - "data": "0x00071c1504060001010172020108720600040003720ab8037204000300027201b80225013403250234022502b8022201720300020002720325013401250134012502340125013402250422017202000100027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b80172017201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b80172027201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b802720100020003720fb8027202000300037204b8036406b8027203000500037208b80372050007000a720700" - }, - { - "filename": "17-ishikawa-jibuni", - "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b8032302000300032301de0123038301b8012301de032303000400032301de052301880223040006000223018801de022301de01230600" - }, - { - "filename": "17-ishikawa-kinpaku", - "data": "0x000518150705a6076d05ea03a60b6d03a60aa6066d01ea09a6086d07a60a6d10a6016d11a611a604ea0da611a6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" - }, - { - "filename": "18-fukui-dinosaur", - "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b02000b0001e8011b01e8011b01e8011b01e80200071b011b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a03000100011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a04000200021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a04000300041b01e8011b01e8051b01e8061b05000400022a071b01e8081b05000600022a051b01e8081b05000800012a091b022a0100041b02000900032a021b01e8032a09000c00031b0c000d00021b0c000e00011b0c000e00021b0b00" - }, - { - "filename": "18-fukui-sabae-glasses", - "data": "0x00091c1206030004710800047103000100027102060201027104000271020602010271010001000171020603010106017104000171020603010106017101000171020603010306047102060301030601710171010603010406017102000171010603010406017101710301050601710200017103010506017101710201060601710200017102010606017101000171060601710400017106060171010001000271040602710400027104060271010003000471080004710300" - }, - { - "filename": "18-head-18-fukui", - "data": "0x00041a18020c0001540b000b0003540a000c00035409000b0005540100025405000a000a5404000a000d54010009000d54020009000d5402000a000d5401000a000e540b000d540c00035401000254060009000154010004540900090001540100015401000254090006000154020003540c00070005540c000100015401000154010006540d00025401000554010001540e0008541000010007541000020004541200" - }, - { - "filename": "19-head-19-yamanashi", - "data": "0x00051a1806040002540e00030003540e00010001540100065401000354070001000f5404001054040001001054030012540200145401001254010001001354020012540200115401000100105403000200055401000754050001000654030005540500010006540d00030003540e00040002540e00040003540d00050002540d00" - }, - { - "filename": "19-yamanashi-shingen", - "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" - }, - { - "filename": "19-yamanashi-wine", - "data": "0x0001161409050003e705000500035b0500050003e70500050003e705000500037905000200011b082202000100011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" - }, - { - "filename": "20-head-20-nagano", - "data": "0x000319170b0b000254010006000154020005540500095405000754020005000754020004000754030003000854030003000a54010003000954020002000b54010002000a54020003000a5401000200085401000354095404000154010008540500020006540600020007540500030005540600030005540600020006540600020004540800" - }, - { - "filename": "20-nagano-matumotocastle", - "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" - }, - { - "filename": "20-nagano-wasabi", - "data": "0x0003161505040002220100024e08000100024e01000222034e08000122024e0222034e09000122034e0122014e0222090001000122034e032201c90122070002000622014e022206000200013f022201c9014e042206000200013f014e0622014e01c90500030001c90922040003000a22040003000422014e062203000400013f014e0522014e0322020005000922014e020005000b22010006000122014e082201000700042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" - }, - { - "filename": "21-gifu-gassho-summer", - "data": "0x00021d14040b0003d80b000b0003d80b000a0002d8018402d80a00090002d8038402d80900080002d80184037c018402d80800070002d8028402010123028404d80500070001d8028401ca0201012301ca028401d80700060001d8028407ca028401d80600050001d80184057c01ca057c018401d80500040002d8018401ca030103ca030101ca018402d80400030002d8028401ca030103ca030101ca028402d80300030001d802840dca028401d80300020002d8018402ca020101ca020101ca020101ca020102ca018402d80200010002d8018403ca020101ca020101ca020101ca020103ca018402d80100010001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" - }, - { - "filename": "21-gifu-gassho-winter", - "data": "0x00021d14040900070109000800030103d8030108000800030101d8018401d8030108000700030101d8038401d8050105000600030101d80184037c018401d8040105000500030101d8028402010123028401d8010102d805000400030101d8028401ca0201012301ca028401d80200010104000300030101d80184030103ca0301018401d8030103000200030101d80184050101ca0501018401d8030102000200030101d801840bca018401d8030102000100030101d802840bca028401d8030101000100020101d802840dca028401d802010100030101d801840fca018401d80301020101d8018411ca018401d80201010101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" - }, - { - "filename": "21-gifu-keichan", - "data": "0x00021d1a03040002061400060004060500050606000a000106090003060300040006060100017d029c0900010602000300010605000322017d029c0200060603000400090601d2019c010001060900030003ca0123022203e901220106017d029c0106022303ca0300020002ca0223022201e9037d01220106027d019c017d0106010c022302ca0200010002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012302ca02ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c0123012301ca0123010c0322047d029c0322027d029c017d0122010c012301ca01230123010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012302ca02ca0123010c0422017d029c037d0422027d0222010c012302ca03ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca0100020004ca0e2304ca0200030014ca03001a001a001a000c00013d0101013d01010a000d00013d0100013d0a00" - }, - { - "filename": "21-gifu-ukai", - "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f5407000300105407000300105407000200115407000200045401920c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c020101f406000100030c0601010c07a6010101f406000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" - }, - { - "filename": "21-head-21-gifu", - "data": "0x00031817060c0001540100025402000b000754070002540100085407000a54010007000a54010006000a54020006000b54010006000a5402000700085403000800065404000100025401000b54030001000f5402001054020001001054010002001054020010540300055402000754010003000454040006540100020004540600015401000254020002000154010002540c00050001540c00" - }, - { - "filename": "22-head-22-shizuoka", - "data": "0x00031d14050a0001540d00090002540d000a0001540d00090002540400015408000a000154040003540200035401000800035401000154020008540100060007540200075402000500095401000754020005000c540200055404000c5404000354010003000c540600035403000d5402000554010002000c54040006540c54070005540d540500055401000c5407000454010004000254020003540700045402000a000154080002540300" - }, - { - "filename": "22-shizuoka-oden", - "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" - }, - { - "filename": "23-aichi-hitsumabushi", - "data": "0x00071a15060800040e08000500050e0134040e05000300040e0234012b013401350134040e03000200010e010b033401350234012b023401350334010e02000100010e010b0134012b03340135053401350234010b010e01000100010e01350234012b0634012b033401350134010e0100020e0834013506340135020e020e023401350234012b033401350334012b0234020e020e010b023401350b34012b020e030e010b093401350334030e050e023401350234012b03340135050e0100080e0234080e01000100120e01000200100e020004000c0e0400" - }, - { - "filename": "23-aichi-tenmusu", - "data": "0x00011b1406090001ce010001ce0900090003ce0900090003ce0900090003e70900070001bc05e701bc0700060001bc010105e7010101bc0600050001bc010107e7010101bc0500050001bc020101e7030101e7020101bc0500040003bc070103bc0400040005bc030105bc0400030007bc010107bc030003000fbc0300020010bc0300020011bc0200020011bc0200020011bc0200010013bc0100010007bc010101bc010101bc010107bc010015bc15bc" - }, - { - "filename": "23-head-23-aichi", - "data": "0x00041c170505000154110001000154010004541000010007540f0001000854020002540300015406000e54010002540200025402001754175401001554010001000354010011540100020001540100115402000400105403000300115403000300035401000d540300020001540100015401000d5404000400015402000a540600030002540500015402000354070004000254060001540100025407000b000554070007000154010005540900060005540c00" - }, - { - "filename": "24-head-24-mie", - "data": "0x000318170b06000254050007000254040007000354030006000354040005000454040002000654050001000654060002000554060002000754040002000854030004000854010002000b540200075401000254010003000554050002000354080002000254090003000254080001000354090003540a0002540b00010001540b00" - }, - { - "filename": "24-mie-ninja", - "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" - }, - { - "filename": "24-mie_jingu", - "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" - }, - { - "filename": "25-head-25-shiga", - "data": "0x000316160807000254050007000354040006000554030003000154010007540200030003540100015401000354020003000354030004540100010004540500035401000654040003540100010005540300035402000100045403000454020001000354020007540100010003540300075402000154020009540100025401000a540100025401000954010001000c54010002000a540200020009540300040003540700050002540700" - }, - { - "filename": "25-shiga-blackbass", - "data": "0x00021d18021700018d0100018d01001700038d01001600058d1700048d0a00016b0c00038d01000900036b010003c50157012303c50100038d02000800036b02c5011e02c5025702c50100028d04000500026b0100016b02c5031e06c50100038d03000500036b01c5041e01c5011e05c5028d05000400036b01c5031e01c5041e02c5010101c5030104000400026b01c5031e01c5031e0101016b060105000400016b01c5061e0201016b0201011e03010600050001c5031e01c5011e0201016b0201031e02010600050001c5041e0201016b0201031e02010700050001c5021e01c50201016b0701011e0700040001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010e000100066b0300031e0e000300046b0300021e0f000300046b14000400036b1400" - }, - { - "filename": "25-shiga_hikonecastle", - "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" - }, - { - "filename": "26-head-26-kyoto", - "data": "0x0005171507030003540a000154010004540a0005540b0006540100025407000300045401000154070003000654070001000a54050002000b54030003000154010008540300050008540300080005540300080005540300070007540200090001540100035402000b00045401000c0004540c00025401000154" - }, - { - "filename": "26-kyoto-kinkaku", - "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" - }, - { - "filename": "26-kyoto-kiyomizu", - "data": "0x00061a14051584010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100" - }, - { - "filename": "27-head-27-osaka", - "data": "0x000616150b05000254010001540200060004540100060005540600055406000554060005540500065405000554010006000454010006000354020005000554010005000654020001540100075403000754010001000554050003540800" - }, - { - "filename": "27-osaka-takoyaki", - "data": "0x00021e15020b0001af010001af020001af027d0900090001af027d01af0100017d01af010002af09000600017d010001af017d03af017d01af020b017d010003af060003000157020001af017d02af017d01af020b01af0134017d013401af027d0700040001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0600050001570100010b02af01dd01af013402af017d0134010b03af010001af05000600015701af023401af010b02af010b023402af020b01dd01af050006000134010b02af010b0234010b0234020b0111010b0234010b050005000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f0100050001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f010005000334010b0134020b0b60050005000234020b0134010b01110260039303600393050005000134010b0234010b013401110b6005000600040b0111046002930560060006000134010b0234011101930134019305600293016006000200037f0200023402110160053404600700017f0300017f0300013401110260013403600293026008000100037f03000234011101930134076009000b00036003930b00" - }, - { - "filename": "27-osaka-tower", - "data": "0x000216150b05000195050004000395040002000195063c020003000195043c0300040003c604000100016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f01000300019501c6019501c6019503000300019501c6019501c6019503000300019501c6019501c6019503000200029501c6019501c6029502000200029501c6019501c6029502000200029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f010001000195016f019503000195016f019501000100016f019505000195016f010001000195070001950100" - }, - { - "filename": "28-head-28-hyogo", - "data": "0x0004181d07040005540800020007540800030007540100015405000300095405000300095405000400065407000400065407000400085401000154030002000c54030003000e5402000f5401000f5401001054010011541154010010540100025405000754010001540a000454030011000a0001540600090001540700080002540700070003540700060005540600070003540700070001540900" - }, - { - "filename": "28-hyogo-himejicastle", - "data": "0x00021a15010b00017f0700017f05000c0007e006000c0001e0019d01e0019d01e0019d01e006000b0002e0019d0301019d02e005000c00070106000c00010101920101019d01010192010106000800017f020001e0019d01e0019d0101019d01e0019d01e00200017f0200090001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e003000700017f02000101029d01010192010101920101029d01010200017f01000800017f01e0019d0201019d03e0019d0201019d01e0017f02000300017f040002e005010192050102e0020003e00500017f01e0010101920101019201e0010101e00192010101920101027f020001e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d01000192010101920300037f040105920501020001e0019d01e0019d01e00100037f010101920101079201010192020102000101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d019d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f01000192010101920101019201010192100102000401019d01e0019d01e0012b0250012b0350012b0250012b0350012b0200012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" - }, - { - "filename": "28-hyogo-tajimaushi", - "data": "0x0004191504010002b50f0002b5010002b5110002b502b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b01000300010b0d0d010b0300150d150d150d0100130d01000300100d020004000c0d05000400060d0ab501000400050d0bb501000400050d05b5020d01b5020d01b501000400050d0bb501000400050d02b5070d02b5010009000ab50200" - }, - { - "filename": "29-head-29-nara", - "data": "0x000316140b02000154080002000254010002540100015402000200075402000100075403000100075403000200085401000200095401000854020001000854020002000754020003000654020001000854020001000854020008540300095402000100065404000100055405000100015401000154010001540500" - }, - { - "filename": "29-nara-ashura", - "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" - }, - { - "filename": "29-nara-deer", - "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" - }, - { - "filename": "30-head-30-wakayama", - "data": "0x0004161606080002540600015402000754060001000a5405000200085406000100085407000100085407000200065408000100085407000a54060009540700020007540100015401000154030003000a54030005000954020006000954010005000b54060009540100070009540900055402000c0001540300" - }, - { - "filename": "30-wakayama-danjogarandaito", - "data": "0x00011914080800019508000800012108000800019508000800012108000700012701e301270700060001e3012701e3012701e30600040001e3012701e3012701e3012701e3012701e30400020001e3012701e3012701e3012701e3012701e3012701e3012701e3020002000db40200050001b4010101b4010101b4010101b40500050007b405000500012801dd01b401dd01b401dd012805000400090104000100012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b40300030001b401dd01b401dd01b401dd01b401dd01b401dd01b4030003000bb40300030001b4010101b4010e01b4010e01b4010e01b4010101b403000100047f07e0047f0100" - }, - { - "filename": "30-wakayama-nachifall", - "data": "0x000216150a0100036102e001610101046101610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e00301026202000400010101e0010101e004000400020101e001010400040001e0030104000500010101e001010400050001e0020104000500030104000500020101e00400050001e0010101e004000500010101e001010400050003010400050003010400050003010400030001010100016201010162010102000101050001010162020103000500020101000101010001010100020001010100010101000101010001010300" - }, - { - "filename": "31-head-31-tottori", - "data": "0x00091c13061200025402000100015404000254040002540200045402000200015401001054020003001254010002001354010002000554010004540200085402000554030001540400075406540a00035401000254010005540a00015405000454120002541400" - }, - { - "filename": "32-head-32-shimane", - "data": "0x000319190710000254100002540e000154030012001200120012000e00035401000b00055402000a00075401000b0006540100090008540100080007540300070008540300050007540600040006540800030008540700020004540c0005540d00010004540d0004540e00010003540e00010002540f00" - }, - { - "filename": "33-head-33-okayama", - "data": "0x00031b1606050002540400025408000500045401000554060004000c540400015404000c540100035401000200125401000100125402001354020001001154030012540300125403001254030001001154030001001254020001001054040001001154030002000f54040002000a5402000254050003000b5407000300035402000554080004000154040001540b00" - }, - { - "filename": "33-okayama-denim01", - "data": "0x00061815090a54042b01540799010c0299042b01990754019907540154059901540199015405990154015401f5035401f501540199015401f5035401f501540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" - }, - { - "filename": "33-okayama-denim02", - "data": "0x00061815090a92042b01920799010c0299042b01990792019907920192050c019201990192050c0192079201990792079201990792079201990792079201990792079201000792079201000792079201000792079201000792079201000792079901000799079d0100059d010101f6079d0100059d010101f6" - }, - { - "filename": "33-okayama-denim03", - "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca07920192050c019201ca0192050c0192079201ca0792079201ca0792079201ca0792079201ca079207920100079207920100079207920100079207920100079207920100079207ca010007ca079d0100059d014d01f6079d0100059d010101f6" - }, - { - "filename": "33-okayama-dog", - "data": "0x00031a1506010003260c00022602000100015703260a000226015702000100025703260800022602570200010003570c2602570200010002570e2601570200010003260601016a05010226020001000801036a0601020001000801010f016a010f06010200010003010d26010102000100112602000100052603570326035703260200010011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db018801001000025f0200" - }, - { - "filename": "33-okayama-horseshoe-crab", - "data": "0x00051815010a00088e0500090003d5098e02000800028e02ca01d5068e0101028e0100060001ca048e01ca01d5028e04c3018e0101018e01000700048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0100090003d5098e02000a00088e0500" - }, - { - "filename": "33-okayama-momotaro" - }, - { - "filename": "33-okayama-monkey", - "data": "0x00051a140605000aca050003000eca0300020010ca0200010003ca0601016a050102ca020001000801036a0601020001000801010f016a010f060102000100030106db01ca06db01010200010003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb0100020003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" - }, - { - "filename": "33-okayama-peach", - "data": "0x00041e15030d00015f0d000a00075f0a0007000d5f070006000f5f06000500025f01570e5f05000500015f0157065f01e5085f05000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400095f01e5095f04000400095f01e5095f04000400095f01e5095f040002000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f0322010002000322055f0382095f02220300040002220f5f02220400060002220b5f02220600" - }, - { - "filename": "33-okayama-pheasant", - "data": "0x0003191506019212000292110005920a540400010002920d54030002000f540200020002540601016a05010154020002000701036a0501020002000701010f016a010f05010200020002010cb901010200020001540eb90200020001540eb90200020001540eb90200020001540eb90200020001540eb902000200025407b9036d03b9020003000754096d03000854086d03000e540100016d03000e1d0200" - }, - { - "filename": "34-head-34-hiroshima", - "data": "0x00041c19020f000254010001540100035403000f00095402000e000a5402000d000b5402000c000c5402000d000b54020004000154010001540100015401000f540100020017540100030015540200020017540100020017540100010019541a54010019540100155401000354010005540100025401000954010002540200015401000200035404000a540200015401000154020002000254010001540300055405000354040003000154060002540300025409000a000154010002540c00090001541000080002541000" - }, - { - "filename": "34-hiroshima-manju-choco", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad02880385028802ad0400010005ad01880585028804ad0100010001ad05880585058801ad0100010001ad01880d85018801ad0100010001ad02880b85028801ad0100020001ad01880b85018801ad0200020001ad02880985028801ad0200020001ad01880b85018801ad0200010002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad0100020002ad02880785028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" - }, - { - "filename": "34-hiroshima-manju-custard", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288016d028802ad0500040002ad0288036d028802ad0400010005ad0188056d028804ad0100010001ad0588056d058801ad0100010001ad01880d6d018801ad0100010001ad02880b6d028801ad0100020001ad01880b6d018801ad0200020001ad0288096d028801ad0200020001ad01880b6d018801ad0200010002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad0100020002ad0288076d028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" - }, - { - "filename": "34-hiroshima-manju-koshi", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880180028802ad0500040002ad02880380028802ad0400010005ad01880580028804ad0100010001ad05880580058801ad0100010001ad01880d80018801ad0100010001ad02880b80028801ad0100020001ad01880b80018801ad0200020001ad02880980028801ad0200020001ad01880b80018801ad0200010002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad0100020002ad02880780028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" - }, - { - "filename": "34-hiroshima-manju-maccha", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288010f028802ad0500040002ad0288030f028802ad0400010005ad0188050f028804ad0100010001ad0588050f058801ad0100010001ad01880d0f018801ad0100010001ad02880b0f028801ad0100020001ad01880b0f018801ad0200020001ad0288090f028801ad0200020001ad01880b0f018801ad0200010002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad0100020002ad0288070f028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" - }, - { - "filename": "34-hiroshima-manju-tsubu", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad028802850180028802ad0400010005ad01880145028501450185028804ad0100010001ad0588024501800285058801ad0100010001ad018802800245018502800385018001450185018801ad0100010001ad02880180018501450480018501800285028801ad0100020001ad018802850380018501450480018801ad0200020001ad0288018501450280024502800145028801ad0200020001ad018801850345028502800345018801ad0200010002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad0100020002ad02880180014502800385028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" - }, - { - "filename": "34-hiroshima-okonomiyaki", - "data": "0x00051b14050500015d0300045f0100019307000600025d01d9015f026a0122015d08000600012201d90101026a0122010101220800030001930101010001d90101015f016a015d0101015d01010122015f010105000500010101d90101015f016a0122015d010101220101025f010104000500012201d90101015f016a015d022201010122015d015f01d9010103000400015f015d01d90101015f016a0422015d0122015f02d9010102000300015f015d012201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101016a0722015f02d9010102000200016a015f0c22015f02d9010102000200026a015f0f22020002000560012501600125016001250160012501600125046002001623" - }, - { - "filename": "34-hiroshima-shrine01", - "data": "0x00051c15050277130002770100157701000200131a020002001341020004000441020003230200044104000500021a03000123019301230300021a0500040004410200032302000441040002001341020002001341020005000241090002410500040003b3090003b30400050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b305000400018d01b30141038d0306038d014101b305000400078d0106068d0500" - }, - { - "filename": "35-head-35-yamaguchi", - "data": "0x00051e17030d0001540d000c0002540d000b0003540d00090004540e000a0004540600015406000100035401000254020007540300025406000300015401000154010008540500015406000f540200015401000254060001001554050017540400010017540300010017540300175404000e54020008540300010002540100045401000154010001540300015401000654040001000154030002540b00045401000254010001540154130002540100015401000154010015000154050014000154020001540300" - }, - { - "filename": "35-yamaguchi-anglerfish", - "data": "0x00091f15020c0005830c000900048301660683090008000a830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" - }, - { - "filename": "35-yamaguchi-fuku", - "data": "0x00051b14030400026212000400036211000400046203610495016105950300050001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed02610301016103950161015903610159016105950201010002610401059501590161015904950501010001610300130101000200026212010200020003621101020002000262010011010200060008010259050103000600080101590601030007000d010400" - }, - { - "filename": "35-yamaguchi-kawarasoba", - "data": "0x00051e1504030001061600010002060700019e0300019e08000106020001060900019e0300019e0900010601000106080001da010101da010001da010101da05000306020001000306040001d0012301d0012301d0012301d0012301d00900040001060200011501230115012301150123011501230115012301150200010605000400010601000d1503000206020001000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb05000106010604000fe80300020601000100010603000fe802000106030002000106010011e8010001060300040002e80d2302e80200010602000300010c02230d0c0223010c04000200040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" - }, - { - "filename": "35-yamaguchi-shoin", - "data": "0x00031715070100030c0c000200050c09000400060c060002000d23010001000f2301000223048805230388012302230e8802230e8802230388032304880323018801230f880588032304880323018806880123028801ca0288012303880a8801ca05880a8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c880100050009880200" - }, - { - "filename": "35-yamagudhi-footballfish", - "data": "0x00031f15020900023402eb100008000134040001eb01da0e0007000134050001da015d01da0d0007000134040001da015d0101015d01da0c0008000134040001da015d01da0d000900023401eb020001da0e000c0002eb03830c0009000483016601eb0583090008000683013403830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" - }, - { - "filename": "36-head-36-tokushima", - "data": "0x00031b15031500015402001200035403001100055402000b0005540100055402000400035402000c54030003001254030002001254040001001554020001001654010001001654010016540200020016540500025402000d54020009000b54040009000a5405000c00065406000c00045408000b00055408000c0003540900" - }, - { - "filename": "36-tokushima-awa-odori01", - "data": "0x000118140d010002f80800010004f8030001f90200010006f8010001f90200010007f801060200020005f80106020001f90200012303f90106030001f9030003f9030001010100010003010267030102000401026701010400030103670500039e0367050002e2019e0367050004e2014f060002e2044f05000200044f050001000144044f050001000344014f06000300010107000200010108000200012301440700" - }, - { - "filename": "36-tokushima-naruto-wakame", - "data": "0x00021a15070b000194035c04940b000348035c02480b00035c0100025c02000b00035c0200015c020004000748035c01480400020002480723035c012302480200010001480923025c0423014801000148042306de015c02de042301480148022302e90bde022301480148012304e905de015c05de01230148014807de045c06de0148014805de055c07de0148014806de035c03de02e903de014801480bde04e902de0148014811de014802480fde0248034801de055c07de034801001148010002000f48020004000b480400" - }, - { - "filename": "36-tokusima-whirlpools", - "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" - }, - { - "filename": "37-head-37-kagawa", - "data": "0x00041c15041200045402001000055403000d0001540200055403001200015401000154030018000400015404000254010001540100025408000800085401000154060007000c54050005000e5405000154010001540100115403000100165401000200165402000f540500025402000d54090002000554030002540c00020003541300010003541400020001541500" - }, - { - "filename": "37-kagawa-bonsai", - "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" - }, - { - "filename": "38-ehime-iyokan", - "data": "0x00051a140604000c4204000200084201e1074202000100024201250f42010002420125114201420125124201420125124214421442144214421442144214420100054203b30a42010002001042020003000e420300" - }, - { - "filename": "38-ehime-jakoten", - "data": "0x0006191406020010d20100010001d203d102d2018e0bd201d204d10ed201d204d101d2018e0ad2018e01d201d204d106d2018e07d201d204d10ed201d204d10ed201d204d10ed201d204d10ed201d204d10dd2018e01d204d10ed201d204d105d2018e01d2018e06d201d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" - }, - { - "filename": "38-ehime-mandarin-orange" - }, - { - "filename": "38-ehime-onsen01", - "data": "0x00031b15050700015504000155040001550400060002550300025503000255040005000255030002550300025505000400025503000255030002550600040002550300025503000255060004000255030002550300025506000400025503000255030002550600050002550300025503000255050006000255030002550300025504000200025502000255030002550300025501000155020001000255030002550300025503000255010002550100025503000255030002550300025503000255025502000255030002550300025504000255025502000155040001550400015505000255025512000255035510000355010003550e000355010002001255020004000e550400" - }, - { - "filename": "38-ehime-onsen02", - "data": "0x00031b150507000101040001010400010104000600020103000201030002010400050002010300020103000201050004000201030002010300020106000400020103000201030002010600040002010300020103000201060004000201030002010300020106000500020103000201030002010500060002010300020103000201040002000374013f0201033f0201033f02010274020001000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f02740274023f0201033f0201033f0201043f02740274023f0101043f0101043f0101053f02740274123f02740374103f0374010003740e3f0374010002001274020004000e740400" - }, - { - "filename": "38-ehime-onsen03", - "data": "0x00031c14050b00010c0b000900050c09000800016101740161017401610174016108000700017407de01740700020001610300016101de01ae05de01ae01de0161030001610200030001740161017401de04ae01de04ae01de0174016101740300030003de03ae053f03ae03de0300060003ae013f02e70126013f03ae0600060003ae053f03ae060006000bae060006000b3f0600013f03000f3f0300013f0100153f010002001321020004000f01040002000157010004ae015702ae015702ae015704ae0100015702000200010c010001ae0306015701ae033601ae0157030601ae0100010c02000200010c010001ae030602ae033602ae037401ae0100010c0200" - }, - { - "filename": "38-ehime-tai-somen", - "data": "0x00031c18010d000189020001890a000b0001890100015f01890100015f0189090008000357015f01890157015f01890157015f018902570600070003570b20015705000600025701890e200400050002570189102003000500015701890320018d0220018d0220018d0220018d0520020001200300025714200100010001200200015715200100010001890120010001571220028d01200100020001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a20010603200306012003000257018907060401080601000400035712060200040004570f06040004000157010002570400068904000157040004000157010001570f000157040004000157110001570400040001571600" - }, - { - "filename": "38-ehime-taimeshi", - "data": "0x00041a16060600082306000300030f0848022304000200050f01e90182020101e9015f01010248012303000100060f02e9018202e90182010101e901010148012302000100030f0282015f02e9015f02e9015f02e9015f01010148012301000100020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f02010148012301230148030f03e9044202e9028202e901480123012301480201025f0182044201010142015f04e90148012301230148015f028202e9044201e4014204e9015f0148012301230148018203e9015f064202e9015f01820101014801230123014803e9015f018201e9044201e9015f02820201014801230123014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e901010148012301000100012301480101018201e90101015f03e90182015f018202e9010101480123010002000123014803010182015f03e901010282010101480123020003000123024802010182015f02e9020102480123030004000223084802230400060008230600" - }, - { - "filename": "38-head-38-ehime", - "data": "0x00021b1a020f00015409000f00015409001000015408000e0001540a000d00035409000900015402000454080001540c00055402000354010002540b000e540a000f540a00095406000a000754080009000854080007000954090006000a54090005000b5409000300025401000a54090001000254030006540d000154040008540c00070007540b00080004540d00060005540e0007000254010001540e00060004540f0005000154010003540f0007000154010001540f00" - }, - { - "filename": "39-head-39-kochi", - "data": "0x00041a15030d0002540400015403000900085401000254030008000c54030007000e54020007000e54020006000854020007540300095406000454010004000754080003540100050005540a0002540100040006540b000154010001000154010006540e00020006540f00020006540f0002000454110003000454100002000454110001000154010001540100015411000154050001541000" - }, - { - "filename": "39-kochi-bonito", - "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" - }, - { - "filename": "40-fukuoka-mojiko", - "data": "0x00031e14030d0001960d0009000196030001960300019609000600019602000196072701960100019607000600019602000927010001960700060002610b27026106000500046102270106016b010101270106022704610500050001a501e0010601a5032701a501aa01a5032701a501e0010601a50500040009aa015709aa0400050001c1025701c1025701e9035701e9025701c1025701c105000200032701c1015701e001c102e001e903e001e902e001c1015701e001c1032702000100042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c1042701000100042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e001060157015702060157010601c10157010601c1010301460197034601970146010301c10157010601c101060157020601570557017f0257017f0103019701460397014601970103017f0257017f0557" - }, - { - "filename": "40-fukuoka-tenmangu", - "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" - }, - { - "filename": "40-head-40-fukuoka", - "data": "0x00021b18051200015403000b00045402000154040009000954040007000a54050008000a54040008000a5404000500015401000c5403000300015402000d5403000200035402000f54010014540100020014541154050004000c5406000600015402000754060009000654070008000854060007000954060006000954070005000b5406000500075401000354060006000454040002540600070002540d00070002540d00" - }, - { - "filename": "41-head-41-saga", - "data": "0x00031c19040300015414000200045412000200045412000300045406000354080001000154020003540100095407000200115403000254040010540100035403001554030015540100015401001354020002540100135402001454040001001254050001001254050002000d5401000254060004000a5403000154060006000554010001540b00050007540c00060006540c00070006540b00080006540a00090005540a000c0002540a00" - }, - { - "filename": "41-saga-mudskipper-fiddlercrab", - "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" - }, - { - "filename": "42-head-42-nagasaki", - "data": "0x00011a1908080001540900070002540900070002540900070001540a00070001540a00060001540b00060001540b00120012000b00015406000b0001540600120012000900015408001200080004540600050001540200015401000254060008000154020002540500050001540400015401000254040004000354040001540100025403000400025404000254020002540200030001540100015405000754010002540a000154020002540100035408000254010002540100015401000154080001540600" - }, - { - "filename": "42-nagasaki-meganebashi", - "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e04080208017e0400017e0408017e0400017e020802080600017e0208017e060002080108017e060004080600017e0108017e080002080800017e019108000291080001910191080002910800019102910700039107000191010003910300029102000391030002910100030004910600049103000700019101000191010001910800" - }, - { - "filename": "42-nagasaki-saseboburger", - "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" - }, - { - "filename": "43-head-43-kumamoto", - "data": "0x00031816040e00035403000a0002540300035402000800065401000354020007000c54010007000c54010008000b54010009000b5409000a5401000a000854020007000a540300060001540300075403000154010001540600075404000100025402000354010006540500035401000354020006540500035403000154010009540300010002540100015402000a5403000254050009540400010001540100015402000b54030003000154020003540100065404000a0004540600" - }, - { - "filename": "43-kumamoto-karashirenkon", - "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" - }, - { - "filename": "43-kumamoto-kumamotocastle", - "data": "0x00021d15020800019d12000700019d0101019d11000600059d10000600050e1000040002c80206019d020602c80e00040002c8029d0101029d02c80e00030002c8029d0323029d02c80d0003000501019d05010800019d04000300010e0223010e019d0101019d010e0223010e0700019d0101019d0300020001c8036f019d0323019d036f01c8060003060300020001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c802000100019d0101019d0c01026f020101c80192019d019202c8010001000392010e0623010e0223020e029201230192019d0301019d01010100010003920c0e0492052301920100059d0100010101000101010001010100010101fa010101fa0a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" - }, - { - "filename": "44-head-44-oita", - "data": "0x00041915040b0003540700060002540200055406000600095406000200025401000a54060001000c5401000154060001000a540100015408000b540a0001000a54020001540100035403001154040010540100015403000100025402000c5404000100035402000e5401000200025402000c54030007000c540100015407000d54010007000c54020008000254010004540200035401000b000254040001540300" - }, - { - "filename": "44-oita-beppujigoku", - "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" - }, - { - "filename": "44-oita_usajingu", - "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" - }, - { - "filename": "45-head-45-miyazaki", - "data": "0x0004161708070001540100015402000254060008540500085401000500075402000400095401000400085402000500075402000400075403000500065403000400075403000a540400010009540400020008540400030007540400030008540300050005540400050005540400070002540500060003540500080001540500" - }, - { - "filename": "45-miyazaki-aoshima", - "data": "0x00061d14030500109205000600027f0192047f0192047f0192017f0600080001bf040001bf040001bf0700010001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf0700010004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf01920600030005e102bf080002bf0600030003e1011b019202bf010006af019202bf0600020002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d60100010001e1011b02e1019d01e1019209af019201af01990221039901000100011b03e1019d0caf01d6026001d6016001d60200" - }, - { - "filename": "45-miyazaki-chickennanban", - "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" - }, - { - "filename": "46-head-46-kagoshima", - "data": "0x0003181f03070001540100015402000254070007000754070006000a54050007000954050007000a5404000200015403000b54040007000b54030001000154060005540200045402000154080003540300065409000354010008540900025403000754080003540400055401000600065403000454020007000554040004540100070006540300045401000c0001540200045402000f00035403000e0002540500150015001500030001540f0001540100130001540100120002540100120002540100120001540200060002540300015405000254020009000154010002540400025402000a0004540700" - }, - { - "filename": "46-kagoshima-goromon", - "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" - }, - { - "filename": "46-kagoshima-shirokuma", - "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" - }, - { - "filename": "47-head-47-okinawa", - "data": "0x00011c15050f00015407000e000154070001541700170017001300015403001300025402001200035402000b0001540500045402000d00025402000354030001540c00075403000e00045405000d00035407000b00045408000a0002540b000a0003540a000b0003540900090003540b0003000154040003540c00090003540b00090002540c00" - }, - { - "filename": "47-okinawa-goya-chanpuru", - "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" - }, - { - "filename": "47-okinawa-siisa", - "data": "0x00041d14030200033706000437060003370200030004370200033702000337020004370300040008370200083704000300023703460137034602370246023702460337030003000237026602370266043701230337012303370300020001460237016601230237016601230337012301370123013701230137012302370146020001000246143702460100020001460337042307370423023701460200010003460837024606370123013702460200030002460637014602000146063702460300030002370746020007460237030001000146010003370246023701460137020001370146023702460337010001460100024601000937020009370100024601460b3702000b37014601000a370123020001230a3701000200013701460837022308370146013702000400023701660200023701660200016602370200016602370400" - } - ] - } - } \ No newline at end of file + "heads": [ + { + "filename": "01-hokkaido-goryokaku-heads", + "data": "0x00021b16040b0002540a000a00045409000900025401c001dd025408000800025401c001dd01c001dd025407000700035401dd02c001dd0254018706000500035402c001dd03c001dd0187035404000300035401c0015401c002dd03c0018702dd045402000100035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd025401000300025401c001dd02c00287029204c002dd01c00254010003000187015402c001dd03c0029203c001dd02c0025402000200015402870154018701dd08c001dd01c0025403000100015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c0025404000100025401c0025401c001dd02c004dd02c001dd01c0015404000300035401c001dd01c001dd04c001dd01c001dd01c0025403000400025401c002dd01c0045401c002dd01c0025403000400025401dd02c0065402c001dd025403000500055404000554040005000354080003540400" + }, + { + "filename": "01-hokkaido-ishikari-heads", + "data": "0x00031c15040400067f0200017f0b000200037f0400017f0300027f0100017f07000100017f0200037f0200010d037f02e1010003a201e004000200027f0100017f020d06e103a203e004000400020d015702e101a2019501a201e103a2010d02e0019504000300020d015702a2019501ce029704a204e0010d03000200020d019501a201ce029703ce03a205e0020d02000100020d015704ce01cd02ce01cd02a206e00157020d01000100010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d010e010e010d01220957015d0657034e010d010e010e010d03010e570149024e010d010e0100010d0301015701f30c570249014e010d01000100010d01220101015701490d570149014e020d01000200020d034901570434025705010157020d02000300020d01490157023401af033405010157020d03000400030d033402af01340501020d04000600020d05340257030d060009000334030d0900" + }, + { + "filename": "01-hokkaido-tokeidai-heads", + "data": "0x00011b14060a00010b0a00090002a101370900070002a1013701e9013701a10137070007000237030102370700080001e901010196010101e908000800015d01960201015d0800080002e9013702e90800080001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033702a102a1013702a10237010b01e903ca01e9010b01a1023702a10237023702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e901000100015d016f035d016f035d010b035d016f035d016f015d01000100080b013701a10137080b01000100035d010b035d02a10337035d010b035d0100010001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e901000100015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d0100010003e9010b04e9030b04e9010b03e90100" + }, + { + "filename": "02-aomori-apple-heads", + "data": "0x00051915080800011b080004000455011b045504000200045502a6011b02a60455020001000655011e011b011e025501010355010001000a5501010455010011551155115511551155115511550100025501a60c55010001000f5501000200065502a60555020003000b550300050007550500" + }, + { + "filename": "02-aomori-dogu-heads", + "data": "0x00021814080400080a04000400020a0236010a0236010a040004000136030a01ca020a013604000600020a0136010a06000500010a04ca010a05000500030a01ca020a0500010001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a01000500010a01ca030a01ca0500050001ca020a018a010a01ca05000500010a01ca010a01ca020a0500050006ca05000500060a0500050001ca040a01ca05000600010a02ca010a0600" + }, + { + "filename": "02-aomori-goldfish-nebuta-heads", + "data": "0x000119170409000333090008000533080007000233010101330101023307000700033301010333070005000b3305000400053301010133010105330400030002330101043301010433010102330300030003330101033303bf01330101033303000300053307bf033303000100053303bf010103bf010103bf0333010005330dbf03330233010101330fbf0233033301010fbf023301000233022301010bbf0101022301000200013302230dbf02230100040001230dbf01230200040001bf012304bf032304bf012301bf020005000123030101bf010d01b4010d01bf03010123030006000301010d0301010d030104000200010101000201010001330301012303010133010002010100010103000101010001010100013302000123010101230200013301000101010001010100030002010d0002010100050001010b0001010300" + }, + { + "filename": "03-iwate-moriokamen-heads", + "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" + }, + { + "filename": "03-iwate-nanbutekki-heads", + "data": "0x00031b14060700050e09000400030e0500030e06000300010e0b00010e05000200010e0d00010e04000200010e0d00010e04000200010e0600010e0600010e04000300010e0100090e0100010e050003000d0e050002000f0e04000100110e03000100110e0100020e150e140e0100140e01000100130e01000100050e0163010e0163010e0163010e0163060e020002000f0e040003000d0e0500" + }, + { + "filename": "04-miyagi-datemasamune-heads", + "data": "0x00011d150517000128150002280100120002010128030008000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e080003000528030103280192010e019207000100020e01000192010e0192020103280192010e0192010e0192010e0100020e03000100010e0100010e0192010e0b92020e0100010e03000200020e0292030e0192010e0192010e0192030e0192020e04000200030e0192020e0192020e0192020e0192020e0192020e04000300010e01920188010e0192030e0192030e0192020e019205000300010e01920c880192010e05000300010e01540c880154010e05000300012801540c8801540128050002000128010e01540788016004880154010e012804000200020e01540788016004880154020e040001000128020e01540788016004880154020e012803000100030e01540588026004880154040e03000200030e01540388042303880154030e04000400020e025406880254020e0600080006540a00" + }, + { + "filename": "04-miyagi-hoya-heads", + "data": "0x0004191407050001710194017102000371050005000394020003940500050001710194017102000371050004000a71040002000e71020002000e710200010010710100010010710100127112711271127112711271010006e405ae05e40100010010e4010002000ee40200" + }, + { + "filename": "04-miyagi-tanabata-heads", + "data": "0x00041c160406000de1010001bf0300050001e1010001010400010104000101010002e1010001560100040001e1020001010400010104000101020001c701e10200030001e102000356020003bf020003c7030001bf0100020001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c7020001560100010001e10300055605bf05c70400010001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" + }, + { + "filename": "05-akita-akitainu-heads", + "data": "0x00031a14021100012b06001000022b010105001000032b020103000f00042b01010123020101800e00042b06010c00062b0301025f01000b00072b0501015f0a00092b0201030009000b2b010103000200040103000b2b0101030001000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b050001000201032b0101052b020102000101022b05000200040101000101042b010103000201012b05000800032b0301030003010400" + }, + { + "filename": "05-akita-magewappa-heads", + "data": "0x00041a15040200108e0400010012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de0200010001de0788016001880184068801de0300020007de01d801de018406de04001600030012c90100020014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de018803000888016001880184078801000400018e01de018e02de018e04de018e02de018e01de018e0200" + }, + { + "filename": "05-akita-namahage-heads", + "data": "0x00021a16040700014109000141040007000241070002410400080002410500024105000600062301000523040005000123060e0123050e0123030004000123010e0623010e0523010e0123020003000123010e0123010e0123040e0123040e0223010e0123010003000123010e0123010e022307410323010e0123010003000123010e0123010e014103230318032301410123010e0123010003000123010e0123010e034102230141022303410123010e0123010002000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e0123010001000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e0123010001000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e0123010001000123010e0123010e012301410101012301cf041801cf0123010101410123010e0123010001000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" + }, + { + "filename": "06-yamagata-hanagasa-heads", + "data": "0x00021b170508000641080006000241065702410600040002410a5702410400030001410a5701320141025701410300020001410157013201410132025701c603570132024101320257014102000200014101570441025701dd025703410132014101570141020001000141015701320341025701dd045701410132014103570141010001000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd085701410141035701c6035702dd0341085701410141075701dd024101320241035701410132025701410141035701410357024101320141013201410257044101570141014102570132024102570332024101320141015702410132014101570141014102570141013201410132025702410232014102570132024101320157014101000141015701320241013203570341015701280257023201570141010001000141025701410132075701280123012804570141010002000141035701c6075701280123012802570141020002000141065701320341013201570128012301280157014102000300014105570141013201410132035701280157014103000400024104570141013204570241040006000241065702410600080006410800" + }, + { + "filename": "06-yamagata-imoni-heads", + "data": "0x00041b14050800060d08000600020d0600020d06000400020d0a00020d04000300010d0e00010d03000200010d0400080e0400010d02000200010d0200020e028501880103028501970185020e0200010d02000100010d0100020e0185021b01970303029702030185020e0100010d01000100010d010e0185030302970203019702e102030385010e010d01000100010d02850288021b0188020b021b0285020b021b0185010d0100010e010d01970203020b030301850397020302e101880185010d010e020e01970203019701030188020303e10103028802970203020e010e038502e10103018802e1028801850203039701030285010e0100020e01e102970285020301880497020b0285020e01000100040e029702e1020301850297021b0185040e01000200050e0285016201bc016201bc01620185050e02000300100e030005000c0e0500" + }, + { + "filename": "06-yamagata-zaookama-heads", + "data": "0x00041d14040a00072702010227040007000b2703010127030005000e27024c0101012702000400022701010c2704010127010003000127020103270a010127024c0101012701000200020102270301073004010127030101270100010102270201019b0b3002010127024c01010127022703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f3003010127020001000201014c01010e3003010127020002000101014c03010a300201014c01010127030003000201014c0b01014c0101014c0101040005000401014c0101014c0101014c0301014c01010600" + }, + { + "filename": "07-fukushima-peach-heads", + "data": "0x00041d16040500020f12000300030f0197010f0100030f0d000100060f0297030f0100020f0a000100030f05b90297030f0197010f09000100020f04b9011902b9020f0297030f0100020f05000100020f04b9011903b9040f0197010f0100030f04000100010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297020f040f05b9040f05b9011902b9040f0d0f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f01000600020f0100050f03b9021903b903000a00030f04b9011903b904000a00010f020003b9011904b90400100003b90600" + }, + { + "filename": "07-fukushima-takizakura-heads", + "data": "0x00021e14021200035f07001000045f01db025f05000c00035f01db035f01b8045f04000a00045f01db045f01b8025f01db015f0100025f01000600025f0200035f01b801db025f0100015f01b8025f01db0100015f02b8015f0500025f01b8015f0200015f010001b8035f0100025f01b8010001db01b8015f01db025f0200055f01b8025f0200015f010001b80400015f04b8015f01db015f01db0100015f01db01b8025f01b8015f01db095f020003b8025f0100015f01db0100015f01db025f02b8025f01b8025f0100035f01b8015f04b80100015f04000300035f01b8025f01b8025f0200035f05b806000100025f0200015f01b80100055f0100015f0100015f03b80100015f01b8045f0100015f01b8035f020001b8015f01db015f01b8015f040003b80100025f01db02b8025f025f02b8015f0100025f010001db020003b8010003b80200025f01db045f01db035f01b8025f01b8015f040006b80300015f01db0100015f01db015f01db0100015f02b8015f010001b8015f050005b8025f0100015f0200015f01db01000200035f02b8045f020005b8065f04000200015f0100035f01db01b8025f06b80100025f01db035f01db03000400025f010001db0200015f010005b80100015f010001db015f0100015f01db03000500015f050005b8040001db0200015f0400" + }, + { + "filename": "07-fukushima-tsurugacastle-heads", + "data": "0x00011a140309000162050001620700080001620700016206000900078907000900078907000800098906000900020103080201070007000b89050006000d89040007000201017f0108010101890101017f0108020105000600068901010689040005000689010101a301010689030006000101017f010107890101017f01010400050005890201017f0201058903000300019406890501068901940100020002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" + }, + { + "filename": "08-ibaraki-anglerfish-heads", + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + }, + { + "filename": "08-ibaraki-hananuki-ravine-heads", + "data": "0x00041c1502040001c006000136019701c601d80197013602bf0700020001c0060001bf01000136019701d801bf01970136060001bf0200060001bf010001bf0100029704d802970800040002c604000136019701d8019702d801970136020002bf0400070001c601000197013601d80188019701bf018801d8013601bf030001c0030009000136019702d8029702d801970136010001c0020002c00100010002c0020001c0010001bf01000136019701bf018802970288019701360700030001c0010002bf01000197013603d8029703d8013601970600080002970388029703880297020001c6010001bf010007000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf0300010002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d802970400010002bf02000136029705d8029705d802970136030005000136019701d802bf02d802bf019701d802bf03d801c60136010001bf01000400019701360197038802bf0188019702bf048801c60197013602bf0100040001970136019706d8029706d8019704bf170002bf0100" + }, + { + "filename": "08-ibaraki-rocket-heads", + "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a26010101000500057f0b2601000400057f0b2602000300057f0b26030002000155047f0b260400024201000155027f020109260500040001550100030107260600030001420100020d0301032601290126017f060002000142010001730100020d03010326017f0700050001420100010d0100027f0201017f08000600017301000155027f0101017f0900030001730200024201000155027f0a000a0001550b00" + }, + { + "filename": "09-tochigi-sanzaru-heads", + "data": "0x00041e1401050003340500043404000434040003000634030006340200063403000300023401af013401af02340100023401af013401af063401af013401af013403000200013401b805af033405af043405af013402000200013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af01340200020002b805af01b8023404af01b801af01340135013405b803000300023401af020e01af01b8023401af04b80135033402b8010e02b8013402000200033403af0434013504b801340135033402af04340100010001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af013403000100063402af0100023405af0135033403af01340400010003340235013401af0234020005af0135043401af013405000200013401350734010005af053401350234040002000b3403af013506340135023403000100063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" + }, + { + "filename": "09-tochigi-strawberry-heads", + "data": "0x000416150602000122020001c0010001c008000300012204c003710500020001c0022204c004710300010005c00571010102710200020002c006710101017101010171020002c0017101c0077101010371010001000e71010001000f7101000f7101000f7101000f7102000e7102000d71010003000c710100040004710146027101460371010005000471024603710200070007710200090004710300" + }, + { + "filename": "09-tochigi-toshogu-heads", + "data": "0x00031f1402060001c70f0001c70600070003c7022901c7012908c70700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30700060002c702e3012701e3012701e3012701e3012701e3012702e302c706000500012902e301c7012901c701e302c7015402c701e303c702e301c705000600016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0600050001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290500090001c7027f01c7037f01c7027f01c70900070002c70154014101c70154014101c70141015401c70141015402c70700010001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014102c701c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" + }, + { + "filename": "10-gunma-kusatsu-heads", + "data": "0x00041d15030600020d0200020d0200020d0200020d06000400013201da028802da028802da028802da028801da013204000400013201da023202da023202da023202da023201da01320400050001da025702da025702da025702da025701da0500060002570200025702000257020002570600060002570200025702000257020002570600030003e6025702e6025702e6025702e6025703e6030003000193013e018d0257023e0257023e0257023e02570101013e0193030003000193013e0101033e018d023e018d033e018d033e018d013e0193030003000193013e028d053e018d043e028d023e018d0193030003000193023e018d013e018d013e018d023e018d013e028d013e018d033e0193030003000193018d053e018d023e018d053e018d013e018d0193030003000193013e018d033e018d063e018d013e018d023e010101930300030001930101033e018d033e018d023e018d023e018d013e018d013e0193030003000193033e018d033e047f018d013e018d043e019303000100027f0193033e018d033e017f023e018d033e027f023e027f0100017f017f0200017f03e6017f0ce6027f01e603000100027f0100027f1400" + }, + { + "filename": "10-gunma-negi-heads", + "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030001dd03dd0100034c03dd0100034c010003dd04dd034c04dd034c03dd0100010003dd034c04dd024c04dd0100010003dd034c04dd024c03dd0200010004dd024c03dd024c04dd0200020003dd024c03dd024c03dd0300030002dd024c03dd024c02dd0400050001dd014c02dd024c01dd06000500074e06000600054e0700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c103ca01c10700060001c1010101c1010101c107000700010101c101010800" + }, + { + "filename": "10-gunma-takasakidaruma-heads", + "data": "0x00061a1607050009410500030002410101014102010741030002000f41020001000141016001410123020102230101022302010123014101e601410100010001e6022301010423010104230101022301e60100014101e60123020103a70101010e010103a7020101230141016001e60160020101a7030101a7010101a7030101a7020101e6016001e60160020101a7030101a7010101a7030101a7020101e6014101e60141020101a7030101a7010101a7030101a7020101e60160014101600223010103a7030103a701010223014101e602410123030101a1010101a1010101a1010101a1030101230241010001410123010e040102410501010e012301410100010002410223010e0123014102010141010e0123010e02230241010002000341010e0123010e0301010e0123010e034102000300014101600141016001410260024101600141016001410300040001e6014101e6024101e6024101e6014101e60400060001e6014101e6014101e6014101e60600" + }, + { + "filename": "11-saitama-tokinokane-heads", + "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" + }, + { + "filename": "11-saitama-whitetiger-heads", + "data": "0x00031a1406020002010b00020103000100040109000401020001000101015f020109000201015f010102000201025f020107000201025f01010200090103e3060102000100030101e3050101e3050101e3010102000200010101e3040101e3030101e3040101e302000200040101e3020101e3010101e3020101e303010200020010010200020001e30e0101e30200020010010200020010010200020001e30e0101e30200020010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" + }, + { + "filename": "12-chiba-loquat-heads", + "data": "0x0003181508070002c9070006000426060004000826040003000a26030002000c26020001000e26010001000e260100102610261026102610261026102601000f26010006260186012601860526010002000626018605260200040008260400050006260500" + }, + { + "filename": "12-chiba-nanohana-heads", + "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a02000300012a0100012a0100022a0100022a0100012a0100022a0100022a06000200012a0100122a0100012a02000200172a01000100062a0122112a01000100152a0122022a01000100032a0122152a1a2a042a01c0102a01c0042a032a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a02000100012a020001c0102a01c0012a0100012a0100" + }, + { + "filename": "12-chiba-soysauce-heads", + "data": "0x000317140b010008b40300020006b4020001850100020006b404000200066f030001850200016f0101046f04000200016f0101046f04000100016f01b8010104b8016f03000100016f010105b8016f0300026f06b8026f0200026f06b8026f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f02b803ea03b8016f0200016f08b8016f02000a6f0200" + }, + { + "filename": "13-tokyo-station-heads", + "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" + }, + { + "filename": "13-tokyo-tower-heads", + "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" + }, + { + "filename": "14-ibaraki-anglerfish-heads", + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + }, + { + "filename": "14-kanagawa-curry-heads", + "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d4043502010100030102000400020105d40535020106000300030105d40635020105000300020106d40635020105000300020106d40635020105000300030105d40635020105000400020104d40635020106000400030103d40635020106000500030101d401860142016003350201070006000401033503010800070008010900090004010b00" + }, + { + "filename": "14-kanagawa-king-heads", + "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" + }, + { + "filename": "15-niigata-sasadango-heads", + "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" + }, + { + "filename": "15-niigata-tulip-heads", + "data": "0x00041a1506090002b90900080004b90800010002b9040006b9040002b9010004b9030006b9030004b905b9010008b9010005b914b914b914b914b914b914b914b9010012b90100010012b90100020010b90200020009b9016a06b90200040006b9016a05b90400060008b90600" + }, + { + "filename": "16-toyama-blackramen-heads", + "data": "0x00041b150508000633080006000a33060004000e3304000300053306850533030002000433038502d3058504330200010003330385018803d303e4048503330100010002330285018803d302010222010103e402850233010003330285018802d3070103e40185033302330285018803d3082202e40285023302330285018802d3092203e4018502330233028503d3080104e4018502330333018504d3062204e40185033301000233028504d3040104e4028502330100010003330185018805d3078503330100020003330185018803d3028503e402850333020003000333048503e40385033303000400043306850433040006000a330600" + }, + { + "filename": "16-toyama-kutabe-heads", + "data": "0x00031a17010d00060e06000b000a0e04000400010e04000e0e02000300010e04000f0e02000300020e0300100e01000300030e0200050e0501060e01000400070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e0401030e0a0e0701010e0401030e0a0e0501020e0501030e0a0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e01000500010e1300" + }, + { + "filename": "16-toyama-raicho-heads", + "data": "0x00031d15021200047f05001100077f03001100047f020e017f010e02000600010f0a00077f020e0100050001dd010f01dd0800077f0400050001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f04000100010e017f0200010f01dd017e107f03000100017f020e157f02000200177f02000200177f02000300167f02000300157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e0300010002dd017e010f0300027f0400027f0500010f017e02dd02000300010f037e0100027f010e0300027f010e0300027e010f0400" + }, + { + "filename": "17-ishikawa-curry-heads", + "data": "0x00071c1504060001010172020108720600040003720ab8037204000300027201b80225013403250234022502b8022201720300020002720325013401250134012502340125013402250422017202000100027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b80172017201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b80172027201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b802720100020003720fb8027202000300037204b8036406b8027203000500037208b80372050007000a720700" + }, + { + "filename": "17-ishikawa-jibuni-heads", + "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b8032302000300032301de0123038301b8012301de032303000400032301de052301880223040006000223018801de022301de01230600" + }, + { + "filename": "17-ishikawa-kinpaku-heads", + "data": "0x000518150705a6076d05ea03a60b6d03a60aa6066d01ea09a6086d07a60a6d10a6016d11a611a604ea0da611a6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" + }, + { + "filename": "18-fukui-dinosaur-heads", + "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b02000b0001e8011b01e8011b01e8011b01e80200071b011b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a03000100011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a04000200021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a04000300041b01e8011b01e8051b01e8061b05000400022a071b01e8081b05000600022a051b01e8081b05000800012a091b022a0100041b02000900032a021b01e8032a09000c00031b0c000d00021b0c000e00011b0c000e00021b0b00" + }, + { + "filename": "18-fukui-sabae-glasses-heads", + "data": "0x00091c1206030004710800047103000100027102060201027104000271020602010271010001000171020603010106017104000171020603010106017101000171020603010306047102060301030601710171010603010406017102000171010603010406017101710301050601710200017103010506017101710201060601710200017102010606017101000171060601710400017106060171010001000271040602710400027104060271010003000471080004710300" + }, + { + "filename": "18-fukui-tojinbo-heads", + "data": "0x00051c15050d00037407000800037402000374027205000500037203740272037402720274030005000372037402720374027202740300030002740372037402720374027202740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372039902720374020502740300030002990372039902720374020502740300030002990305039902720374020502990300030002990305039902720399020502990300030002990305039902720399020502990272010003000299030503990205039902050299027201000100027702990305030c02050399020502990272017703000299030503990205039902050299027701000177010013770200" + }, + { + "filename": "19-yamanashi-shingen-heads", + "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" + }, + { + "filename": "19-yamanashi-wine-heads", + "data": "0x0001161409050003e705000500035b0500050003e70500050003e705000500037905000200011b082202000100011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" + }, + { + "filename": "20-nagano-matumotocastle-heads", + "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" + }, + { + "filename": "20-nagano-wasabi-heads", + "data": "0x0003161505040002220100024e08000100024e01000222034e08000122024e0222034e09000122034e0122014e0222090001000122034e032201c90122070002000622014e022206000200013f022201c9014e042206000200013f014e0622014e01c90500030001c90922040003000a22040003000422014e062203000400013f014e0522014e0322020005000922014e020005000b22010006000122014e082201000700042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" + }, + { + "filename": "21-gifu-gassho-summer-heads", + "data": "0x00021d14040b0003d80b000b0003d80b000a0002d8018402d80a00090002d8038402d80900080002d80184037c018402d80800070002d8028402010123028404d80500070001d8028401ca0201012301ca028401d80700060001d8028407ca028401d80600050001d80184057c01ca057c018401d80500040002d8018401ca030103ca030101ca018402d80400030002d8028401ca030103ca030101ca028402d80300030001d802840dca028401d80300020002d8018402ca020101ca020101ca020101ca020102ca018402d80200010002d8018403ca020101ca020101ca020101ca020103ca018402d80100010001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + }, + { + "filename": "21-gifu-gassho-winter-heads", + "data": "0x00021d14040900070109000800030103d8030108000800030101d8018401d8030108000700030101d8038401d8050105000600030101d80184037c018401d8040105000500030101d8028402010123028401d8010102d805000400030101d8028401ca0201012301ca028401d80200010104000300030101d80184030103ca0301018401d8030103000200030101d80184050101ca0501018401d8030102000200030101d801840bca018401d8030102000100030101d802840bca028401d8030101000100020101d802840dca028401d802010100030101d801840fca018401d80301020101d8018411ca018401d80201010101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + }, + { + "filename": "21-gifu-keichan-heads", + "data": "0x00021d1a03040002061400060004060500050606000a000106090003060300040006060100017d029c0900010602000300010605000322017d029c0200060603000400090601d2019c010001060900030003ca0123022203e901220106017d029c0106022303ca0300020002ca0223022201e9037d01220106027d019c017d0106010c022302ca0200010002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012302ca02ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c0123012301ca0123010c0322047d029c0322027d029c017d0122010c012301ca01230123010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012302ca02ca0123010c0422017d029c037d0422027d0222010c012302ca03ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca0100020004ca0e2304ca0200030014ca03001a001a001a000c00013d0101013d01010a000d00013d0100013d0a00" + }, + { + "filename": "21-gifu-ukai-heads", + "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f5407000300105407000300105407000200115407000200045401920c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c020101f406000100030c0601010c07a6010101f406000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" + }, + { + "filename": "22-shizuoka-oden-heads", + "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" + }, + { + "filename": "23-aichi-hitsumabushi-heads", + "data": "0x00071a15060800040e08000500050e0134040e05000300040e0234012b013401350134040e03000200010e010b033401350234012b023401350334010e02000100010e010b0134012b03340135053401350234010b010e01000100010e01350234012b0634012b033401350134010e0100020e0834013506340135020e020e023401350234012b033401350334012b0234020e020e010b023401350b34012b020e030e010b093401350334030e050e023401350234012b03340135050e0100080e0234080e01000100120e01000200100e020004000c0e0400" + }, + { + "filename": "23-aichi-tenmusu-heads", + "data": "0x00011b1406090001ce010001ce0900090003ce0900090003ce0900090003e70900070001bc05e701bc0700060001bc010105e7010101bc0600050001bc010107e7010101bc0500050001bc020101e7030101e7020101bc0500040003bc070103bc0400040005bc030105bc0400030007bc010107bc030003000fbc0300020010bc0300020011bc0200020011bc0200020011bc0200010013bc0100010007bc010101bc010101bc010107bc010015bc15bc" + }, + { + "filename": "24-mie-jingu-heads", + "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" + }, + { + "filename": "24-mie-ninja-heads", + "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" + }, + { + "filename": "25-shiga-blackbass-heads", + "data": "0x00021d18021700018d0100018d01001700038d01001600058d1700048d0a00016b0c00038d01000900036b010003c50157012303c50100038d02000800036b02c5011e02c5025702c50100028d04000500026b0100016b02c5031e06c50100038d03000500036b01c5041e01c5011e05c5028d05000400036b01c5031e01c5041e02c5010101c5030104000400026b01c5031e01c5031e0101016b060105000400016b01c5061e0201016b0201011e03010600050001c5031e01c5011e0201016b0201031e02010600050001c5041e0201016b0201031e02010700050001c5021e01c50201016b0701011e0700040001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010e000100066b0300031e0e000300046b0300021e0f000300046b14000400036b1400" + }, + { + "filename": "25-shiga-hikonecastle-heads", + "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" + }, + { + "filename": "26-kyoto-kinkaku-heads", + "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" + }, + { + "filename": "26-kyoto-kiyomizu-heads", + "data": "0x00061a14051584010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100" + }, + { + "filename": "27-osaka-takoyaki-heads", + "data": "0x00021e15020b0001af010001af020001af027d0900090001af027d01af0100017d01af010002af09000600017d010001af017d03af017d01af020b017d010003af060003000157020001af017d02af017d01af020b01af0134017d013401af027d0700040001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0600050001570100010b02af01dd01af013402af017d0134010b03af010001af05000600015701af023401af010b02af010b023402af020b01dd01af050006000134010b02af010b0234010b0234020b0111010b0234010b050005000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f0100050001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f010005000334010b0134020b0b60050005000234020b0134010b01110260039303600393050005000134010b0234010b013401110b6005000600040b0111046002930560060006000134010b0234011101930134019305600293016006000200037f0200023402110160053404600700017f0300017f0300013401110260013403600293026008000100037f03000234011101930134076009000b00036003930b00" + }, + { + "filename": "27-osaka-tower-heads", + "data": "0x000216150b05000195050004000395040002000195063c020003000195043c0300040003c604000100016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f01000300019501c6019501c6019503000300019501c6019501c6019503000300019501c6019501c6019503000200029501c6019501c6029502000200029501c6019501c6029502000200029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f010001000195016f019503000195016f019501000100016f019505000195016f010001000195070001950100" + }, + { + "filename": "28-hyogo-himejicastle-heads", + "data": "0x00021a15010b00017f0700017f05000c0007e006000c0001e0019d01e0019d01e0019d01e006000b0002e0019d0301019d02e005000c00070106000c00010101920101019d01010192010106000800017f020001e0019d01e0019d0101019d01e0019d01e00200017f0200090001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e003000700017f02000101029d01010192010101920101029d01010200017f01000800017f01e0019d0201019d03e0019d0201019d01e0017f02000300017f040002e005010192050102e0020003e00500017f01e0010101920101019201e0010101e00192010101920101027f020001e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d01000192010101920300037f040105920501020001e0019d01e0019d01e00100037f010101920101079201010192020102000101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d019d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f01000192010101920101019201010192100102000401019d01e0019d01e0012b0250012b0350012b0250012b0350012b0200012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" + }, + { + "filename": "28-hyogo-tajimaushi-heads", + "data": "0x0004191504010002b50f0002b5010002b5110002b502b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b01000300010b0d0d010b0300150d150d150d0100130d01000300100d020004000c0d05000400060d0ab501000400050d0bb501000400050d05b5020d01b5020d01b501000400050d0bb501000400050d02b5070d02b5010009000ab50200" + }, + { + "filename": "29-nara-ashura-heads", + "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" + }, + { + "filename": "29-nara-deer-heads", + "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" + }, + { + "filename": "30-wakayama-danjogarandaito-heads", + "data": "0x00011914080800019508000800012108000800019508000800012108000700012701e301270700060001e3012701e3012701e30600040001e3012701e3012701e3012701e3012701e30400020001e3012701e3012701e3012701e3012701e3012701e3012701e3020002000db40200050001b4010101b4010101b4010101b40500050007b405000500012801dd01b401dd01b401dd012805000400090104000100012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b40300030001b401dd01b401dd01b401dd01b401dd01b401dd01b4030003000bb40300030001b4010101b4010e01b4010e01b4010e01b4010101b403000100047f07e0047f0100" + }, + { + "filename": "30-wakayama-nachifall-heads", + "data": "0x000216150a0100036102e001610101046101610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e00301026202000400010101e0010101e004000400020101e001010400040001e0030104000500010101e001010400050001e0020104000500030104000500020101e00400050001e0010101e004000500010101e001010400050003010400050003010400050003010400030001010100016201010162010102000101050001010162020103000500020101000101010001010100020001010100010101000101010001010300" + }, + { + "filename": "33-okayama-denim01-heads", + "data": "0x00061815090a54042b01540799010c0299042b01990754019907540154059901540199015405990154015401f5035401f501540199015401f5035401f501540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" + }, + { + "filename": "33-okayama-denim02-heads", + "data": "0x00061815090a92042b01920799010c0299042b01990792019907920192050c019201990192050c0192079201990792079201990792079201990792079201990792079201000792079201000792079201000792079201000792079201000792079901000799079d0100059d010101f6079d0100059d010101f6" + }, + { + "filename": "33-okayama-denim03-heads", + "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca07920192050c019201ca0192050c0192079201ca0792079201ca0792079201ca0792079201ca079207920100079207920100079207920100079207920100079207920100079207ca010007ca079d0100059d014d01f6079d0100059d010101f6" + }, + { + "filename": "33-okayama-dog-heads", + "data": "0x00031a1506010003260c00022602000100015703260a000226015702000100025703260800022602570200010003570c2602570200010002570e2601570200010003260601016a05010226020001000801036a0601020001000801010f016a010f06010200010003010d26010102000100112602000100052603570326035703260200010011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db018801001000025f0200" + }, + { + "filename": "33-okayama-horseshoe-crab-heads", + "data": "0x00051815010a00088e0500090003d5098e02000800028e02ca01d5068e0101028e0100060001ca048e01ca01d5028e04c3018e0101018e01000700048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0100090003d5098e02000a00088e0500" + }, + { + "filename": "33-okayama-momotaro-heads", + "data": "0x00021914050200020c10000100030c1000040c1000030c0201040c0500040c020003000101060c0374060c010002000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c010012570100010012570100010012570100020001741057010003000557040c0757010003001057010004000e570200" + }, + { + "filename": "33-okayama-monkey-heads", + "data": "0x00051a140605000aca050003000eca0300020010ca0200010003ca0601016a050102ca020001000801036a0601020001000801010f016a010f060102000100030106db01ca06db01010200010003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb0100020003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" + }, + { + "filename": "33-okayama-peach-heads", + "data": "0x00041e15030d00015f0d000a00075f0a0007000d5f070006000f5f06000500025f01570e5f05000500015f0157065f01e5085f05000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400095f01e5095f04000400095f01e5095f04000400095f01e5095f040002000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f0322010002000322055f0382095f02220300040002220f5f02220400060002220b5f02220600" + }, + { + "filename": "33-okayama-pheasant-heads", + "data": "0x0003191506019212000292110005920a540400010002920d54030002000f540200020002540601016a05010154020002000701036a0501020002000701010f016a010f05010200020002010cb901010200020001540eb90200020001540eb90200020001540eb90200020001540eb90200020001540eb902000200025407b9036d03b9020003000754096d03000854086d03000e540100016d03000e1d0200" + }, + { + "filename": "34-hiroshima-manju-choco-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad02880385028802ad0400010005ad01880585028804ad0100010001ad05880585058801ad0100010001ad01880d85018801ad0100010001ad02880b85028801ad0100020001ad01880b85018801ad0200020001ad02880985028801ad0200020001ad01880b85018801ad0200010002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad0100020002ad02880785028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-custard-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288016d028802ad0500040002ad0288036d028802ad0400010005ad0188056d028804ad0100010001ad0588056d058801ad0100010001ad01880d6d018801ad0100010001ad02880b6d028801ad0100020001ad01880b6d018801ad0200020001ad0288096d028801ad0200020001ad01880b6d018801ad0200010002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad0100020002ad0288076d028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-koshi-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880180028802ad0500040002ad02880380028802ad0400010005ad01880580028804ad0100010001ad05880580058801ad0100010001ad01880d80018801ad0100010001ad02880b80028801ad0100020001ad01880b80018801ad0200020001ad02880980028801ad0200020001ad01880b80018801ad0200010002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad0100020002ad02880780028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-maccha-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288010f028802ad0500040002ad0288030f028802ad0400010005ad0188050f028804ad0100010001ad0588050f058801ad0100010001ad01880d0f018801ad0100010001ad02880b0f028801ad0100020001ad01880b0f018801ad0200020001ad0288090f028801ad0200020001ad01880b0f018801ad0200010002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad0100020002ad0288070f028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-tsubu-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad028802850180028802ad0400010005ad01880145028501450185028804ad0100010001ad0588024501800285058801ad0100010001ad018802800245018502800385018001450185018801ad0100010001ad02880180018501450480018501800285028801ad0100020001ad018802850380018501450480018801ad0200020001ad0288018501450280024502800145028801ad0200020001ad018801850345028502800345018801ad0200010002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad0100020002ad02880180014502800385028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-okonomiyaki-heads", + "data": "0x00051b14050500015d0300045f0100019307000600025d01d9015f026a0122015d08000600012201d90101026a0122010101220800030001930101010001d90101015f016a015d0101015d01010122015f010105000500010101d90101015f016a0122015d010101220101025f010104000500012201d90101015f016a015d022201010122015d015f01d9010103000400015f015d01d90101015f016a0422015d0122015f02d9010102000300015f015d012201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101016a0722015f02d9010102000200016a015f0c22015f02d9010102000200026a015f0f22020002000560012501600125016001250160012501600125046002001623" + }, + { + "filename": "34-hiroshima-shrine01-heads", + "data": "0x00051c15050277130002770100157701000200131a020002001341020004000441020003230200044104000500021a03000123019301230300021a0500040004410200032302000441040002001341020002001341020005000241090002410500040003b3090003b30400050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b305000400018d01b30141038d0306038d014101b305000400078d0106068d0500" + }, + { + "filename": "35-yamaguchi-anglerfish-heads", + "data": "0x00091f15020c0005830c000900048301660683090008000a830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + }, + { + "filename": "35-yamaguchi-fuku-heads", + "data": "0x00051b14030400026212000400036211000400046203610495016105950300050001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed02610301016103950161015903610159016105950201010002610401059501590161015904950501010001610300130101000200026212010200020003621101020002000262010011010200060008010259050103000600080101590601030007000d010400" + }, + { + "filename": "35-yamaguchi-kawarasoba-heads", + "data": "0x00051e1504030001061600010002060700019e0300019e08000106020001060900019e0300019e0900010601000106080001da010101da010001da010101da05000306020001000306040001d0012301d0012301d0012301d0012301d00900040001060200011501230115012301150123011501230115012301150200010605000400010601000d1503000206020001000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb05000106010604000fe80300020601000100010603000fe802000106030002000106010011e8010001060300040002e80d2302e80200010602000300010c02230d0c0223010c04000200040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" + }, + { + "filename": "35-yamaguchi-shoin-heads", + "data": "0x00031715070100030c0c000200050c09000400060c060002000d23010001000f2301000223048805230388012302230e8802230e8802230388032304880323018801230f880588032304880323018806880123028801ca0288012303880a8801ca05880a8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c880100050009880200" + }, + { + "filename": "35-yamagudhi-footballfish-heads", + "data": "0x00031f15020900023402eb100008000134040001eb01da0e0007000134050001da015d01da0d0007000134040001da015d0101015d01da0c0008000134040001da015d01da0d000900023401eb020001da0e000c0002eb03830c0009000483016601eb0583090008000683013403830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + }, + { + "filename": "36-tokushima-awa-odori01-heads", + "data": "0x000118140d010002f80800010004f8030001f90200010006f8010001f90200010007f801060200020005f80106020001f90200012303f90106030001f9030003f9030001010100010003010267030102000401026701010400030103670500039e0367050002e2019e0367050004e2014f060002e2044f05000200044f050001000144044f050001000344014f06000300010107000200010108000200012301440700" + }, + { + "filename": "36-tokushima-naruto-wakame-heads", + "data": "0x00021a15070b000194035c04940b000348035c02480b00035c0100025c02000b00035c0200015c020004000748035c01480400020002480723035c012302480200010001480923025c0423014801000148042306de015c02de042301480148022302e90bde022301480148012304e905de015c05de01230148014807de045c06de0148014805de055c07de0148014806de035c03de02e903de014801480bde04e902de0148014811de014802480fde0248034801de055c07de034801001148010002000f48020004000b480400" + }, + { + "filename": "36-tokusima-whirlpools-heads", + "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" + }, + { + "filename": "37-kagawa-bonsai-heads", + "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" + }, + { + "filename": "38-ehime-iyokan-heads", + "data": "0x00051a140604000c4204000200084201e1074202000100024201250f42010002420125114201420125124201420125124214421442144214421442144214420100054203b30a42010002001042020003000e420300" + }, + { + "filename": "38-ehime-jakoten-heads", + "data": "0x0006191406020010d20100010001d203d102d2018e0bd201d204d10ed201d204d101d2018e0ad2018e01d201d204d106d2018e07d201d204d10ed201d204d10ed201d204d10ed201d204d10ed201d204d10dd2018e01d204d10ed201d204d105d2018e01d2018e06d201d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" + }, + { + "filename": "38-ehime-mandarin-orange-heads", + "data": "0x00061a140604000c4204000200084201e1074202000100024201250f4201000242012511420142012512420142012512421442144214421442144214420100054203b30a42010002001042020003000e420300" + }, + { + "filename": "38-ehime-onsen01-heads", + "data": "0x00031b15050700015504000155040001550400060002550300025503000255040005000255030002550300025505000400025503000255030002550600040002550300025503000255060004000255030002550300025506000400025503000255030002550600050002550300025503000255050006000255030002550300025504000200025502000255030002550300025501000155020001000255030002550300025503000255010002550100025503000255030002550300025503000255025502000255030002550300025504000255025502000155040001550400015505000255025512000255035510000355010003550e000355010002001255020004000e550400" + }, + { + "filename": "38-ehime-onsen02-heads", + "data": "0x00031b150507000101040001010400010104000600020103000201030002010400050002010300020103000201050004000201030002010300020106000400020103000201030002010600040002010300020103000201060004000201030002010300020106000500020103000201030002010500060002010300020103000201040002000374013f0201033f0201033f02010274020001000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f02740274023f0201033f0201033f0201043f02740274023f0101043f0101043f0101053f02740274123f02740374103f0374010003740e3f0374010002001274020004000e740400" + }, + { + "filename": "38-ehime-onsen03-heads", + "data": "0x00031c14050b00010c0b000900050c09000800016101740161017401610174016108000700017407de01740700020001610300016101de01ae05de01ae01de0161030001610200030001740161017401de04ae01de04ae01de0174016101740300030003de03ae053f03ae03de0300060003ae013f02e70126013f03ae0600060003ae053f03ae060006000bae060006000b3f0600013f03000f3f0300013f0100153f010002001321020004000f01040002000157010004ae015702ae015702ae015704ae0100015702000200010c010001ae0306015701ae033601ae0157030601ae0100010c02000200010c010001ae030602ae033602ae037401ae0100010c0200" + }, + { + "filename": "38-ehime-tai-somen-heads", + "data": "0x00031c18010d000189020001890a000b0001890100015f01890100015f0189090008000357015f01890157015f01890157015f018902570600070003570b20015705000600025701890e200400050002570189102003000500015701890320018d0220018d0220018d0220018d0520020001200300025714200100010001200200015715200100010001890120010001571220028d01200100020001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a20010603200306012003000257018907060401080601000400035712060200040004570f06040004000157010002570400068904000157040004000157010001570f000157040004000157110001570400040001571600" + }, + { + "filename": "38-ehime-taimeshi-heads", + "data": "0x00041a16060600082306000300030f0848022304000200050f01e90182020101e9015f01010248012303000100060f02e9018202e90182010101e901010148012302000100030f0282015f02e9015f02e9015f02e9015f01010148012301000100020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f02010148012301230148030f03e9044202e9028202e901480123012301480201025f0182044201010142015f04e90148012301230148015f028202e9044201e4014204e9015f0148012301230148018203e9015f064202e9015f01820101014801230123014803e9015f018201e9044201e9015f02820201014801230123014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e901010148012301000100012301480101018201e90101015f03e90182015f018202e9010101480123010002000123014803010182015f03e901010282010101480123020003000123024802010182015f02e9020102480123030004000223084802230400060008230600" + }, + { + "filename": "39-kochi-bonito-heads", + "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" + }, + { + "filename": "40-fukuoka-mojiko-heads", + "data": "0x00031e14030d0001960d0009000196030001960300019609000600019602000196072701960100019607000600019602000927010001960700060002610b27026106000500046102270106016b010101270106022704610500050001a501e0010601a5032701a501aa01a5032701a501e0010601a50500040009aa015709aa0400050001c1025701c1025701e9035701e9025701c1025701c105000200032701c1015701e001c102e001e903e001e902e001c1015701e001c1032702000100042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c1042701000100042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e001060157015702060157010601c10157010601c1010301460197034601970146010301c10157010601c101060157020601570557017f0257017f0103019701460397014601970103017f0257017f0557" + }, + { + "filename": "40-fukuoka-tenmangu-heads", + "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" + }, + { + "filename": "41-saga-mudskipper-fiddlercrab-heads", + "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" + }, + { + "filename": "41-saga-yoshinogari-heads", + "data": "0x0002181409030001d8010001d8010001d8010001d8010001d80300040007d80400030009c9030002000bd8020001000dc9010002000b99020001000d9901000f99010001bb050001bb050001bb010001de01bb050001bb050001bb01de0fde01de01bb050001bb050001bb01de0fde010001bb050001bb050001bb0100010001bb050001bb050001bb0100010001bb050001bb050001bb010001000dbb0100010001bb050001bb050001bb0100010001bb050001bb050001bb0100" + }, + { + "filename": "42-nagasaki-champon-heads", + "data": "0x00071a1406060008e00600040003e0065703e00400020003e00257066d025703e00200010002e00157032d01d4014e02eb0166012d026d025702e0010002e00257036602eb02d40166012d014e02d4025702e001e00257014e05d4014e01970166012d02d4026d025701e001e00157016d024e01d402eb02d4019702d402eb014e0297015701e001e0015702eb0266039703660197024e032d015701e002e00157032d02d401eb032d019701eb01d4036602e0010002e0016d01eb024e05d4019701eb014e036d01e001000100016f03e0015702d401b3016d02eb016d025703e0016f01000200026f03e0015701cd01b301cd025703e0026f02000300036f08e0036f030004000c6f0400" + }, + { + "filename": "42-nagasaki-meganebashi-heads", + "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e04080208017e0400017e0408017e0400017e020802080600017e0208017e060002080108017e060004080600017e0108017e080002080800017e019108000291080001910191080002910800019102910700039107000191010003910300029102000391030002910100030004910600049103000700019101000191010001910800" + }, + { + "filename": "42-nagasaki-saseboburger-heads", + "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" + }, + { + "filename": "43-kumamoto-karashirenkon-heads", + "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" + }, + { + "filename": "43-kumamoto-kumamotocastle-heads", + "data": "0x00021d15020800019d12000700019d0101019d11000600059d10000600050e1000040002c80206019d020602c80e00040002c8029d0101029d02c80e00030002c8029d0323029d02c80d0003000501019d05010800019d04000300010e0223010e019d0101019d010e0223010e0700019d0101019d0300020001c8036f019d0323019d036f01c8060003060300020001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c802000100019d0101019d0c01026f020101c80192019d019202c8010001000392010e0623010e0223020e029201230192019d0301019d01010100010003920c0e0492052301920100059d0100010101000101010001010100010101fa010101fa0a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" + }, + { + "filename": "44-oita-beppujigoku-heads", + "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" + }, + { + "filename": "44-oita-usajingu-heads", + "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" + }, + { + "filename": "45-miyazaki-aoshima-heads", + "data": "0x00061d14030500109205000600027f0192047f0192047f0192017f0600080001bf040001bf040001bf0700010001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf0700010004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf01920600030005e102bf080002bf0600030003e1011b019202bf010006af019202bf0600020002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d60100010001e1011b02e1019d01e1019209af019201af01990221039901000100011b03e1019d0caf01d6026001d6016001d60200" + }, + { + "filename": "45-miyazaki-chickennanban-heads", + "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" + }, + { + "filename": "46-kagoshima-goromon-heads", + "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" + }, + { + "filename": "46-kagoshima-shirokuma-heads", + "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" + }, + { + "filename": "47-okinawa-goya-chanpuru-heads", + "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" + }, + { + "filename": "47-okinawa-shuricastle-heads", + "data": "0x00051e1403050001d00f0001d00500050002c40d0002c40500050001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10500050001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10500040001be01d001be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01d001be0400020001be01a101be01a101be01a101be01a101be01a101be01c401be01a101be01a101be01a101be01a101be01a101be020004000848035408480400020001be01a101be01a101be01a101be01a1024d01a601be01a6024d01a101be01a101be01a101be01a101be020001be01a101be01a101be01a101be01a101be014d02a6039202a6014d01be01a101be01a101be01a101be01a101be0200044801be01a1014d01a601d0029201d0029201d001a6014d01a101be0448020002000148013301480133014801330148094d0148013301480133014801330148020002000748014d010101a603be01a60101014d074802000200014801010548014d0101014d0301014d0101014d02480201014801010148020002000148010104480105014d01be01a603be01a601be014d0105014802010148010101480200010007970105014d01be014d03be014d01be014d010507970100019707ee01d7095901d707ee0197" + }, + { + "filename": "47-okinawa-siisa-heads", + "data": "0x00041d14030200033706000437060003370200030004370200033702000337020004370300040008370200083704000300023703460137034602370246023702460337030003000237026602370266043701230337012303370300020001460237016601230237016601230337012301370123013701230137012302370146020001000246143702460100020001460337042307370423023701460200010003460837024606370123013702460200030002460637014602000146063702460300030002370746020007460237030001000146010003370246023701460137020001370146023702460337010001460100024601000937020009370100024601460b3702000b37014601000a370123020001230a3701000200013701460837022308370146013702000400023701660200023701660200016602370200016602370400" + } + ], + "glasses": [ + { + "filename": "glasses-hip-rose-glasses", + "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" + }, + { + "filename": "glasses-square-black-eyes-red-glasses", + "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" + }, + { + "filename": "glasses-square-black-rgb-glasses", + "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-black-glasses", + "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" + }, + { + "filename": "glasses-square-blue-med-saturated-glasses", + "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" + }, + { + "filename": "glasses-square-blue-glasses", + "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" + }, + { + "filename": "glasses-square-frog-green-glasses", + "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" + }, + { + "filename": "glasses-square-fullblack-glasses", + "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-green-blue-multi-glasses", + "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" + }, + { + "filename": "glasses-square-grey-light-glasses", + "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" + }, + { + "filename": "glasses-square-guava-glasses", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-honey-glasses", + "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" + }, + { + "filename": "glasses-square-magenta-glasses", + "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" + }, + { + "filename": "glasses-square-orange-glasses", + "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" + }, + { + "filename": "glasses-square-pink-purple-multi-glasses", + "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" + }, + { + "filename": "glasses-square-red-glasses", + "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" + }, + { + "filename": "glasses-square-smoke-glasses", + "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" + }, + { + "filename": "glasses-square-teal-glasses", + "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" + }, + { + "filename": "glasses-square-watermelon-glasses", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-yellow-orange-multi-glasses", + "data": "0x000b17100703000626010006130300012602010223012601000113020102230113034201260201022301260142011302010223011301260200012602010223012601000113020102230113012602000126020102230126010001130201022301130300062601000613" + }, + { + "filename": "glasses-square-yellow-saturated-glasses", + "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" + } + ] + } +} diff --git a/contract/test/image-local-data2.json b/contract/test/image-local-data2.json new file mode 100644 index 00000000..a2e18ce7 --- /dev/null +++ b/contract/test/image-local-data2.json @@ -0,0 +1,440 @@ +{ + "bgcolors": [ + "d5d7e1", + "e1d7d5" + ], + "palette": [ + "", + "ffffff", + "c5b9a1", + "cfc2ab", + "63a0f9", + "807f7e", + "caeff9", + "5648ed", + "5a423f", + "b9185c", + "b87b11", + "fffdf2", + "4b4949", + "343235", + "1f1d29", + "068940", + "867c1d", + "ae3208", + "9f21a0", + "f98f30", + "fe500c", + "d26451", + "fd8b5b", + "5a65fa", + "d22209", + "e9265c", + "c54e38", + "80a72d", + "4bea69", + "34ac80", + "eed811", + "62616d", + "ff638d", + "8bc0c5", + "c4da53", + "000000", + "f3322c", + "ffae1a", + "ffc110", + "505a5c", + "ffef16", + "fff671", + "fff449", + "db8323", + "df2c39", + "f938d8", + "5c25fb", + "2a86fd", + "45faff", + "38dd56", + "ff3a0e", + "d32a09", + "903707", + "6e3206", + "552e05", + "e8705b", + "f38b7c", + "e4a499", + "667af9", + "648df9", + "7cc4f2", + "97f2fb", + "a3efd0", + "87e4d9", + "71bde4", + "ff1a0b", + "f78a18", + "2b83f6", + "d62149", + "834398", + "ffc925", + "d9391f", + "bd2d24", + "ff7216", + "254efb", + "e5e5de", + "00a556", + "c5030e", + "abf131", + "fb4694", + "e7a32c", + "fff0ee", + "009c59", + "0385eb", + "00499c", + "e11833", + "26b1f3", + "fff0be", + "d8dadf", + "d7d3cd", + "1929f4", + "eab118", + "0b5027", + "f9f5cb", + "cfc9b8", + "feb9d5", + "f8d689", + "5d6061", + "76858b", + "757576", + "ff0e0e", + "0adc4d", + "fdf8ff", + "70e890", + "f7913d", + "ff1ad2", + "ff82ad", + "535a15", + "fa6fe2", + "ffe939", + "ab36be", + "adc8cc", + "604666", + "f20422", + "abaaa8", + "4b65f7", + "a19c9a", + "58565c", + "da42cb", + "027c92", + "cec189", + "909b0e", + "74580d", + "027ee6", + "b2958d", + "efad81", + "7d635e", + "eff2fa", + "6f597a", + "d4b7b2", + "d18687", + "cd916d", + "6b3f39", + "4d271b", + "85634f", + "f9f4e6", + "f8ddb0", + "b92b3c", + "d08b11", + "257ced", + "a3baed", + "5fd4fb", + "c16710", + "a28ef4", + "3a085b", + "67b1e3", + "1e3445", + "ffd067", + "962236", + "769ca9", + "5a6b7b", + "7e5243", + "a86f60", + "8f785e", + "cc0595", + "42ffb0", + "d56333", + "b8ced2", + "b91b43", + "f39713", + "e8e8e2", + "ec5b43", + "235476", + "b2a8a5", + "d6c3be", + "49b38b", + "fccf25", + "f59b34", + "375dfc", + "99e6de", + "27a463", + "554543", + "b19e00", + "d4a015", + "9f4b27", + "f9e8dd", + "6b7212", + "9d8e6e", + "4243f8", + "fa5e20", + "f82905", + "555353", + "876f69", + "410d66", + "552d1d", + "f71248", + "fee3f3", + "c16923", + "2b2834", + "0079fc", + "d31e14", + "f83001", + "8dd122", + "fffdf4", + "ffa21e", + "e4afa3", + "fbc311", + "aa940c", + "eedc00", + "fff006", + "9cb4b8", + "a38654", + "ae6c0a", + "2bb26b", + "e2c8c0", + "f89865", + "f86100", + "dcd8d3", + "049d43", + "d0aea9", + "f39d44", + "eeb78c", + "f9f5e9", + "5d3500", + "c3a199", + "aaa6a4", + "caa26a", + "fde7f5", + "fdf008", + "fdcef2", + "f681e6", + "018146", + "d19a54", + "9eb5e1", + "f5fcff", + "3f9323", + "00fcff", + "4a5358", + "fbc800", + "d596a6", + "ffb913", + "e9ba12", + "767c0e", + "f9f6d1", + "d29607", + "f8ce47", + "395ed1", + "ffc5f0", + "cbc1bc", + "d4cfc0" + ], + "images": { + "heads": [ + { + "filename": "101-head-01-hokkaido-heads", + "data": "0x00021f1a0109000154140008000354130006000154010004541200090004541100090005541000090006540e000154090007540c000254090009540600015403000154010009000c540200025402000154020009000f540200015403000800105406000700125404000154070012540100025402000300025403001254040004000254010011540600040010540a00030010540b00020010540c000100035401000354020007540d000100025403000154040005540e00010002540a0003540e00020003540a0001540e0002000454180001000354010001541800010002541b00" + }, + { + "filename": "102-head-02-aomori-heads", + "data": "0x00021b17040d00015409000c0003540400015403000c0005540100025403000c00085403000b00055401000254040005000154010001540300045402000254040004000554020001540500025404000500045407000354040006000454020001540300035404000500055402000254020003540400050005540200035401000354040005000f54030004001054030002001254030001001354030015540200010015540100010005540100055401000a5401000154060003540300085401000e0004540100015403000e00025407000e0001540800" + }, + { + "filename": "103-head-03-iwate-heads", + "data": "0x00021717090900015404000600055403000200015401000754030002000a54020001000a54030001000b54020002000b5401000d54010001000c5401000d54010001000d5401000d540d5401000e540c54020001000c5401000c54020001000c54010001000a540300020006540600040004540600050001540800" + }, + { + "filename": "104-head-04-miyagi-heads", + "data": "0x00031c1808060001540a00025401000500045408000254010003000954040002540100015404000754030001540100025402000500085401000454020004000d54030003000f54020004000d54030003000f54020004000d54030004000d54010001540100030008540100015403000254020003000954050001540200020009540900020008540a00020008540a00010008540b0009540b0009540b00020007540b00050003540c00060002540c00" + }, + { + "filename": "105-head-05-akita-heads", + "data": "0x00031617090300055403000254040009540400095403000a5403000954010002000a540100015401000a5401000d5403000854020004000854010004000754020004000754020004000754020004000654030003000754030003000754030002000954020002000a540100040007540200050007540100070003540300" + }, + { + "filename": "106-head-06-yamagata-heads", + "data": "0x000318180a05000254070005000454050004000754030004000854020004000954010003000b5402000c5401000d5401000c5401000e5402000c5402000c5404000954010004000854020004000854020002000a540200020009540300020008540400020007540500020007540500030006540500060003540500" + }, + { + "filename": "107-head-07-fukushima-heads", + "data": "0x00051b17030e00035407000e0006540200015401000800035403000654020002540700055402000a5406001254050013540500135403001554185401001754010017541854020016540200075402000d540100065406000a540100010003540a00095401000e00095401000f000354010002540300100001540700" + }, + { + "filename": "108-head-08-ibaraki-heads", + "data": "0x0003191807090001540300015404000900025401000554010009000754020009000754020008000854020008000754030008000754030008000654040008000654040007000754040004000a54040002000b54050002000b5405000e5404000e54040002000c54040003000c54030003000c54030004000c5402000700045403000254020010000154010011000154" + }, + { + "filename": "109-head-09-tochigi-heads", + "data": "0x000418160709000454040007000854020005000b54010003000d54010002000e54010001000f54010002000e54010001000f54010001001054105401001054010003000d54010002000e54010002000e54010002000d54020001000e54020002000954010001540400030006540800060003540800" + }, + { + "filename": "110-head-10-gunma-heads", + "data": "0x00021c17060c00015409000a00035409000a000454080009000854050009000754060007000a54050005000b54060002000e54060001000f5406000100105405001254040011540500115405000100025401000d54050004000c54060004000e5404000300095401000754020004000754070003540100030008540a000154040005540d00040003540f00040002541000" + }, + { + "filename": "111-head-11-saitama-heads", + "data": "0x00071c1403080002540f00080005540c000700095401000254060007000e54040005001154030003001354030001001654020017540200185401001854010001000554010012540300025405000f540d000c540e000254020002540500" + }, + { + "filename": "112-head-12-chiba-heads", + "data": "0x000219170801541000010001540f00010002540e000200035404000354050002000c54030001000e5402000100105402000b540400020001540100085405000500065406000400065407000300075407000200085407000100095407000a540700020008540700010009540700010008540800010004540c00020002540d0004540d00010002540e00" + }, + { + "filename": "113-head-13-tokyo-heads", + "data": "0x00091c140301000254160007541200010009540f0001000a540300025402000654010002001654010003001654040015540600135407000f54010001540100080006540300055403000c0003540400045402000d000154070002540200" + }, + { + "filename": "114-head-14-kanagawa-heads", + "data": "0x00041d160306000254120007000254110007000354060004540600070007540300055404000600095402000754020006000a54010009540400155401000200145404000100165403001654040002001454040002001454040003000c5401000654040003000754090004540300020006540c0005540100020005540d0004540200020005540e0004540100030005540c000254040004000254010001540d0002540300" + }, + { + "filename": "115-head-15-niigata-heads", + "data": "0x00021b170413000254020013000254020009000154090004540800015409000554070002540900035402000700035407000454020008000254050006540200070002540400095401000c00095402000c00095402000c00085403000b00095403000a000854050009000754070008000954060007000954070004000d54060002000f540600085402000554010001540600010002540100035403000454090001000154090002540a000b0001540b00" + }, + { + "filename": "116-head-16-toyama-heads", + "data": "0x00051b17050300045409000454020002000454090006540100020003540a00065401000100055408000854010007540600085401001554165401001554165401001554010014540100010014540100010013540200145402000b54010001540100065402000854080003540300010006540f0001000154030002540f00050001541000" + }, + { + "filename": "117-head-17-ishikawa-heads", + "data": "0x00031517080a0003540700055401000600065401000600045403000500035405000500035401000154030006000454030006000454030007000154050006000254050006000154060005000354050005000254060004000454050003000454060002000554060001000754050007540600010007540500020005540600050002540600" + }, + { + "filename": "118-head-18-fukui-heads", + "data": "0x00041a18020c0001540b000b0003540a000c00035409000b0005540100025405000a000a5404000a000d54010009000d54020009000d5402000a000d5401000a000e540b000d540c00035401000254060009000154010004540900090001540100015401000254090006000154020003540c00070005540c000100015401000154010006540d00025401000554010001540e0008541000010007541000020004541200" + }, + { + "filename": "119-head-19-yamanashi-heads", + "data": "0x00051a1806040002540e00030003540e00010001540100065401000354070001000f5404001054040001001054030012540200145401001254010001001354020012540200115401000100105403000200055401000754050001000654030005540500010006540d00030003540e00040002540e00040003540d00050002540d00" + }, + { + "filename": "120-head-20-nagano-heads", + "data": "0x000319170b0b000254010006000154020005540500095405000754020005000754020004000754030003000854030003000a54010003000954020002000b54010002000a54020003000a5401000200085401000354095404000154010008540500020006540600020007540500030005540600030005540600020006540600020004540800" + }, + { + "filename": "121-head-21-gifu-heads", + "data": "0x00031817060c0001540100025402000b000754070002540100085407000a54010007000a54010006000a54020006000b54010006000a5402000700085403000800065404000100025401000b54030001000f5402001054020001001054010002001054020010540300055402000754010003000454040006540100020004540600015401000254020002000154010002540c00050001540c00" + }, + { + "filename": "122-head-22-shizuoka-heads", + "data": "0x00031d14050a0001540d00090002540d000a0001540d00090002540400015408000a000154040003540200035401000800035401000154020008540100060007540200075402000500095401000754020005000c540200055404000c5404000354010003000c540600035403000d5402000554010002000c54040006540c54070005540d540500055401000c5407000454010004000254020003540700045402000a000154080002540300" + }, + { + "filename": "123-head-23-aichi-heads", + "data": "0x00041c170505000154110001000154010004541000010007540f0001000854020002540300015406000e54010002540200025402001754175401001554010001000354010011540100020001540100115402000400105403000300115403000300035401000d540300020001540100015401000d5404000400015402000a540600030002540500015402000354070004000254060001540100025407000b000554070007000154010005540900060005540c00" + }, + { + "filename": "124-head-24-mie-heads", + "data": "0x000318170b06000254050007000254040007000354030006000354040005000454040002000654050001000654060002000554060002000754040002000854030004000854010002000b540200075401000254010003000554050002000354080002000254090003000254080001000354090003540a0002540b00010001540b00" + }, + { + "filename": "125-head-25-shiga-heads", + "data": "0x000316160807000254050007000354040006000554030003000154010007540200030003540100015401000354020003000354030004540100010004540500035401000654040003540100010005540300035402000100045403000454020001000354020007540100010003540300075402000154020009540100025401000a540100025401000954010001000c54010002000a540200020009540300040003540700050002540700" + }, + { + "filename": "126-head-26-kyoto-heads", + "data": "0x0005171507030003540a000154010004540a0005540b0006540100025407000300045401000154070003000654070001000a54050002000b54030003000154010008540300050008540300080005540300080005540300070007540200090001540100035402000b00045401000c0004540c00025401000154" + }, + { + "filename": "127-head-27-osaka-heads", + "data": "0x000616150b05000254010001540200060004540100060005540600055406000554060005540500065405000554010006000454010006000354020005000554010005000654020001540100075403000754010001000554050003540800" + }, + { + "filename": "128-head-28-hyogo-heads", + "data": "0x0004181d07040005540800020007540800030007540100015405000300095405000300095405000400065407000400065407000400085401000154030002000c54030003000e5402000f5401000f5401001054010011541154010010540100025405000754010001540a000454030011000a0001540600090001540700080002540700070003540700060005540600070003540700070001540900" + }, + { + "filename": "129-head-29-nara-heads", + "data": "0x000316140b02000154080002000254010002540100015402000200075402000100075403000100075403000200085401000200095401000854020001000854020002000754020003000654020001000854020001000854020008540300095402000100065404000100055405000100015401000154010001540500" + }, + { + "filename": "130-head-30-wakayama-heads", + "data": "0x0004161606080002540600015402000754060001000a5405000200085406000100085407000100085407000200065408000100085407000a54060009540700020007540100015401000154030003000a54030005000954020006000954010005000b54060009540100070009540900055402000c0001540300" + }, + { + "filename": "131-head-31-tottori-heads", + "data": "0x00091c13061200025402000100015404000254040002540200045402000200015401001054020003001254010002001354010002000554010004540200085402000554030001540400075406540a00035401000254010005540a00015405000454120002541400" + }, + { + "filename": "132-head-32-shimane-heads", + "data": "0x000319190710000254100002540e000154030012001200120012000e00035401000b00055402000a00075401000b0006540100090008540100080007540300070008540300050007540600040006540800030008540700020004540c0005540d00010004540d0004540e00010003540e00010002540f00" + }, + { + "filename": "133-head-33-okayama-heads", + "data": "0x00031b1606050002540400025408000500045401000554060004000c540400015404000c540100035401000200125401000100125402001354020001001154030012540300125403001254030001001154030001001254020001001054040001001154030002000f54040002000a5402000254050003000b5407000300035402000554080004000154040001540b00" + }, + { + "filename": "134-head-34-hiroshima-heads", + "data": "0x00041c19020f000254010001540100035403000f00095402000e000a5402000d000b5402000c000c5402000d000b54020004000154010001540100015401000f540100020017540100030015540200020017540100020017540100010019541a54010019540100155401000354010005540100025401000954010002540200015401000200035404000a540200015401000154020002000254010001540300055405000354040003000154060002540300025409000a000154010002540c00090001541000080002541000" + }, + { + "filename": "135-head-35-yamaguchi-heads", + "data": "0x00051e17030d0001540d000c0002540d000b0003540d00090004540e000a0004540600015406000100035401000254020007540300025406000300015401000154010008540500015406000f540200015401000254060001001554050017540400010017540300010017540300175404000e54020008540300010002540100045401000154010001540300015401000654040001000154030002540b00045401000254010001540154130002540100015401000154010015000154050014000154020001540300" + }, + { + "filename": "136-head-36-tokushima-heads", + "data": "0x00031b15031500015402001200035403001100055402000b0005540100055402000400035402000c54030003001254030002001254040001001554020001001654010001001654010016540200020016540500025402000d54020009000b54040009000a5405000c00065406000c00045408000b00055408000c0003540900" + }, + { + "filename": "137-head-37-kagawa-heads", + "data": "0x00041c15041200045402001000055403000d0001540200055403001200015401000154030018000400015404000254010001540100025408000800085401000154060007000c54050005000e5405000154010001540100115403000100165401000200165402000f540500025402000d54090002000554030002540c00020003541300010003541400020001541500" + }, + { + "filename": "138-head-38-ehime-heads", + "data": "0x00021b1a020f00015409000f00015409001000015408000e0001540a000d00035409000900015402000454080001540c00055402000354010002540b000e540a000f540a00095406000a000754080009000854080007000954090006000a54090005000b5409000300025401000a54090001000254030006540d000154040008540c00070007540b00080004540d00060005540e0007000254010001540e00060004540f0005000154010003540f0007000154010001540f00" + }, + { + "filename": "139-head-39-kochi-heads", + "data": "0x00041a15030d0002540400015403000900085401000254030008000c54030007000e54020007000e54020006000854020007540300095406000454010004000754080003540100050005540a0002540100040006540b000154010001000154010006540e00020006540f00020006540f0002000454110003000454100002000454110001000154010001540100015411000154050001541000" + }, + { + "filename": "140-head-40-fukuoka-heads", + "data": "0x00021b18051200015403000b00045402000154040009000954040007000a54050008000a54040008000a5404000500015401000c5403000300015402000d5403000200035402000f54010014540100020014541154050004000c5406000600015402000754060009000654070008000854060007000954060006000954070005000b5406000500075401000354060006000454040002540600070002540d00070002540d00" + }, + { + "filename": "141-head-41-saga-heads", + "data": "0x00031c19040300015414000200045412000200045412000300045406000354080001000154020003540100095407000200115403000254040010540100035403001554030015540100015401001354020002540100135402001454040001001254050001001254050002000d5401000254060004000a5403000154060006000554010001540b00050007540c00060006540c00070006540b00080006540a00090005540a000c0002540a00" + }, + { + "filename": "142-head-42-nagasaki-heads", + "data": "0x00011a1908080001540900070002540900070002540900070001540a00070001540a00060001540b00060001540b00120012000b00015406000b0001540600120012000900015408001200080004540600050001540200015401000254060008000154020002540500050001540400015401000254040004000354040001540100025403000400025404000254020002540200030001540100015405000754010002540a000154020002540100035408000254010002540100015401000154080001540600" + }, + { + "filename": "143-head-43-kumamoto-heads", + "data": "0x00031816040e00035403000a0002540300035402000800065401000354020007000c54010007000c54010008000b54010009000b5409000a5401000a000854020007000a540300060001540300075403000154010001540600075404000100025402000354010006540500035401000354020006540500035403000154010009540300010002540100015402000a5403000254050009540400010001540100015402000b54030003000154020003540100065404000a0004540600" + }, + { + "filename": "144-head-44-oita-heads", + "data": "0x00041915040b0003540700060002540200055406000600095406000200025401000a54060001000c5401000154060001000a540100015408000b540a0001000a54020001540100035403001154040010540100015403000100025402000c5404000100035402000e5401000200025402000c54030007000c540100015407000d54010007000c54020008000254010004540200035401000b000254040001540300" + }, + { + "filename": "145-head-45-miyazaki-heads", + "data": "0x0004161708070001540100015402000254060008540500085401000500075402000400095401000400085402000500075402000400075403000500065403000400075403000a540400010009540400020008540400030007540400030008540300050005540400050005540400070002540500060003540500080001540500" + }, + { + "filename": "146-head-46-kagoshima-heads", + "data": "0x0003181f03070001540100015402000254070007000754070006000a54050007000954050007000a5404000200015403000b54040007000b54030001000154060005540200045402000154080003540300065409000354010008540900025403000754080003540400055401000600065403000454020007000554040004540100070006540300045401000c0001540200045402000f00035403000e0002540500150015001500030001540f0001540100130001540100120002540100120002540100120001540200060002540300015405000254020009000154010002540400025402000a0004540700" + }, + { + "filename": "147-head-47-okinawa-heads", + "data": "0x00011c15050f00015407000e000154070001541700170017001300015403001300025402001200035402000b0001540500045402000d00025402000354030001540c00075403000e00045405000d00035407000b00045408000a0002540b000a0003540a000b0003540900090003540b0003000154040003540c00090003540b00090002540c00" + } + ] + } +} \ No newline at end of file diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts new file mode 100644 index 00000000..6052aeb0 --- /dev/null +++ b/contract/test/localNouns.ts @@ -0,0 +1,450 @@ +import { expect } from 'chai'; +import { ethers, network, SignerWithAddress, Contract } from "hardhat"; +import { addresses } from '../../src/utils/addresses'; +import { ethers } from 'ethers'; +import { abi as sampleTokenAbi } from "../artifacts/contracts/sampleToken.sol/sampleToken"; + +let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, user3: SignerWithAddress, user4: SignerWithAddress, user5: SignerWithAddress, admin: SignerWithAddress; +let token: Contract, minter: Contract, provider: Contract, tokenGate: Contract, sampleToken: Contract; + +const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const nounsSeederAddress = addresses.nounsSeeder[network.name]; +const localSeederAddress = addresses.localSeeder[network.name]; +const sampleTokenAddress = addresses.sampleToken[network.name]; + +before(async () => { + /* `npx hardhat node`実行後、このスクリプトを実行する前に、Nouns,LocalNounsの関連するコントラクトを + * デプロイする必要があります。(一度実行すると、node停止までは再実施する必要なし) + # cd contract + # npx hardhat run scripts/deploy_nounsDescriptorV1.ts + # npx hardhat run scripts/populate_nounsV1.ts + # npx hardhat run scripts/deploy_localNouns.ts + # npx hardhat run scripts/populate_localNouns.ts + # npx hardhat run scripts/deploy_sample.ts + */ + + [owner, user1, user2, user3, user4, user5, admin] = await ethers.getSigners(); + + const factoryTokenGate = await ethers.getContractFactory('AssetTokenGate'); + tokenGate = await factoryTokenGate.deploy(); + await tokenGate.deployed(); + + const factoryProvider = await ethers.getContractFactory('LocalNounsProvider'); + provider = await factoryProvider.deploy( + nounsDescriptorAddress, localNounsDescriptorAddress, nounsSeederAddress, localSeederAddress); + await provider.deployed(); + // console.log(`##LocalNounsProvider="${provider.address}"`); + + const factoryToken = await ethers.getContractFactory('LocalNounsToken'); + token = await factoryToken.deploy(provider.address, owner.address); + await token.deployed(); + // console.log(`##LocalNounsToken="${token.address}"`); + + const factoryMinter = await ethers.getContractFactory('LocalNounsMinter'); + minter = await factoryMinter.deploy(token.address, tokenGate.address); + await minter.deployed(); + // console.log(`##LocalNounsMinter="${minter.address}"`); + + await token.setMinter(minter.address); + + // sampleTokenのコントラクト定義 + sampleToken = await ethers.getContractAt(sampleTokenAbi, sampleTokenAddress); + + // tokenGateにsampleTokenをセット + await tokenGate.setWhitelist([sampleToken.address]); + +}); + +describe('mint functions', function () { + let result, tx; + + it('mint from non-minter', async function () { + await expect(token.connect(user1).functions.mint()) + .revertedWith('Cannot use this function'); + + await expect(token.connect(user1).functions.mintSelectedPrefecture(user1.address, 1, 1)) + .revertedWith('Sender is not minter nor owner'); + + await expect(token.connect(user1).functions.ownerMint([user1.address], [1], [1])) + .revertedWith('Ownable: caller is not the owner'); + + }); + + it('mint at lock phaze', async function () { + + const [phaze] = await minter.functions.phase(); + expect(phaze).to.equal(0); // Lock + + await expect(minter.connect(user1).functions.mintSelectedPrefecture(1, 1)) + .revertedWith('Sale is locked'); + + await minter.connect(owner).functions.setPhase(2); + const [phaze2] = await minter.functions.phase(); + expect(phaze2).to.equal(2); // PublicSale + + }); + + it('Invalid prefectureId', async function () { + + // OKパターンは別テストで実施 + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(48, 1, txParams)) + .revertedWith('Invalid prefectureId'); + }); + + it('mint from minter', async function () { + + const txParams = { value: ethers.utils.parseUnits("0.001", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(0, 1, txParams); + + const [balance] = await token.functions.balanceOf(user1.address); + expect(balance.toNumber()).to.equal(1); // user1は1つ保持 + + const [owner0] = await token.functions.ownerOf(0); + expect(owner0).to.equal(user1.address); + + const [totalSupply] = await token.functions.totalSupply(); + expect(totalSupply.toNumber()).to.equal(1); // tokenId=1 + + const [traits1] = await provider.functions.generateTraits(0); + console.log('mint from minter', traits1); + + }); + + it('multiple mint', async function () { + + const [balance0] = await token.functions.balanceOf(user3.address); + + const txParams = { value: ethers.utils.parseUnits("0.009", "ether") }; + await minter.connect(user3).functions.mintSelectedPrefecture(16, 3, txParams); + + const [balance] = await token.functions.balanceOf(user3.address); + + expect(balance.toNumber()).to.equal(3); // user3は3つ追加 + + const [owner0] = await token.functions.ownerOf(1); + expect(owner0).to.equal(user3.address); + + const [owner1] = await token.functions.ownerOf(2); + expect(owner1).to.equal(user3.address); + + const [owner2] = await token.functions.ownerOf(3); + expect(owner2).to.equal(user3.address); + + const [totalSupply] = await token.functions.totalSupply(); + expect(totalSupply.toNumber()).to.equal(4); // tokenId=1 + + // Traitsに指定した都道府県名が設定される + const [traits1] = await provider.functions.generateTraits(1); + const [traits2] = await provider.functions.generateTraits(2); + const [traits3] = await provider.functions.generateTraits(3); + // head,accessoryがランダムなので県のみチェック(head,accessoryは目視) + console.log('multiple mint', traits1); + console.log('multiple mint', traits2); + console.log('multiple mint', traits3); + expect(traits1.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); + expect(traits2.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); + expect(traits3.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); + + // 都道府県ごとのミント数 + const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(16); + expect(mintNumberPerPrefecture.toNumber()).to.equal(3); // tokenId=1 + + }); + + it('owner mint', async function () { + + const [balance3] = await token.functions.balanceOf(user3.address); + const [balance4] = await token.functions.balanceOf(user4.address); + const [balance5] = await token.functions.balanceOf(user5.address); + const [totalSupply] = await token.functions.totalSupply(); + + const txParams = { value: 0 }; + await token.connect(owner).functions.ownerMint([user3.address, user4.address, user5.address], [3, 5, 0], [1, 2, 20], txParams); + + const [balance3a] = await token.functions.balanceOf(user3.address); + const [balance4a] = await token.functions.balanceOf(user4.address); + const [balance5a] = await token.functions.balanceOf(user5.address); + + expect(balance3a.toNumber()).to.equal(balance3.toNumber() + 1); + expect(balance4a.toNumber()).to.equal(balance4.toNumber() + 2); + expect(balance5a.toNumber()).to.equal(balance5.toNumber() + 20); + + const [totalSupplya] = await token.functions.totalSupply(); + expect(totalSupplya.toNumber()).to.equal(totalSupply.toNumber() + 23); + + }); + + it('tokenGate', async function () { + + await minter.connect(owner).functions.setPhase(1); + const [phaze] = await minter.functions.phase(); + expect(phaze).to.equal(1); // PreSale + + const txParams = { value: ethers.utils.parseUnits("0.009", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 1, txParams)) + .revertedWith('TokenGate token is needed'); + + // sampleTokenをミント + await sampleToken.connect(user4).functions.mint(); + + await minter.connect(user4).functions.mintSelectedPrefecture(1, 3, txParams); + + const [balance] = await token.functions.balanceOf(user4.address); + + expect(balance.toNumber()).to.equal(3); // user4は3つ追加 + + await minter.connect(owner).functions.setPhase(2); + const [phaze2] = await minter.functions.phase(); + expect(phaze2).to.equal(2); // PublicSale + + }); + + it('Send eth', async function () { + + await minter.connect(owner).functions.setPhase(2); + const [phaze] = await minter.functions.phase(); + expect(phaze).to.equal(2); // PreSale + + // 都道府県指定 OKパターンは'multiple mint'テストで実施 + const txParams = { value: ethers.utils.parseUnits("0.0059", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 2, txParams)) + .revertedWith('Must send the mint price'); + + // 都道府県指定なし OKパターンは'mint from minter'テストで実施 + const txParams2 = { value: ethers.utils.parseUnits("0.0019", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(0, 2, txParams2)) + .revertedWith('Must send the mint price'); + + }); + +}); + +describe('determinePrefectureId', function () { + it('determinePrefectureId', async function () { + + await provider.connect(owner).functions.setRandomValueForTest(true); + let prefectureCount = new Array(47).fill(0); + + for (var i = 0; i < 300; i++) { + const [prefectureId] = await provider.connect(owner).functions.determinePrefectureId(i); + prefectureCount[prefectureId.toNumber() - 1]++; + } + + // 全ての都道府県が1以上出現する + for (var i = 0; i < prefectureCount.length; i++) { + expect(prefectureCount[i]).to.greaterThan(0); + // console.log("prefectureId", i, prefectureCount[i]); + } + + await provider.connect(owner).functions.setRandomValueForTest(false); + }); +}); + +describe('P2P', function () { + let tx, result, tokenId1: number; + const zeroAddress = '0x0000000000000000000000000000000000000000'; + const price = ethers.BigNumber.from('1000000000000000'); + + it('not on sale', async function () { + + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // セールなし + await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Token is not on sale'); + }); + + it('Over the mint limit', async function () { + + // mintMaxに現在の発行数+1をセット + const [totalSupply] = await token.functions.totalSupply(); + await minter.functions.setMintMax(totalSupply.toNumber() + 1); + const [mintMax] = await minter.functions.mintMax(); + expect(mintMax.toNumber()).to.equal(totalSupply.toNumber() + 1); + + const txParams = { value: ethers.utils.parseUnits("0.006", "ether") }; + await expect(minter.connect(user5).functions.mintSelectedPrefecture(47, 2, txParams)) + .revertedWith('Over the mint limit'); + + // 一つだけならOK + const [balance] = await token.functions.balanceOf(user5.address); + const txParams2 = { value: ethers.utils.parseUnits("0.003", "ether") }; + await minter.connect(user5).functions.mintSelectedPrefecture(47, 1, txParams2); + + const [balancea] = await token.functions.balanceOf(user5.address); + expect(balancea.toNumber()).to.equal(balance.toNumber() + 1); // user1は1つ保持 + + await minter.functions.setMintMax(1500); + const [mintMax2] = await minter.functions.mintMax(); + expect(mintMax2.toNumber()).to.equal(1500); + }); + + it('SetPrice', async function () { + await expect(token.connect(user2).setPriceOf(tokenId1, price)).revertedWith('Only the onwer can set the price'); + await token.connect(user1).setPriceOf(tokenId1, price); + result = await token.getPriceOf(tokenId1); + expect(result.toNumber()).equal(price); + + await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Not enough fund'); + + }); + + it('Purchase', async function () { + await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Not enough fund'); + + const balance1 = await ethers.provider.getBalance(user1.address); + const balanceT = await ethers.provider.getBalance(owner.address); + + await token.connect(user2).purchase(tokenId1, user2.address, zeroAddress, { value: price }); + result = await token.ownerOf(tokenId1); + expect(result).equal(user2.address); + + const balance12 = await ethers.provider.getBalance(user1.address); + expect(balance12.sub(balance1)).equal(price.div(20).mul(19)); // 95% + const balanceT2 = await ethers.provider.getBalance(owner.address); + expect(balanceT2.sub(balanceT)).equal(price.div(20).mul(1)); // 5% + + }); + + it('Attempt to setprice/buy by user1', async function () { + await expect(token.connect(user1).purchase(0, user2.address, zeroAddress, { value: price })).revertedWith('Token is not on sale'); + await expect(token.connect(user1).setPriceOf(tokenId1, price)).revertedWith('Only the onwer can set the price'); + }); +}); + +describe('P2PTradable', function () { + let result, tx, err, balance, tokenId1: number, tokenId2: number; + + it('mint for test', async function () { + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + }); + + it('Attempt to super functions', async function () { + await expect(token.connect(user2).executeTrade(tokenId2, tokenId1)).revertedWith('Cannot use this function'); + + await expect(token.connect(user2).putTrade(tokenId1, true)).revertedWith('Cannot use this function'); + + }); + + it('Attempt to trade non-tradable token', async function () { + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1)).revertedWith('TargetTokenId is not on trade'); + }); + + it('Attempt to execute trade non-owner token', async function () { + await expect(token.connect(user2).executeTradeLocalNoun(tokenId1, tokenId2)).revertedWith('Only the onwer can trade'); + }); + + it('Attempt to put trade non-owner token', async function () { + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [])).revertedWith('Only the onwer can trade'); + }); + + it('incorrect prefecutre id', async function () { + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [0])).revertedWith('incorrect prefecutre id'); + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [48])).revertedWith('incorrect prefecutre id'); + }); + + it('put trade', async function () { + // 希望都道府県外のトークンと交換しようとする + await token.connect(user1).putTradeLocalNoun(tokenId1, [1, 11, 12]); + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1)).revertedWith('unmatch to the wants list'); + + result = await token.connect(user1).getTradePrefectureFor(tokenId1); + expect(result.length).equal(3); + expect(result[0].toNumber()).equal(1); + expect(result[1].toNumber()).equal(11); + expect(result[2].toNumber()).equal(12); + + await token.connect(user1).putTradeLocalNoun(tokenId1, [10, 11, 12]); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1); + await tx.wait(); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + result = await token.connect(user1).ownerOf(tokenId1); + expect(result).equal(user2.address); + + result = await token.connect(user1).ownerOf(tokenId2); + expect(result).equal(user1.address); + }); + + it('put trade(都道府県指定なし)', async function () { + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + // 希望都道府県なしでトレードリストに出す + await token.connect(user1).putTradeLocalNoun(tokenId1, []); + + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + result = await token.connect(user1).getTradePrefectureFor(tokenId1); + expect(result.length).equal(0); + + tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1); + await tx.wait(); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + result = await token.connect(user1).ownerOf(tokenId1); + expect(result).equal(user2.address); + + result = await token.connect(user1).ownerOf(tokenId2); + expect(result).equal(user1.address); + }); + + it('cancel trade', async function () { + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + // 希望都道府県なしでトレードリストに出す + await token.connect(user1).putTradeLocalNoun(tokenId1, []); + + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + // オーなー以外がキャンセルしようとする + await expect(token.connect(user2).cancelTradeLocalNoun(tokenId1)).revertedWith('Only the onwer can trade'); + + // オーなーがキャンセルする + await token.connect(user1).cancelTradeLocalNoun(tokenId1); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1)).revertedWith('TargetTokenId is not on trade'); + + }); + +}); \ No newline at end of file diff --git a/contract/test/p2pTradable.ts b/contract/test/p2pTradable.ts new file mode 100644 index 00000000..ab3fac79 --- /dev/null +++ b/contract/test/p2pTradable.ts @@ -0,0 +1,138 @@ +import { expect } from 'chai'; +import { ethers, SignerWithAddress, Contract } from 'hardhat'; + +let owner: SignerWithAddress, + artist: SignerWithAddress, + user1: SignerWithAddress, + user2: SignerWithAddress, + user3: SignerWithAddress; +let token: Contract, token1: Contract, token2: Contract, token3: Contract; +let balanceO, balanceA, balance1, balance2, balance3; + +before(async () => { + [owner, artist, user1, user2, user3] = await ethers.getSigners(); + + const factory = await ethers.getContractFactory('SampleAP2PTradableToken'); + token = await factory.deploy(artist.address); + await token.deployed(); + + token1 = token.connect(user1); + token2 = token.connect(user2); + token3 = token.connect(user3); +}); + +describe('P2P', function () { + let result, tx, err, balance; + const zeroAddress = '0x0000000000000000000000000000000000000000'; + const price = ethers.BigNumber.from('1000000000000000'); + const tokenId0 = 0; + console.log(ethers.utils.formatEther(price)); + + it('Initial TotalSupply', async function () { + result = await token.totalSupply(); + expect(result.toNumber()).equal(0); + result = await token.balanceOf(user1.address); + expect(result.toNumber()).equal(0); + }); + it('Mint by user1', async function () { + tx = await token1.mint(); + await tx.wait(); + result = await token.totalSupply(); + expect(result.toNumber()).equal(1); + result = await token.balanceOf(user1.address); + expect(result.toNumber()).equal(1); + result = await token.ownerOf(tokenId0); + expect(result).equal(user1.address); + result = await token.getPriceOf(tokenId0); + expect(result.toNumber()).equal(0); + }); + it('Attempt to buy by user2', async function () { + await expect(token2.purchase(0, user2.address, zeroAddress)).revertedWith('Token is not on sale'); + }); + it('SetPrice', async function () { + await expect(token2.setPriceOf(tokenId0, price)).revertedWith('Only the onwer can set the price'); + tx = await token1.setPriceOf(tokenId0, price); + await tx.wait(); + result = await token.getPriceOf(tokenId0); + expect(result.toNumber()).equal(price); + }); + it('Purchase by user2', async function () { + await expect(token2.purchase(tokenId0, user2.address, zeroAddress)).revertedWith('Not enough fund'); + + balance1 = await token.etherBalanceOf(user1.address); + balanceA = await token.etherBalanceOf(artist.address); + + tx = await token2.purchase(tokenId0, user2.address, zeroAddress, { value: price }); + await tx.wait(); + result = await token.ownerOf(tokenId0); + expect(result).equal(user2.address); + + balance = await token.etherBalanceOf(user1.address); + expect(balance.sub(balance1)).equal(price.div(20).mul(19)); // 95% + balance = await token.etherBalanceOf(artist.address); + expect(balance.sub(balanceA)).equal(price.div(20).mul(1)); // 5% + }); + it('Attempt to buy by user3', async function () { + await expect(token3.purchase(0, user2.address, zeroAddress, { value: price })).revertedWith('Token is not on sale'); + }); +}); + +describe('P2PTradable', function () { + let result, tx, err, balance; + + const tokenId1 = 1; + const tokenId2 = 2; + const tokenId3 = 3; + + it('mint for test', async function () { + // for user1 + tx = await token1.mint(); + await tx.wait(); + result = await token1.ownerOf(tokenId1); + expect(result).equal(user1.address); + + // for user2 + tx = await token2.mint(); + await tx.wait(); + result = await token2.ownerOf(tokenId2); + expect(result).equal(user2.address); + + // for user3 + tx = await token3.mint(); + await tx.wait(); + result = await token3.ownerOf(tokenId3); + expect(result).equal(user3.address); + }); + + it('Attempt to trade non-tradable token', async function () { + await expect(token2.executeTrade(tokenId2, tokenId1)).revertedWith('TargetTokenId is not on trade'); + }); + + it('Attempt to execute trade non-owner token', async function () { + await expect(token2.executeTrade(tokenId1, tokenId3)).revertedWith('Only the onwer can trade'); + }); + + it('Attempt to put trade non-owner token', async function () { + await expect(token2.putTrade(tokenId1, true)).revertedWith('Only the onwer can trade'); + }); + + it('put trade', async function () { + // user + tx = await token1.putTrade(tokenId1, true); + await tx.wait(); + result = await token1.trades(tokenId1); + expect(result).equal(true); + + tx = await token2.executeTrade(tokenId2, tokenId1); + await tx.wait(); + result = await token1.trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + result = await token1.ownerOf(tokenId1); + expect(result).equal(user2.address); + + result = await token1.ownerOf(tokenId2); + expect(result).equal(user1.address); + }); + +}); diff --git a/src/abis/MessageProvider3.json b/src/abis/MessageProvider3.json new file mode 100644 index 00000000..72ece9eb --- /dev/null +++ b/src/abis/MessageProvider3.json @@ -0,0 +1,388 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MessageProvider3", + "sourceName": "contracts/providers/MessageProvider3.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IMessageStoreV2", + "name": "_messageStore", + "type": "address" + } + ], + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "providerKey", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assetId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Payout", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "assets", + "outputs": [ + { + "internalType": "contract IAssetProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_assetId", + "type": "uint256" + } + ], + "name": "generateSVGDocument", + "outputs": [ + { + "internalType": "string", + "name": "svgDocument", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "w", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "h", + "type": "uint256" + } + ], + "internalType": "struct IMessageStoreV2.Box", + "name": "box", + "type": "tuple" + } + ], + "name": "generateSVGMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_assetId", + "type": "uint256" + } + ], + "name": "generateSVGPart", + "outputs": [ + { + "internalType": "string", + "name": "svgPart", + "type": "string" + }, + { + "internalType": "string", + "name": "tag", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_assetId", + "type": "uint256" + } + ], + "name": "generateTraits", + "outputs": [ + { + "internalType": "string", + "name": "traits", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProviderInfo", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "key", + "type": "string" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "contract IAssetProvider", + "name": "provider", + "type": "address" + } + ], + "internalType": "struct IAssetProvider.ProviderInfo", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "name": "isAssetRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_assetId", + "type": "uint256" + } + ], + "name": "processPayout", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "receiver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "assetName", + "type": "string" + }, + { + "internalType": "contract IAssetProvider", + "name": "assetProvider", + "type": "address" + } + ], + "name": "registerAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + } + ], + "name": "setReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002f4738038062002f47833981810160405281019062000037919062000255565b620000576200004b620000e260201b60201c565b620000ea60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200009b620001ae60201b60201c565b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000287565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020982620001dc565b9050919050565b60006200021d82620001fc565b9050919050565b6200022f8162000210565b81146200023b57600080fd5b50565b6000815190506200024f8162000224565b92915050565b6000602082840312156200026e576200026d620001d7565b5b60006200027e848285016200023e565b91505092915050565b608051612c8f620002b860003960008181610511015281816105ba01528181610be10152610ce50152612c8f6000f3fe6080604052600436106100fe5760003560e01c806385936228116100955780638c40188e116100645780638c40188e1461034c5780638da5cb5b14610377578063e3f24f02146103a2578063f2fde38b146103e0578063f7260d3e14610409576100fe565b8063859362281461029f578063893d20e8146102dc57806389ee68bf146103075780638c2261ad14610323576100fe565b80635d6e0dd5116100d15780635d6e0dd5146101e5578063715018a614610222578063718da7ee1461023957806379b92f2714610262576100fe565b806301ffc9a71461010357806318160ddd14610140578063195478b91461016b57806342d97aec146101a8575b600080fd5b34801561010f57600080fd5b5061012a6004803603810190610125919061177e565b610434565b60405161013791906117c6565b60405180910390f35b34801561014c57600080fd5b50610155610506565b60405161016291906117fa565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d91906119e1565b61050b565b60405161019f9190611b4b565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611b6d565b61081f565b6040516101dc91906117c6565b60405180910390f35b3480156101f157600080fd5b5061020c60048036038101906102079190611bb6565b610896565b6040516102199190611b4b565b60405180910390f35b34801561022e57600080fd5b50610237610905565b005b34801561024557600080fd5b50610260600480360381019061025b9190611c41565b610919565b005b34801561026e57600080fd5b5061028960048036038101906102849190611bb6565b610965565b6040516102969190611b4b565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190611b6d565b61096c565b6040516102d39190611ccd565b60405180910390f35b3480156102e857600080fd5b506102f16109b5565b6040516102fe9190611cf7565b60405180910390f35b610321600480360381019061031c9190611bb6565b6109c4565b005b34801561032f57600080fd5b5061034a60048036038101906103459190611d50565b610aa8565b005b34801561035857600080fd5b50610361610b09565b60405161036e9190611e5c565b60405180910390f35b34801561038357600080fd5b5061038c610bb1565b6040516103999190611cf7565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190611bb6565b610bda565b6040516103d7929190611e7e565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190611c41565b610ead565b005b34801561041557600080fd5b5061041e610f30565b60405161042b9190611cf7565b60405180910390f35b60007f0ece3d21000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ff57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600090565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e61270e5888888876040518563ffffffff1660e01b815260040161056e9493929190611ef3565b600060405180830381865afa15801561058b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906105b49190611fee565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166316e921c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061204c565b905060006040518060400160405280600981526020017f4d6573736167655632000000000000000000000000000000000000000000000081525061068a83610f56565b60405160200161069b9291906120b5565b60405160208183030381529060405290506000806002886040516106bf91906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3f24f02856040518263ffffffff1660e01b815260040161072691906117fa565b600060405180830381865afa158015610743573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061076c9190612160565b915091506000828660405160200161078592919061234f565b604051602081830303815290604052905060006107bb6107b6866107a885611024565b61107f90919063ffffffff16565b6110e2565b905061080d6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525082610808610803896111ea565b6110e2565b61125d565b97505050505050505095945050505050565b60008073ffffffffffffffffffffffffffffffffffffffff1660028360405161084891906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60608060606108a484610bda565b80925081935050506108fc6040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250836108f76108f2856111ea565b6110e2565b61125d565b92505050919050565b61090d6112e1565b610917600061135f565b565b6109216112e1565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060919050565b6002818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109bf610bb1565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610a31573d6000803e3d6000fd5b507fbb0eeee27936db25b1a46a81ab6d97326392a3e961efa7273d5d756d7a2e1cad6040518060400160405280600981526020017f4d65737361676556320000000000000000000000000000000000000000000000815250838334604051610a9c94939291906123c0565b60405180910390a15050565b80600283604051610ab991906120d9565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610b116116a0565b60405180606001604052806040518060400160405280600981526020017f4d6573736167655632000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d6573736167650000000000000000000000000000000000000000000000000081525081526020013073ffffffffffffffffffffffffffffffffffffffff16815250905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dec0314e856040518263ffffffff1660e01b8152600401610c3891906117fa565b600060405180830381865afa158015610c55573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c7e9190611fee565b90506040518060400160405280600981526020017f4d65737361676556320000000000000000000000000000000000000000000000815250610cbf85610f56565b604051602001610cd09291906120b5565b604051602081830303815290604052915060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663eac8f5b8866040518263ffffffff1660e01b8152600401610d3c91906117fa565b600060405180830381865afa158015610d59573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d8291906124f4565b90506000816060015190506000600282604051610d9f91906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff1663e3f24f028a6040518263ffffffff1660e01b8152600401610e0c91906117fa565b600060405180830381865afa158015610e29573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610e529190612160565b9150915060008287604051602001610e6b92919061234f565b6040516020818303038152906040529050610e9f610e9a89610e8c84611024565b61107f90919063ffffffff16565b6110e2565b985050505050505050915091565b610eb56112e1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b906125af565b60405180910390fd5b610f2d8161135f565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060006001610f6584611423565b01905060008167ffffffffffffffff811115610f8457610f83611830565b5b6040519080825280601f01601f191660200182016040528015610fb65781602001600182028036833780820191505090505b509050600082602001820190505b600115611019578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161100d5761100c6125cf565b5b04945060008503610fc4575b819350505050919050565b61102c6116d7565b60405160200161103b9061264a565b60405160208183030381529060405281600001819052508160405160200161106391906126ab565b6040516020818303038152906040528160200181905250919050565b6110876116d7565b6110da8360405180604001604052806040518060400160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250815260200185815250611576565b905092915050565b606060008260000151511115611174578160000151905060005b82604001515181101561116e57600083604001518281518110611122576111216126d8565b5b6020026020010151905082816000015182602001516040516020016111499392919061279f565b604051602081830303815290604052925050808061116690612815565b9150506110fc565b506111bd565b6000826040015151146111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b3906128a9565b60405180910390fd5b5b8082602001516040516020016111d49291906128c9565b6040516020818303038152906040529050919050565b6111f26116d7565b816040516020016112039190612939565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b60606000846040516020016112729190612a3f565b60405160208183030381529060405290506000845111156112b25780846040516020016112a0929190612b04565b60405160208183030381529060405290505b80836040516020016112c5929190612b8a565b6040516020818303038152906040529050809150509392505050565b6112e9611698565b73ffffffffffffffffffffffffffffffffffffffff16611307610bb1565b73ffffffffffffffffffffffffffffffffffffffff161461135d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135490612c05565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611481577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611477576114766125cf565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106114be576d04ee2d6d415b85acef810000000083816114b4576114b36125cf565b5b0492506020810190505b662386f26fc1000083106114ed57662386f26fc1000083816114e3576114e26125cf565b5b0492506010810190505b6305f5e1008310611516576305f5e100838161150c5761150b6125cf565b5b0492506008810190505b612710831061153b576127108381611531576115306125cf565b5b0492506004810190505b6064831061155e5760648381611554576115536125cf565b5b0492506002810190505b600a831061156d576001810190505b80915050919050565b61157e6116d7565b826000015181600001819052508260200151816020018190525060018360400151516115aa9190612c25565b67ffffffffffffffff8111156115c3576115c2611830565b5b6040519080825280602002602001820160405280156115fc57816020015b6115e96116f8565b8152602001906001900390816115e15790505b50816040018190525060005b836040015151811015611669578360400151818151811061162c5761162b6126d8565b5b60200260200101518260400151828151811061164b5761164a6126d8565b5b6020026020010181905250808061166190612815565b915050611608565b5081816040015184604001515181518110611687576116866126d8565b5b602002602001018190525092915050565b600033905090565b60405180606001604052806060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180606001604052806060815260200160608152602001606081525090565b604051806040016040528060608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61175b81611726565b811461176657600080fd5b50565b60008135905061177881611752565b92915050565b6000602082840312156117945761179361171c565b5b60006117a284828501611769565b91505092915050565b60008115159050919050565b6117c0816117ab565b82525050565b60006020820190506117db60008301846117b7565b92915050565b6000819050919050565b6117f4816117e1565b82525050565b600060208201905061180f60008301846117eb565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118688261181f565b810181811067ffffffffffffffff8211171561188757611886611830565b5b80604052505050565b600061189a611712565b90506118a6828261185f565b919050565b600067ffffffffffffffff8211156118c6576118c5611830565b5b6118cf8261181f565b9050602081019050919050565b82818337600083830152505050565b60006118fe6118f9846118ab565b611890565b90508281526020810184848401111561191a5761191961181a565b5b6119258482856118dc565b509392505050565b600082601f83011261194257611941611815565b5b81356119528482602086016118eb565b91505092915050565b600080fd5b600080fd5b61196e816117e1565b811461197957600080fd5b50565b60008135905061198b81611965565b92915050565b6000604082840312156119a7576119a661195b565b5b6119b16040611890565b905060006119c18482850161197c565b60008301525060206119d58482850161197c565b60208301525092915050565b600080600080600060c086880312156119fd576119fc61171c565b5b600086013567ffffffffffffffff811115611a1b57611a1a611721565b5b611a278882890161192d565b955050602086013567ffffffffffffffff811115611a4857611a47611721565b5b611a548882890161192d565b945050604086013567ffffffffffffffff811115611a7557611a74611721565b5b611a818882890161192d565b935050606086013567ffffffffffffffff811115611aa257611aa1611721565b5b611aae8882890161192d565b9250506080611abf88828901611991565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b06578082015181840152602081019050611aeb565b60008484015250505050565b6000611b1d82611acc565b611b278185611ad7565b9350611b37818560208601611ae8565b611b408161181f565b840191505092915050565b60006020820190508181036000830152611b658184611b12565b905092915050565b600060208284031215611b8357611b8261171c565b5b600082013567ffffffffffffffff811115611ba157611ba0611721565b5b611bad8482850161192d565b91505092915050565b600060208284031215611bcc57611bcb61171c565b5b6000611bda8482850161197c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c0e82611be3565b9050919050565b611c1e81611c03565b8114611c2957600080fd5b50565b600081359050611c3b81611c15565b92915050565b600060208284031215611c5757611c5661171c565b5b6000611c6584828501611c2c565b91505092915050565b6000819050919050565b6000611c93611c8e611c8984611be3565b611c6e565b611be3565b9050919050565b6000611ca582611c78565b9050919050565b6000611cb782611c9a565b9050919050565b611cc781611cac565b82525050565b6000602082019050611ce26000830184611cbe565b92915050565b611cf181611c03565b82525050565b6000602082019050611d0c6000830184611ce8565b92915050565b6000611d1d82611c03565b9050919050565b611d2d81611d12565b8114611d3857600080fd5b50565b600081359050611d4a81611d24565b92915050565b60008060408385031215611d6757611d6661171c565b5b600083013567ffffffffffffffff811115611d8557611d84611721565b5b611d918582860161192d565b9250506020611da285828601611d3b565b9150509250929050565b600082825260208201905092915050565b6000611dc882611acc565b611dd28185611dac565b9350611de2818560208601611ae8565b611deb8161181f565b840191505092915050565b611dff81611cac565b82525050565b60006060830160008301518482036000860152611e228282611dbd565b91505060208301518482036020860152611e3c8282611dbd565b9150506040830151611e516040860182611df6565b508091505092915050565b60006020820190508181036000830152611e768184611e05565b905092915050565b60006040820190508181036000830152611e988185611b12565b90508181036020830152611eac8184611b12565b90509392505050565b611ebe816117e1565b82525050565b604082016000820151611eda6000850182611eb5565b506020820151611eed6020850182611eb5565b50505050565b600060a0820190508181036000830152611f0d8187611b12565b90508181036020830152611f218186611b12565b90508181036040830152611f358185611b12565b9050611f446060830184611ec4565b95945050505050565b600067ffffffffffffffff821115611f6857611f67611830565b5b611f718261181f565b9050602081019050919050565b6000611f91611f8c84611f4d565b611890565b905082815260208101848484011115611fad57611fac61181a565b5b611fb8848285611ae8565b509392505050565b600082601f830112611fd557611fd4611815565b5b8151611fe5848260208601611f7e565b91505092915050565b6000602082840312156120045761200361171c565b5b600082015167ffffffffffffffff81111561202257612021611721565b5b61202e84828501611fc0565b91505092915050565b60008151905061204681611965565b92915050565b6000602082840312156120625761206161171c565b5b600061207084828501612037565b91505092915050565b600081905092915050565b600061208f82611acc565b6120998185612079565b93506120a9818560208601611ae8565b80840191505092915050565b60006120c18285612084565b91506120cd8284612084565b91508190509392505050565b60006120e58284612084565b915081905092915050565b60006121036120fe846118ab565b611890565b90508281526020810184848401111561211f5761211e61181a565b5b61212a848285611ae8565b509392505050565b600082601f83011261214757612146611815565b5b81516121578482602086016120f0565b91505092915050565b600080604083850312156121775761217661171c565b5b600083015167ffffffffffffffff81111561219557612194611721565b5b6121a185828601612132565b925050602083015167ffffffffffffffff8111156121c2576121c1611721565b5b6121ce85828601612132565b9150509250929050565b7f3c67206f7061636974793d22302e34223e000000000000000000000000000000600082015250565b600061220e601183612079565b9150612219826121d8565b601182019050919050565b600081519050919050565b600081905092915050565b600061224582612224565b61224f818561222f565b935061225f818560208601611ae8565b80840191505092915050565b7f3c2f673e00000000000000000000000000000000000000000000000000000000600082015250565b60006122a1600483612079565b91506122ac8261226b565b600482019050919050565b7f3c673e0a00000000000000000000000000000000000000000000000000000000600082015250565b60006122ed600483612079565b91506122f8826122b7565b600482019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b6000612339600583612079565b915061234482612303565b600582019050919050565b600061235a82612201565b9150612366828561223a565b915061237182612294565b915061237c826122e0565b9150612388828461223a565b91506123938261232c565b91508190509392505050565b60006123aa82611be3565b9050919050565b6123ba8161239f565b82525050565b600060808201905081810360008301526123da8187611b12565b90506123e960208301866117eb565b6123f660408301856123b1565b61240360608301846117eb565b95945050505050565b6000608082840312156124225761242161195b565b5b61242c6080611890565b9050600082015167ffffffffffffffff81111561244c5761244b611960565b5b61245884828501612132565b600083015250602082015167ffffffffffffffff81111561247c5761247b611960565b5b61248884828501612132565b602083015250604082015167ffffffffffffffff8111156124ac576124ab611960565b5b6124b884828501612132565b604083015250606082015167ffffffffffffffff8111156124dc576124db611960565b5b6124e884828501612132565b60608301525092915050565b60006020828403121561250a5761250961171c565b5b600082015167ffffffffffffffff81111561252857612527611721565b5b6125348482850161240c565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612599602683611ad7565b91506125a48261253d565b604082019050919050565b600060208201905081810360008301526125c88161258c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b6000612634600983612079565b915061263f826125fe565b600982019050919050565b600061265582612627565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b6000612695600283612079565b91506126a08261265f565b600282019050919050565b60006126b682612688565b91506126c2828461223a565b91506126cd8261232c565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b600061273d600283612079565b915061274882612707565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b6000612789600283612079565b915061279482612753565b600282019050919050565b60006127ab828661223a565b91506127b682612730565b91506127c28285612084565b91506127cd8261277c565b91506127d98284612084565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612820826117e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612852576128516127e6565b5b600182019050919050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b6000612893601283611ad7565b915061289e8261285d565b602082019050919050565b600060208201905081810360008301526128c281612886565b9050919050565b60006128d5828561223a565b91506128e1828461223a565b91508190509392505050565b7f3c75736520687265663d22230000000000000000000000000000000000000000600082015250565b6000612923600c83612079565b915061292e826128ed565b600c82019050919050565b600061294482612916565b91506129508284612084565b915081905092915050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b60006129b7603483612079565b91506129c28261295b565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b6000612a29602683612079565b9150612a34826129cd565b602682019050919050565b6000612a4a826129aa565b9150612a568284612084565b9150612a6182612a1c565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b6000612aa2600783612079565b9150612aad82612a6c565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b6000612aee600883612079565b9150612af982612ab8565b600882019050919050565b6000612b10828561223a565b9150612b1b82612a95565b9150612b27828461223a565b9150612b3282612ae1565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b6000612b74600783612079565b9150612b7f82612b3e565b600782019050919050565b6000612b96828561223a565b9150612ba2828461223a565b9150612bad82612b67565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612bef602083611ad7565b9150612bfa82612bb9565b602082019050919050565b60006020820190508181036000830152612c1e81612be2565b9050919050565b6000612c30826117e1565b9150612c3b836117e1565b9250828201905080821115612c5357612c526127e6565b5b9291505056fea2646970667358221220a74beece84cd706f533fc737fe034b4f069401de3c97ad733ca91585038866bc64736f6c63430008110033", + "deployedBytecode": "0x6080604052600436106100fe5760003560e01c806385936228116100955780638c40188e116100645780638c40188e1461034c5780638da5cb5b14610377578063e3f24f02146103a2578063f2fde38b146103e0578063f7260d3e14610409576100fe565b8063859362281461029f578063893d20e8146102dc57806389ee68bf146103075780638c2261ad14610323576100fe565b80635d6e0dd5116100d15780635d6e0dd5146101e5578063715018a614610222578063718da7ee1461023957806379b92f2714610262576100fe565b806301ffc9a71461010357806318160ddd14610140578063195478b91461016b57806342d97aec146101a8575b600080fd5b34801561010f57600080fd5b5061012a6004803603810190610125919061177e565b610434565b60405161013791906117c6565b60405180910390f35b34801561014c57600080fd5b50610155610506565b60405161016291906117fa565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d91906119e1565b61050b565b60405161019f9190611b4b565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611b6d565b61081f565b6040516101dc91906117c6565b60405180910390f35b3480156101f157600080fd5b5061020c60048036038101906102079190611bb6565b610896565b6040516102199190611b4b565b60405180910390f35b34801561022e57600080fd5b50610237610905565b005b34801561024557600080fd5b50610260600480360381019061025b9190611c41565b610919565b005b34801561026e57600080fd5b5061028960048036038101906102849190611bb6565b610965565b6040516102969190611b4b565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190611b6d565b61096c565b6040516102d39190611ccd565b60405180910390f35b3480156102e857600080fd5b506102f16109b5565b6040516102fe9190611cf7565b60405180910390f35b610321600480360381019061031c9190611bb6565b6109c4565b005b34801561032f57600080fd5b5061034a60048036038101906103459190611d50565b610aa8565b005b34801561035857600080fd5b50610361610b09565b60405161036e9190611e5c565b60405180910390f35b34801561038357600080fd5b5061038c610bb1565b6040516103999190611cf7565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190611bb6565b610bda565b6040516103d7929190611e7e565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190611c41565b610ead565b005b34801561041557600080fd5b5061041e610f30565b60405161042b9190611cf7565b60405180910390f35b60007f0ece3d21000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ff57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600090565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e61270e5888888876040518563ffffffff1660e01b815260040161056e9493929190611ef3565b600060405180830381865afa15801561058b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906105b49190611fee565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166316e921c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061204c565b905060006040518060400160405280600981526020017f4d6573736167655632000000000000000000000000000000000000000000000081525061068a83610f56565b60405160200161069b9291906120b5565b60405160208183030381529060405290506000806002886040516106bf91906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3f24f02856040518263ffffffff1660e01b815260040161072691906117fa565b600060405180830381865afa158015610743573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061076c9190612160565b915091506000828660405160200161078592919061234f565b604051602081830303815290604052905060006107bb6107b6866107a885611024565b61107f90919063ffffffff16565b6110e2565b905061080d6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525082610808610803896111ea565b6110e2565b61125d565b97505050505050505095945050505050565b60008073ffffffffffffffffffffffffffffffffffffffff1660028360405161084891906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60608060606108a484610bda565b80925081935050506108fc6040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250836108f76108f2856111ea565b6110e2565b61125d565b92505050919050565b61090d6112e1565b610917600061135f565b565b6109216112e1565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060919050565b6002818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109bf610bb1565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610a31573d6000803e3d6000fd5b507fbb0eeee27936db25b1a46a81ab6d97326392a3e961efa7273d5d756d7a2e1cad6040518060400160405280600981526020017f4d65737361676556320000000000000000000000000000000000000000000000815250838334604051610a9c94939291906123c0565b60405180910390a15050565b80600283604051610ab991906120d9565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610b116116a0565b60405180606001604052806040518060400160405280600981526020017f4d6573736167655632000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d6573736167650000000000000000000000000000000000000000000000000081525081526020013073ffffffffffffffffffffffffffffffffffffffff16815250905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dec0314e856040518263ffffffff1660e01b8152600401610c3891906117fa565b600060405180830381865afa158015610c55573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c7e9190611fee565b90506040518060400160405280600981526020017f4d65737361676556320000000000000000000000000000000000000000000000815250610cbf85610f56565b604051602001610cd09291906120b5565b604051602081830303815290604052915060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663eac8f5b8866040518263ffffffff1660e01b8152600401610d3c91906117fa565b600060405180830381865afa158015610d59573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d8291906124f4565b90506000816060015190506000600282604051610d9f91906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff1663e3f24f028a6040518263ffffffff1660e01b8152600401610e0c91906117fa565b600060405180830381865afa158015610e29573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610e529190612160565b9150915060008287604051602001610e6b92919061234f565b6040516020818303038152906040529050610e9f610e9a89610e8c84611024565b61107f90919063ffffffff16565b6110e2565b985050505050505050915091565b610eb56112e1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b906125af565b60405180910390fd5b610f2d8161135f565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060006001610f6584611423565b01905060008167ffffffffffffffff811115610f8457610f83611830565b5b6040519080825280601f01601f191660200182016040528015610fb65781602001600182028036833780820191505090505b509050600082602001820190505b600115611019578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161100d5761100c6125cf565b5b04945060008503610fc4575b819350505050919050565b61102c6116d7565b60405160200161103b9061264a565b60405160208183030381529060405281600001819052508160405160200161106391906126ab565b6040516020818303038152906040528160200181905250919050565b6110876116d7565b6110da8360405180604001604052806040518060400160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250815260200185815250611576565b905092915050565b606060008260000151511115611174578160000151905060005b82604001515181101561116e57600083604001518281518110611122576111216126d8565b5b6020026020010151905082816000015182602001516040516020016111499392919061279f565b604051602081830303815290604052925050808061116690612815565b9150506110fc565b506111bd565b6000826040015151146111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b3906128a9565b60405180910390fd5b5b8082602001516040516020016111d49291906128c9565b6040516020818303038152906040529050919050565b6111f26116d7565b816040516020016112039190612939565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b60606000846040516020016112729190612a3f565b60405160208183030381529060405290506000845111156112b25780846040516020016112a0929190612b04565b60405160208183030381529060405290505b80836040516020016112c5929190612b8a565b6040516020818303038152906040529050809150509392505050565b6112e9611698565b73ffffffffffffffffffffffffffffffffffffffff16611307610bb1565b73ffffffffffffffffffffffffffffffffffffffff161461135d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135490612c05565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611481577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611477576114766125cf565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106114be576d04ee2d6d415b85acef810000000083816114b4576114b36125cf565b5b0492506020810190505b662386f26fc1000083106114ed57662386f26fc1000083816114e3576114e26125cf565b5b0492506010810190505b6305f5e1008310611516576305f5e100838161150c5761150b6125cf565b5b0492506008810190505b612710831061153b576127108381611531576115306125cf565b5b0492506004810190505b6064831061155e5760648381611554576115536125cf565b5b0492506002810190505b600a831061156d576001810190505b80915050919050565b61157e6116d7565b826000015181600001819052508260200151816020018190525060018360400151516115aa9190612c25565b67ffffffffffffffff8111156115c3576115c2611830565b5b6040519080825280602002602001820160405280156115fc57816020015b6115e96116f8565b8152602001906001900390816115e15790505b50816040018190525060005b836040015151811015611669578360400151818151811061162c5761162b6126d8565b5b60200260200101518260400151828151811061164b5761164a6126d8565b5b6020026020010181905250808061166190612815565b915050611608565b5081816040015184604001515181518110611687576116866126d8565b5b602002602001018190525092915050565b600033905090565b60405180606001604052806060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180606001604052806060815260200160608152602001606081525090565b604051806040016040528060608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61175b81611726565b811461176657600080fd5b50565b60008135905061177881611752565b92915050565b6000602082840312156117945761179361171c565b5b60006117a284828501611769565b91505092915050565b60008115159050919050565b6117c0816117ab565b82525050565b60006020820190506117db60008301846117b7565b92915050565b6000819050919050565b6117f4816117e1565b82525050565b600060208201905061180f60008301846117eb565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118688261181f565b810181811067ffffffffffffffff8211171561188757611886611830565b5b80604052505050565b600061189a611712565b90506118a6828261185f565b919050565b600067ffffffffffffffff8211156118c6576118c5611830565b5b6118cf8261181f565b9050602081019050919050565b82818337600083830152505050565b60006118fe6118f9846118ab565b611890565b90508281526020810184848401111561191a5761191961181a565b5b6119258482856118dc565b509392505050565b600082601f83011261194257611941611815565b5b81356119528482602086016118eb565b91505092915050565b600080fd5b600080fd5b61196e816117e1565b811461197957600080fd5b50565b60008135905061198b81611965565b92915050565b6000604082840312156119a7576119a661195b565b5b6119b16040611890565b905060006119c18482850161197c565b60008301525060206119d58482850161197c565b60208301525092915050565b600080600080600060c086880312156119fd576119fc61171c565b5b600086013567ffffffffffffffff811115611a1b57611a1a611721565b5b611a278882890161192d565b955050602086013567ffffffffffffffff811115611a4857611a47611721565b5b611a548882890161192d565b945050604086013567ffffffffffffffff811115611a7557611a74611721565b5b611a818882890161192d565b935050606086013567ffffffffffffffff811115611aa257611aa1611721565b5b611aae8882890161192d565b9250506080611abf88828901611991565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b06578082015181840152602081019050611aeb565b60008484015250505050565b6000611b1d82611acc565b611b278185611ad7565b9350611b37818560208601611ae8565b611b408161181f565b840191505092915050565b60006020820190508181036000830152611b658184611b12565b905092915050565b600060208284031215611b8357611b8261171c565b5b600082013567ffffffffffffffff811115611ba157611ba0611721565b5b611bad8482850161192d565b91505092915050565b600060208284031215611bcc57611bcb61171c565b5b6000611bda8482850161197c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c0e82611be3565b9050919050565b611c1e81611c03565b8114611c2957600080fd5b50565b600081359050611c3b81611c15565b92915050565b600060208284031215611c5757611c5661171c565b5b6000611c6584828501611c2c565b91505092915050565b6000819050919050565b6000611c93611c8e611c8984611be3565b611c6e565b611be3565b9050919050565b6000611ca582611c78565b9050919050565b6000611cb782611c9a565b9050919050565b611cc781611cac565b82525050565b6000602082019050611ce26000830184611cbe565b92915050565b611cf181611c03565b82525050565b6000602082019050611d0c6000830184611ce8565b92915050565b6000611d1d82611c03565b9050919050565b611d2d81611d12565b8114611d3857600080fd5b50565b600081359050611d4a81611d24565b92915050565b60008060408385031215611d6757611d6661171c565b5b600083013567ffffffffffffffff811115611d8557611d84611721565b5b611d918582860161192d565b9250506020611da285828601611d3b565b9150509250929050565b600082825260208201905092915050565b6000611dc882611acc565b611dd28185611dac565b9350611de2818560208601611ae8565b611deb8161181f565b840191505092915050565b611dff81611cac565b82525050565b60006060830160008301518482036000860152611e228282611dbd565b91505060208301518482036020860152611e3c8282611dbd565b9150506040830151611e516040860182611df6565b508091505092915050565b60006020820190508181036000830152611e768184611e05565b905092915050565b60006040820190508181036000830152611e988185611b12565b90508181036020830152611eac8184611b12565b90509392505050565b611ebe816117e1565b82525050565b604082016000820151611eda6000850182611eb5565b506020820151611eed6020850182611eb5565b50505050565b600060a0820190508181036000830152611f0d8187611b12565b90508181036020830152611f218186611b12565b90508181036040830152611f358185611b12565b9050611f446060830184611ec4565b95945050505050565b600067ffffffffffffffff821115611f6857611f67611830565b5b611f718261181f565b9050602081019050919050565b6000611f91611f8c84611f4d565b611890565b905082815260208101848484011115611fad57611fac61181a565b5b611fb8848285611ae8565b509392505050565b600082601f830112611fd557611fd4611815565b5b8151611fe5848260208601611f7e565b91505092915050565b6000602082840312156120045761200361171c565b5b600082015167ffffffffffffffff81111561202257612021611721565b5b61202e84828501611fc0565b91505092915050565b60008151905061204681611965565b92915050565b6000602082840312156120625761206161171c565b5b600061207084828501612037565b91505092915050565b600081905092915050565b600061208f82611acc565b6120998185612079565b93506120a9818560208601611ae8565b80840191505092915050565b60006120c18285612084565b91506120cd8284612084565b91508190509392505050565b60006120e58284612084565b915081905092915050565b60006121036120fe846118ab565b611890565b90508281526020810184848401111561211f5761211e61181a565b5b61212a848285611ae8565b509392505050565b600082601f83011261214757612146611815565b5b81516121578482602086016120f0565b91505092915050565b600080604083850312156121775761217661171c565b5b600083015167ffffffffffffffff81111561219557612194611721565b5b6121a185828601612132565b925050602083015167ffffffffffffffff8111156121c2576121c1611721565b5b6121ce85828601612132565b9150509250929050565b7f3c67206f7061636974793d22302e34223e000000000000000000000000000000600082015250565b600061220e601183612079565b9150612219826121d8565b601182019050919050565b600081519050919050565b600081905092915050565b600061224582612224565b61224f818561222f565b935061225f818560208601611ae8565b80840191505092915050565b7f3c2f673e00000000000000000000000000000000000000000000000000000000600082015250565b60006122a1600483612079565b91506122ac8261226b565b600482019050919050565b7f3c673e0a00000000000000000000000000000000000000000000000000000000600082015250565b60006122ed600483612079565b91506122f8826122b7565b600482019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b6000612339600583612079565b915061234482612303565b600582019050919050565b600061235a82612201565b9150612366828561223a565b915061237182612294565b915061237c826122e0565b9150612388828461223a565b91506123938261232c565b91508190509392505050565b60006123aa82611be3565b9050919050565b6123ba8161239f565b82525050565b600060808201905081810360008301526123da8187611b12565b90506123e960208301866117eb565b6123f660408301856123b1565b61240360608301846117eb565b95945050505050565b6000608082840312156124225761242161195b565b5b61242c6080611890565b9050600082015167ffffffffffffffff81111561244c5761244b611960565b5b61245884828501612132565b600083015250602082015167ffffffffffffffff81111561247c5761247b611960565b5b61248884828501612132565b602083015250604082015167ffffffffffffffff8111156124ac576124ab611960565b5b6124b884828501612132565b604083015250606082015167ffffffffffffffff8111156124dc576124db611960565b5b6124e884828501612132565b60608301525092915050565b60006020828403121561250a5761250961171c565b5b600082015167ffffffffffffffff81111561252857612527611721565b5b6125348482850161240c565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612599602683611ad7565b91506125a48261253d565b604082019050919050565b600060208201905081810360008301526125c88161258c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b6000612634600983612079565b915061263f826125fe565b600982019050919050565b600061265582612627565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b6000612695600283612079565b91506126a08261265f565b600282019050919050565b60006126b682612688565b91506126c2828461223a565b91506126cd8261232c565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b600061273d600283612079565b915061274882612707565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b6000612789600283612079565b915061279482612753565b600282019050919050565b60006127ab828661223a565b91506127b682612730565b91506127c28285612084565b91506127cd8261277c565b91506127d98284612084565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612820826117e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612852576128516127e6565b5b600182019050919050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b6000612893601283611ad7565b915061289e8261285d565b602082019050919050565b600060208201905081810360008301526128c281612886565b9050919050565b60006128d5828561223a565b91506128e1828461223a565b91508190509392505050565b7f3c75736520687265663d22230000000000000000000000000000000000000000600082015250565b6000612923600c83612079565b915061292e826128ed565b600c82019050919050565b600061294482612916565b91506129508284612084565b915081905092915050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b60006129b7603483612079565b91506129c28261295b565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b6000612a29602683612079565b9150612a34826129cd565b602682019050919050565b6000612a4a826129aa565b9150612a568284612084565b9150612a6182612a1c565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b6000612aa2600783612079565b9150612aad82612a6c565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b6000612aee600883612079565b9150612af982612ab8565b600882019050919050565b6000612b10828561223a565b9150612b1b82612a95565b9150612b27828461223a565b9150612b3282612ae1565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b6000612b74600783612079565b9150612b7f82612b3e565b600782019050919050565b6000612b96828561223a565b9150612ba2828461223a565b9150612bad82612b67565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612bef602083611ad7565b9150612bfa82612bb9565b602082019050919050565b60006020820190508181036000830152612c1e81612be2565b9050919050565b6000612c30826117e1565b9150612c3b836117e1565b9250828201905080821115612c5357612c526127e6565b5b9291505056fea2646970667358221220a74beece84cd706f533fc737fe034b4f069401de3c97ad733ca91585038866bc64736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/abis/MessageStoreV2.json b/src/abis/MessageStoreV2.json new file mode 100644 index 00000000..a71d0000 --- /dev/null +++ b/src/abis/MessageStoreV2.json @@ -0,0 +1,377 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MessageStoreV2", + "sourceName": "contracts/imageParts/svgstore/MessageStoreV2.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "fonts", + "outputs": [ + { + "internalType": "contract IFontProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getAsset", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "internalType": "struct IMessageStoreV2.Asset", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextPartIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSVG", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSVGBody", + "outputs": [ + { + "internalType": "bytes", + "name": "output", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "w", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "h", + "type": "uint256" + } + ], + "internalType": "struct IMessageStoreV2.Box", + "name": "box", + "type": "tuple" + } + ], + "name": "getSVGBody_2", + "outputs": [ + { + "internalType": "bytes", + "name": "output", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "w", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "h", + "type": "uint256" + } + ], + "internalType": "struct IMessageStoreV2.Box", + "name": "box", + "type": "tuple" + } + ], + "name": "getSVGMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "fontName", + "type": "string" + } + ], + "name": "isFontRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nextPartIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "partsList", + "outputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "internalType": "struct IMessageStoreV2.Asset", + "name": "asset", + "type": "tuple" + } + ], + "name": "register", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "contract IFontProvider", + "name": "fontProvider", + "type": "address" + } + ], + "name": "registerFont", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "test", + "outputs": [ + { + "internalType": "string[]", + "name": "output", + "type": "string[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60806040526001805534801561001457600080fd5b5061406a806100246000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063945cfb9e1161008c578063e61270e511610066578063e61270e51461029a578063eac8f5b8146102ca578063f80a64f5146102fa578063f9fbd5541461032a576100ea565b8063945cfb9e1461021e578063be985ac91461023a578063dec0314e1461026a576100ea565b80633882e980116100c85780633882e980146101705780634e2849c6146101a05780637d82d82b146101d057806386f79edb146101ee576100ea565b806316e921c0146100ef57806317fcb5961461010d57806328801cb71461013d575b600080fd5b6100f761035a565b6040516101049190612833565b60405180910390f35b610127600480360381019061012291906129a8565b610364565b6040516101349190612a0c565b60405180910390f35b61015760048036038101906101529190612a53565b6103db565b6040516101679493929190612aff565b60405180910390f35b61018a600480360381019061018591906129a8565b61062b565b6040516101979190612bdf565b60405180910390f35b6101ba60048036038101906101b59190612cec565b610674565b6040516101c79190612833565b60405180910390f35b6101d86107c4565b6040516101e59190612833565b60405180910390f35b61020860048036038101906102039190612a53565b6107ca565b6040516102159190612d35565b60405180910390f35b61023860048036038101906102339190612da7565b610a43565b005b610254600480360381019061024f9190612a53565b610aa4565b6040516102619190612d35565b60405180910390f35b610284600480360381019061027f9190612a53565b610b5e565b6040516102919190612e58565b60405180910390f35b6102b460048036038101906102af9190612eca565b610b70565b6040516102c19190612e58565b60405180910390f35b6102e460048036038101906102df9190612a53565b610b88565b6040516102f19190613047565b60405180910390f35b610314600480360381019061030f9190612eca565b610dfd565b6040516103219190612d35565b60405180910390f35b610344600480360381019061033f91906129a8565b610ebe565b604051610351919061312b565b60405180910390f35b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff1660008360405161038d9190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60026020528060005260406000206000915090508060000180546103fe906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461042a906131cf565b80156104775780601f1061044c57610100808354040283529160200191610477565b820191906000526020600020905b81548152906001019060200180831161045a57829003601f168201915b50505050509080600101805461048c906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546104b8906131cf565b80156105055780601f106104da57610100808354040283529160200191610505565b820191906000526020600020905b8154815290600101906020018083116104e857829003601f168201915b50505050509080600201805461051a906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610546906131cf565b80156105935780601f1061056857610100808354040283529160200191610593565b820191906000526020600020905b81548152906001019060200180831161057657829003601f168201915b5050505050908060030180546105a8906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546105d4906131cf565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b5050505050905084565b6000818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600083604001516040516106a19190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d9061324c565b60405180910390fd5b816002600060015481526020019081526020016000206000820151816000019081610751919061340e565b506020820151816001019081610767919061340e565b50604082015181600201908161077d919061340e565b506060820151816003019081610793919061340e565b50905050600160008154809291906107aa9061350f565b9190505550600180546107bd9190613557565b9050919050565b60015481565b60606000600260008481526020019081526020016000206040518060800160405290816000820180546107fc906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610828906131cf565b80156108755780601f1061084a57610100808354040283529160200191610875565b820191906000526020600020905b81548152906001019060200180831161085857829003601f168201915b5050505050815260200160018201805461088e906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba906131cf565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b50505050508152602001600282018054610920906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461094c906131cf565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b505050505081526020016003820180546109b2906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546109de906131cf565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b50505050508152505090508060000151915050919050565b80600083604051610a549190613189565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060008067ffffffffffffffff811115610ac257610ac161287d565b5b604051908082528060200260200182016040528015610afb57816020015b610ae861279d565b815260200190600190039081610ae05790505b509050610b566040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250610b48610b4384610ed2565b610ef0565b610b5186610ff8565b6112a5565b915050919050565b6060610b6982610ff8565b9050919050565b6060610b7e85858585611329565b9050949350505050565b610b906127be565b60026000838152602001908152602001600020604051806080016040529081600082018054610bbe906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea906131cf565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b50505050508152602001600182018054610c50906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7c906131cf565b8015610cc95780601f10610c9e57610100808354040283529160200191610cc9565b820191906000526020600020905b815481529060010190602001808311610cac57829003601f168201915b50505050508152602001600282018054610ce2906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0e906131cf565b8015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b50505050508152602001600382018054610d74906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610da0906131cf565b8015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b5050505050815250509050919050565b60606000600167ffffffffffffffff811115610e1c57610e1b61287d565b5b604051908082528060200260200182016040528015610e5557816020015b610e4261279d565b815260200190600190039081610e3a5790505b509050610eb36040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250610ea2610e9d84610ed2565b610ef0565b610eae89898989611329565b6112a5565b915050949350505050565b6060610ecb82600a6116ad565b9050919050565b610eda61279d565b610ee382611792565b8160200181905250919050565b606060008260000151511115610f82578160000151905060005b826040015151811015610f7c57600083604001518281518110610f3057610f2f61358b565b5b602002602001015190508281600001518260200151604051602001610f579392919061368e565b6040516020818303038152906040529250508080610f749061350f565b915050610f0a565b50610fcb565b600082604001515114610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613721565b60405180910390fd5b5b808260200151604051602001610fe2929190613741565b6040516020818303038152906040529050919050565b606060006002600084815260200190815260200160002060405180608001604052908160008201805461102a906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611056906131cf565b80156110a35780601f10611078576101008083540402835291602001916110a3565b820191906000526020600020905b81548152906001019060200180831161108657829003601f168201915b505050505081526020016001820180546110bc906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546110e8906131cf565b80156111355780601f1061110a57610100808354040283529160200191611135565b820191906000526020600020905b81548152906001019060200180831161111857829003601f168201915b5050505050815260200160028201805461114e906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461117a906131cf565b80156111c75780601f1061119c576101008083540402835291602001916111c7565b820191906000526020600020905b8154815290600101906020018083116111aa57829003601f168201915b505050505081526020016003820180546111e0906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461120c906131cf565b80156112595780601f1061122e57610100808354040283529160200191611259565b820191906000526020600020905b81548152906001019060200180831161123c57829003601f168201915b505050505081525050905061126c6127e6565b61040081600001818152505061040081602001818152505061129c82600001518360200151846040015184611329565b92505050919050565b60606000846040516020016112ba9190613849565b60405160208183030381529060405290506000845111156112fa5780846040516020016112e892919061390e565b60405160208183030381529060405290505b808360405160200161130d929190613994565b6040516020818303038152906040529050809150509392505050565b6060600061133886600a6116ad565b90506000815167ffffffffffffffff8111156113575761135661287d565b5b60405190808252806020026020018201604052801561139057816020015b61137d61279d565b8152602001906001900390816113755790505b509050600080866040516113a49190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600486600001516113e891906139c3565b905060005b845181101561151557600061141c8487848151811061140f5761140e61358b565b5b6020026020010151611859565b90508281111561142a578092505b6114e36114b16000848773ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190613a1a565b6114ac91906139c3565b6119c1565b6114d5868986815181106114c8576114c761358b565b5b60200260200101516119fd565b611cf790919063ffffffff16565b8583815181106114f6576114f561358b565b5b602002602001018190525050808061150d9061350f565b9150506113ed565b5060006115d4826103e8896000015161152e91906139c3565b6115389190613a76565b86518573ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a99190613a1a565b6115b391906139c3565b6103e88a602001516115c591906139c3565b6115cf9190613a76565b611d5a565b905060006115fb6115e483611d73565b6115ed87611da4565b611cf790919063ffffffff16565b90506116108a82611dc490919063ffffffff16565b90506000600167ffffffffffffffff81111561162f5761162e61287d565b5b60405190808252806020026020018201604052801561166857816020015b61165561279d565b81526020019060019003908161164d5790505b50905081816000815181106116805761167f61358b565b5b602002602001018190525061169c61169782610ed2565b610ef0565b975050505050505050949350505050565b6060600083519050600080600090505b8281116116e9576116cf868287611e27565b9050809150506001826116e29190613aa7565b91506116bd565b508067ffffffffffffffff8111156117045761170361287d565b5b60405190808252806020026020018201604052801561173757816020015b60608152602001906001900390816117225790505b5092506000905060005b82811161178957611753868287611e27565b8584815181106117665761176561358b565b5b6020026020010181935082905250506001826117829190613aa7565b9150611741565b50505092915050565b60606000825167ffffffffffffffff8111156117b1576117b061287d565b5b6040519080825280602002602001820160405280156117e457816020015b60608152602001906001900390816117cf5790505b50905060005b8351811015611847576118168482815181106118095761180861358b565b5b6020026020010151610ef0565b8282815181106118295761182861358b565b5b6020026020010181905250808061183f9061350f565b9150506117ea565b5061185181611ee0565b915050919050565b6000808290506000600167ffffffffffffffff81111561187c5761187b61287d565b5b6040519080825280601f01601f1916602001820160405280156118ae5781602001600182028036833780820191505090505b50905060005b82518110156119b8578281815181106118d0576118cf61358b565b5b602001015160f81c60f81b826000815181106118ef576118ee61358b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508573ffffffffffffffffffffffffffffffffffffffff16637f2406a7836040518263ffffffff1660e01b81526004016119579190612d35565b602060405180830381865afa158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190613a1a565b846119a39190613aa7565b935080806119b09061350f565b9150506118b4565b50505092915050565b60606119cc83611f5a565b6119d583611f5a565b6040516020016119e6929190613bbf565b604051602081830303815290604052905092915050565b611a0561279d565b60008290506000600167ffffffffffffffff811115611a2757611a2661287d565b5b6040519080825280601f01601f191660200182016040528015611a595781602001600182028036833780820191505090505b5090506000825167ffffffffffffffff811115611a7957611a7861287d565b5b604051908082528060200260200182016040528015611ab257816020015b611a9f61279d565b815260200190600190039081611a975790505b509050600080600090505b8451811015611ce157848181518110611ad957611ad861358b565b5b602001015160f81c60f81b84600081518110611af857611af761358b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611bb6611bb18973ffffffffffffffffffffffffffffffffffffffff1663a4b3eff4876040518263ffffffff1660e01b8152600401611b669190612d35565b600060405180830381865afa158015611b83573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bac9190613ca5565b611fae565b612147565b838281518110611bc957611bc861358b565b5b60200260200101819052506000821115611c4757611c28838281518110611bf357611bf261358b565b5b6020026020010151611c04846121ba565b604051602001611c149190613d3a565b604051602081830303815290604052611cf7565b838281518110611c3b57611c3a61358b565b5b60200260200101819052505b8773ffffffffffffffffffffffffffffffffffffffff16637f2406a7856040518263ffffffff1660e01b8152600401611c809190612d35565b602060405180830381865afa158015611c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc19190613a1a565b82611ccc9190613aa7565b91508080611cd99061350f565b915050611abd565b50611ceb82611da4565b94505050505092915050565b611cff61279d565b611d528360405180604001604052806040518060400160405280600981526020017f7472616e73666f726d0000000000000000000000000000000000000000000000815250815260200185815250612288565b905092915050565b6000818310611d695781611d6b565b825b905092915050565b6060611d7e826123aa565b604051602001611d8e9190613db3565b6040516020818303038152906040529050919050565b611dac61279d565b611dbd611db883611792565b6125ef565b9050919050565b611dcc61279d565b611e1f8360405180604001604052806040518060400160405280600481526020017f66696c6c00000000000000000000000000000000000000000000000000000000815250815260200185815250612288565b905092915050565b606060008060018651611e3a9190613aa7565b905060405192506020830185602088010160008060008990505b85811015611e9e5760008203611e7d578351925082855260208401935060208501945061010091505b6008820391508860ff84841c1603611e93578095505b600181019050611e54565b8096508981038960ff85851c1603611eb7576001810390505b868803611ec5576001810390505b8089528060208a010160405250505050505050935093915050565b60606000825190506040519150602082016020840160005b83811015611f4557815183815160005b81811015611f2b5760208401935083518352602083019250602081019050611f08565b508086019550602085019450505050600181019050611ef8565b50602084830303845281604052505050919050565b60606000821315611f7557611f6e826121ba565b9050611fa9565b611f8782611f8290613dea565b6121ba565b604051602001611f979190613e7e565b60405160208183030381529060405290505b919050565b6060806020830160036002855102046040519250602083016000805b8381101561212d5760006010820603611fe857845191506018850194505b60008060028306600081146120145760ff8560e81c169250600f8560f41c1691508460181b9450612024565b8460f81c9250600f8560f01c1691505b5080600081146120f95760006002610100858560081b010361040081106000811461205d57602d93506003925081610400039150612065565b610400820391505b5060098111156120cf5760638111156120b4576103e78111156120995760318360081b1792508160010191506103e8810690505b606481046030018360081b1792508160010191506064810690505b600a81046030018360081b179250816001019150600a810690505b60208160300160081b8460101b171792508260088302610100031b8952818901985050505061211f565b607b83106060841116605b84106040851116171561211e578260f81b86526001860195505b5b505050600181019050611fca565b506020858303038552816040525050505080915050919050565b61214f61279d565b816040516020016121609190613eec565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b6060600060016121c98461264a565b01905060008167ffffffffffffffff8111156121e8576121e761287d565b5b6040519080825280601f01601f19166020018201604052801561221a5781602001600182028036833780820191505090505b509050600082602001820190505b60011561227d578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161227157612270613a47565b5b04945060008503612228575b819350505050919050565b61229061279d565b826000015181600001819052508260200151816020018190525060018360400151516122bc9190613aa7565b67ffffffffffffffff8111156122d5576122d461287d565b5b60405190808252806020026020018201604052801561230e57816020015b6122fb612800565b8152602001906001900390816122f35790505b50816040018190525060005b83604001515181101561237b578360400151818151811061233e5761233d61358b565b5b60200260200101518260400151828151811061235d5761235c61358b565b5b602002602001018190525080806123739061350f565b91505061231a565b50818160400151846040015151815181106123995761239861358b565b5b602002602001018190525092915050565b60606000600367ffffffffffffffff8111156123c9576123c861287d565b5b6040519080825280602002602001820160405280156123fc57816020015b60608152602001906001900390816123e75790505b5090506103e88311156124435761241f6103e88461241a9190613a76565b6121ba565b816000815181106124335761243261358b565b5b6020026020010181905250612499565b6040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152508160008151811061248d5761248c61358b565b5b60200260200101819052505b600a8310156124fc576040518060400160405280600381526020017f2e30300000000000000000000000000000000000000000000000000000000000815250816001815181106124ec576124eb61358b565b5b60200260200101819052506125b6565b606483101561255f576040518060400160405280600281526020017f2e300000000000000000000000000000000000000000000000000000000000008152508160018151811061254f5761254e61358b565b5b60200260200101819052506125b5565b6040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250816001815181106125a9576125a861358b565b5b60200260200101819052505b5b6125bf836121ba565b816002815181106125d3576125d261358b565b5b60200260200101819052506125e781611ee0565b915050919050565b6125f761279d565b60405160200161260690613f5a565b60405160208183030381529060405281600001819052508160405160200161262e9190614007565b6040516020818303038152906040528160200181905250919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106126a8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161269e5761269d613a47565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106126e5576d04ee2d6d415b85acef810000000083816126db576126da613a47565b5b0492506020810190505b662386f26fc10000831061271457662386f26fc10000838161270a57612709613a47565b5b0492506010810190505b6305f5e100831061273d576305f5e100838161273357612732613a47565b5b0492506008810190505b612710831061276257612710838161275857612757613a47565b5b0492506004810190505b60648310612785576064838161277b5761277a613a47565b5b0492506002810190505b600a8310612794576001810190505b80915050919050565b60405180606001604052806060815260200160608152602001606081525090565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b6000819050919050565b61282d8161281a565b82525050565b60006020820190506128486000830184612824565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128b58261286c565b810181811067ffffffffffffffff821117156128d4576128d361287d565b5b80604052505050565b60006128e761284e565b90506128f382826128ac565b919050565b600067ffffffffffffffff8211156129135761291261287d565b5b61291c8261286c565b9050602081019050919050565b82818337600083830152505050565b600061294b612946846128f8565b6128dd565b90508281526020810184848401111561296757612966612867565b5b612972848285612929565b509392505050565b600082601f83011261298f5761298e612862565b5b813561299f848260208601612938565b91505092915050565b6000602082840312156129be576129bd612858565b5b600082013567ffffffffffffffff8111156129dc576129db61285d565b5b6129e88482850161297a565b91505092915050565b60008115159050919050565b612a06816129f1565b82525050565b6000602082019050612a2160008301846129fd565b92915050565b612a308161281a565b8114612a3b57600080fd5b50565b600081359050612a4d81612a27565b92915050565b600060208284031215612a6957612a68612858565b5b6000612a7784828501612a3e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aba578082015181840152602081019050612a9f565b60008484015250505050565b6000612ad182612a80565b612adb8185612a8b565b9350612aeb818560208601612a9c565b612af48161286c565b840191505092915050565b60006080820190508181036000830152612b198187612ac6565b90508181036020830152612b2d8186612ac6565b90508181036040830152612b418185612ac6565b90508181036060830152612b558184612ac6565b905095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612ba5612ba0612b9b84612b60565b612b80565b612b60565b9050919050565b6000612bb782612b8a565b9050919050565b6000612bc982612bac565b9050919050565b612bd981612bbe565b82525050565b6000602082019050612bf46000830184612bd0565b92915050565b600080fd5b600080fd5b600060808284031215612c1a57612c19612bfa565b5b612c2460806128dd565b9050600082013567ffffffffffffffff811115612c4457612c43612bff565b5b612c508482850161297a565b600083015250602082013567ffffffffffffffff811115612c7457612c73612bff565b5b612c808482850161297a565b602083015250604082013567ffffffffffffffff811115612ca457612ca3612bff565b5b612cb08482850161297a565b604083015250606082013567ffffffffffffffff811115612cd457612cd3612bff565b5b612ce08482850161297a565b60608301525092915050565b600060208284031215612d0257612d01612858565b5b600082013567ffffffffffffffff811115612d2057612d1f61285d565b5b612d2c84828501612c04565b91505092915050565b60006020820190508181036000830152612d4f8184612ac6565b905092915050565b6000612d6282612b60565b9050919050565b6000612d7482612d57565b9050919050565b612d8481612d69565b8114612d8f57600080fd5b50565b600081359050612da181612d7b565b92915050565b60008060408385031215612dbe57612dbd612858565b5b600083013567ffffffffffffffff811115612ddc57612ddb61285d565b5b612de88582860161297a565b9250506020612df985828601612d92565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000612e2a82612e03565b612e348185612e0e565b9350612e44818560208601612a9c565b612e4d8161286c565b840191505092915050565b60006020820190508181036000830152612e728184612e1f565b905092915050565b600060408284031215612e9057612e8f612bfa565b5b612e9a60406128dd565b90506000612eaa84828501612a3e565b6000830152506020612ebe84828501612a3e565b60208301525092915050565b60008060008060a08587031215612ee457612ee3612858565b5b600085013567ffffffffffffffff811115612f0257612f0161285d565b5b612f0e8782880161297a565b945050602085013567ffffffffffffffff811115612f2f57612f2e61285d565b5b612f3b8782880161297a565b935050604085013567ffffffffffffffff811115612f5c57612f5b61285d565b5b612f688782880161297a565b9250506060612f7987828801612e7a565b91505092959194509250565b600082825260208201905092915050565b6000612fa182612a80565b612fab8185612f85565b9350612fbb818560208601612a9c565b612fc48161286c565b840191505092915050565b60006080830160008301518482036000860152612fec8282612f96565b915050602083015184820360208601526130068282612f96565b915050604083015184820360408601526130208282612f96565b9150506060830151848203606086015261303a8282612f96565b9150508091505092915050565b600060208201905081810360008301526130618184612fcf565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006130a18383612f96565b905092915050565b6000602082019050919050565b60006130c182613069565b6130cb8185613074565b9350836020820285016130dd85613085565b8060005b8581101561311957848403895281516130fa8582613095565b9450613105836130a9565b925060208a019950506001810190506130e1565b50829750879550505050505092915050565b6000602082019050818103600083015261314581846130b6565b905092915050565b600081905092915050565b600061316382612a80565b61316d818561314d565b935061317d818560208601612a9c565b80840191505092915050565b60006131958284613158565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131e757607f821691505b6020821081036131fa576131f96131a0565b5b50919050565b7f466f6e74206e6f74207265676973746572656400000000000000000000000000600082015250565b6000613236601383612a8b565b915061324182613200565b602082019050919050565b6000602082019050818103600083015261326581613229565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026132ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613291565b6132d88683613291565b95508019841693508086168417925050509392505050565b600061330b6133066133018461281a565b612b80565b61281a565b9050919050565b6000819050919050565b613325836132f0565b61333961333182613312565b84845461329e565b825550505050565b600090565b61334e613341565b61335981848461331c565b505050565b5b8181101561337d57613372600082613346565b60018101905061335f565b5050565b601f8211156133c2576133938161326c565b61339c84613281565b810160208510156133ab578190505b6133bf6133b785613281565b83018261335e565b50505b505050565b600082821c905092915050565b60006133e5600019846008026133c7565b1980831691505092915050565b60006133fe83836133d4565b9150826002028217905092915050565b61341782612a80565b67ffffffffffffffff8111156134305761342f61287d565b5b61343a82546131cf565b613445828285613381565b600060209050601f8311600181146134785760008415613466578287015190505b61347085826133f2565b8655506134d8565b601f1984166134868661326c565b60005b828110156134ae57848901518255600182019150602085019450602081019050613489565b868310156134cb57848901516134c7601f8916826133d4565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351a8261281a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361354c5761354b6134e0565b5b600182019050919050565b60006135628261281a565b915061356d8361281a565b9250828203905081811115613585576135846134e0565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b60006135d082612e03565b6135da81856135ba565b93506135ea818560208601612a9c565b80840191505092915050565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b600061362c60028361314d565b9150613637826135f6565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b600061367860028361314d565b915061368382613642565b600282019050919050565b600061369a82866135c5565b91506136a58261361f565b91506136b18285613158565b91506136bc8261366b565b91506136c88284613158565b9150819050949350505050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b600061370b601283612a8b565b9150613716826136d5565b602082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b600061374d82856135c5565b915061375982846135c5565b91508190509392505050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b60006137c160348361314d565b91506137cc82613765565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b600061383360268361314d565b915061383e826137d7565b602682019050919050565b6000613854826137b4565b91506138608284613158565b915061386b82613826565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b60006138ac60078361314d565b91506138b782613876565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b60006138f860088361314d565b9150613903826138c2565b600882019050919050565b600061391a82856135c5565b91506139258261389f565b915061393182846135c5565b915061393c826138eb565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b600061397e60078361314d565b915061398982613948565b600782019050919050565b60006139a082856135c5565b91506139ac82846135c5565b91506139b782613971565b91508190509392505050565b60006139ce8261281a565b91506139d98361281a565b92508282026139e78161281a565b915082820484148315176139fe576139fd6134e0565b5b5092915050565b600081519050613a1481612a27565b92915050565b600060208284031215613a3057613a2f612858565b5b6000613a3e84828501613a05565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a818261281a565b9150613a8c8361281a565b925082613a9c57613a9b613a47565b5b828204905092915050565b6000613ab28261281a565b9150613abd8361281a565b9250828201905080821115613ad557613ad46134e0565b5b92915050565b7f7472616e736c6174652800000000000000000000000000000000000000000000600082015250565b6000613b11600a8361314d565b9150613b1c82613adb565b600a82019050919050565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b6000613b5d60018361314d565b9150613b6882613b27565b600182019050919050565b7f2900000000000000000000000000000000000000000000000000000000000000600082015250565b6000613ba960018361314d565b9150613bb482613b73565b600182019050919050565b6000613bca82613b04565b9150613bd68285613158565b9150613be182613b50565b9150613bed8284613158565b9150613bf882613b9c565b91508190509392505050565b600067ffffffffffffffff821115613c1f57613c1e61287d565b5b613c288261286c565b9050602081019050919050565b6000613c48613c4384613c04565b6128dd565b905082815260208101848484011115613c6457613c63612867565b5b613c6f848285612a9c565b509392505050565b600082601f830112613c8c57613c8b612862565b5b8151613c9c848260208601613c35565b91505092915050565b600060208284031215613cbb57613cba612858565b5b600082015167ffffffffffffffff811115613cd957613cd861285d565b5b613ce584828501613c77565b91505092915050565b7f2030290000000000000000000000000000000000000000000000000000000000600082015250565b6000613d2460038361314d565b9150613d2f82613cee565b600382019050919050565b6000613d4582613b04565b9150613d518284613158565b9150613d5c82613d17565b915081905092915050565b7f7363616c65280000000000000000000000000000000000000000000000000000600082015250565b6000613d9d60068361314d565b9150613da882613d67565b600682019050919050565b6000613dbe82613d90565b9150613dca8284613158565b9150613dd582613b9c565b915081905092915050565b6000819050919050565b6000613df582613de0565b91507f80000000000000000000000000000000000000000000000000000000000000008203613e2757613e266134e0565b5b816000039050919050565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613e6860018361314d565b9150613e7382613e32565b600182019050919050565b6000613e8982613e5b565b9150613e958284613158565b915081905092915050565b7f3c7061746820643d220000000000000000000000000000000000000000000000600082015250565b6000613ed660098361314d565b9150613ee182613ea0565b600982019050919050565b6000613ef782613ec9565b9150613f0382846135c5565b915081905092915050565b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b6000613f4460098361314d565b9150613f4f82613f0e565b600982019050919050565b6000613f6582613f37565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b6000613fa560028361314d565b9150613fb082613f6f565b600282019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b6000613ff160058361314d565b9150613ffc82613fbb565b600582019050919050565b600061401282613f98565b915061401e82846135c5565b915061402982613fe4565b91508190509291505056fea26469706673582212201e5c9dcd2a7a22f79e93e01f80cdcbd7cfc7d340b836b023aa4058261442c1ad64736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063945cfb9e1161008c578063e61270e511610066578063e61270e51461029a578063eac8f5b8146102ca578063f80a64f5146102fa578063f9fbd5541461032a576100ea565b8063945cfb9e1461021e578063be985ac91461023a578063dec0314e1461026a576100ea565b80633882e980116100c85780633882e980146101705780634e2849c6146101a05780637d82d82b146101d057806386f79edb146101ee576100ea565b806316e921c0146100ef57806317fcb5961461010d57806328801cb71461013d575b600080fd5b6100f761035a565b6040516101049190612833565b60405180910390f35b610127600480360381019061012291906129a8565b610364565b6040516101349190612a0c565b60405180910390f35b61015760048036038101906101529190612a53565b6103db565b6040516101679493929190612aff565b60405180910390f35b61018a600480360381019061018591906129a8565b61062b565b6040516101979190612bdf565b60405180910390f35b6101ba60048036038101906101b59190612cec565b610674565b6040516101c79190612833565b60405180910390f35b6101d86107c4565b6040516101e59190612833565b60405180910390f35b61020860048036038101906102039190612a53565b6107ca565b6040516102159190612d35565b60405180910390f35b61023860048036038101906102339190612da7565b610a43565b005b610254600480360381019061024f9190612a53565b610aa4565b6040516102619190612d35565b60405180910390f35b610284600480360381019061027f9190612a53565b610b5e565b6040516102919190612e58565b60405180910390f35b6102b460048036038101906102af9190612eca565b610b70565b6040516102c19190612e58565b60405180910390f35b6102e460048036038101906102df9190612a53565b610b88565b6040516102f19190613047565b60405180910390f35b610314600480360381019061030f9190612eca565b610dfd565b6040516103219190612d35565b60405180910390f35b610344600480360381019061033f91906129a8565b610ebe565b604051610351919061312b565b60405180910390f35b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff1660008360405161038d9190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60026020528060005260406000206000915090508060000180546103fe906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461042a906131cf565b80156104775780601f1061044c57610100808354040283529160200191610477565b820191906000526020600020905b81548152906001019060200180831161045a57829003601f168201915b50505050509080600101805461048c906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546104b8906131cf565b80156105055780601f106104da57610100808354040283529160200191610505565b820191906000526020600020905b8154815290600101906020018083116104e857829003601f168201915b50505050509080600201805461051a906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610546906131cf565b80156105935780601f1061056857610100808354040283529160200191610593565b820191906000526020600020905b81548152906001019060200180831161057657829003601f168201915b5050505050908060030180546105a8906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546105d4906131cf565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b5050505050905084565b6000818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600083604001516040516106a19190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d9061324c565b60405180910390fd5b816002600060015481526020019081526020016000206000820151816000019081610751919061340e565b506020820151816001019081610767919061340e565b50604082015181600201908161077d919061340e565b506060820151816003019081610793919061340e565b50905050600160008154809291906107aa9061350f565b9190505550600180546107bd9190613557565b9050919050565b60015481565b60606000600260008481526020019081526020016000206040518060800160405290816000820180546107fc906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610828906131cf565b80156108755780601f1061084a57610100808354040283529160200191610875565b820191906000526020600020905b81548152906001019060200180831161085857829003601f168201915b5050505050815260200160018201805461088e906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba906131cf565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b50505050508152602001600282018054610920906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461094c906131cf565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b505050505081526020016003820180546109b2906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546109de906131cf565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b50505050508152505090508060000151915050919050565b80600083604051610a549190613189565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060008067ffffffffffffffff811115610ac257610ac161287d565b5b604051908082528060200260200182016040528015610afb57816020015b610ae861279d565b815260200190600190039081610ae05790505b509050610b566040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250610b48610b4384610ed2565b610ef0565b610b5186610ff8565b6112a5565b915050919050565b6060610b6982610ff8565b9050919050565b6060610b7e85858585611329565b9050949350505050565b610b906127be565b60026000838152602001908152602001600020604051806080016040529081600082018054610bbe906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea906131cf565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b50505050508152602001600182018054610c50906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7c906131cf565b8015610cc95780601f10610c9e57610100808354040283529160200191610cc9565b820191906000526020600020905b815481529060010190602001808311610cac57829003601f168201915b50505050508152602001600282018054610ce2906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0e906131cf565b8015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b50505050508152602001600382018054610d74906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610da0906131cf565b8015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b5050505050815250509050919050565b60606000600167ffffffffffffffff811115610e1c57610e1b61287d565b5b604051908082528060200260200182016040528015610e5557816020015b610e4261279d565b815260200190600190039081610e3a5790505b509050610eb36040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250610ea2610e9d84610ed2565b610ef0565b610eae89898989611329565b6112a5565b915050949350505050565b6060610ecb82600a6116ad565b9050919050565b610eda61279d565b610ee382611792565b8160200181905250919050565b606060008260000151511115610f82578160000151905060005b826040015151811015610f7c57600083604001518281518110610f3057610f2f61358b565b5b602002602001015190508281600001518260200151604051602001610f579392919061368e565b6040516020818303038152906040529250508080610f749061350f565b915050610f0a565b50610fcb565b600082604001515114610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613721565b60405180910390fd5b5b808260200151604051602001610fe2929190613741565b6040516020818303038152906040529050919050565b606060006002600084815260200190815260200160002060405180608001604052908160008201805461102a906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611056906131cf565b80156110a35780601f10611078576101008083540402835291602001916110a3565b820191906000526020600020905b81548152906001019060200180831161108657829003601f168201915b505050505081526020016001820180546110bc906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546110e8906131cf565b80156111355780601f1061110a57610100808354040283529160200191611135565b820191906000526020600020905b81548152906001019060200180831161111857829003601f168201915b5050505050815260200160028201805461114e906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461117a906131cf565b80156111c75780601f1061119c576101008083540402835291602001916111c7565b820191906000526020600020905b8154815290600101906020018083116111aa57829003601f168201915b505050505081526020016003820180546111e0906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461120c906131cf565b80156112595780601f1061122e57610100808354040283529160200191611259565b820191906000526020600020905b81548152906001019060200180831161123c57829003601f168201915b505050505081525050905061126c6127e6565b61040081600001818152505061040081602001818152505061129c82600001518360200151846040015184611329565b92505050919050565b60606000846040516020016112ba9190613849565b60405160208183030381529060405290506000845111156112fa5780846040516020016112e892919061390e565b60405160208183030381529060405290505b808360405160200161130d929190613994565b6040516020818303038152906040529050809150509392505050565b6060600061133886600a6116ad565b90506000815167ffffffffffffffff8111156113575761135661287d565b5b60405190808252806020026020018201604052801561139057816020015b61137d61279d565b8152602001906001900390816113755790505b509050600080866040516113a49190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600486600001516113e891906139c3565b905060005b845181101561151557600061141c8487848151811061140f5761140e61358b565b5b6020026020010151611859565b90508281111561142a578092505b6114e36114b16000848773ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190613a1a565b6114ac91906139c3565b6119c1565b6114d5868986815181106114c8576114c761358b565b5b60200260200101516119fd565b611cf790919063ffffffff16565b8583815181106114f6576114f561358b565b5b602002602001018190525050808061150d9061350f565b9150506113ed565b5060006115d4826103e8896000015161152e91906139c3565b6115389190613a76565b86518573ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a99190613a1a565b6115b391906139c3565b6103e88a602001516115c591906139c3565b6115cf9190613a76565b611d5a565b905060006115fb6115e483611d73565b6115ed87611da4565b611cf790919063ffffffff16565b90506116108a82611dc490919063ffffffff16565b90506000600167ffffffffffffffff81111561162f5761162e61287d565b5b60405190808252806020026020018201604052801561166857816020015b61165561279d565b81526020019060019003908161164d5790505b50905081816000815181106116805761167f61358b565b5b602002602001018190525061169c61169782610ed2565b610ef0565b975050505050505050949350505050565b6060600083519050600080600090505b8281116116e9576116cf868287611e27565b9050809150506001826116e29190613aa7565b91506116bd565b508067ffffffffffffffff8111156117045761170361287d565b5b60405190808252806020026020018201604052801561173757816020015b60608152602001906001900390816117225790505b5092506000905060005b82811161178957611753868287611e27565b8584815181106117665761176561358b565b5b6020026020010181935082905250506001826117829190613aa7565b9150611741565b50505092915050565b60606000825167ffffffffffffffff8111156117b1576117b061287d565b5b6040519080825280602002602001820160405280156117e457816020015b60608152602001906001900390816117cf5790505b50905060005b8351811015611847576118168482815181106118095761180861358b565b5b6020026020010151610ef0565b8282815181106118295761182861358b565b5b6020026020010181905250808061183f9061350f565b9150506117ea565b5061185181611ee0565b915050919050565b6000808290506000600167ffffffffffffffff81111561187c5761187b61287d565b5b6040519080825280601f01601f1916602001820160405280156118ae5781602001600182028036833780820191505090505b50905060005b82518110156119b8578281815181106118d0576118cf61358b565b5b602001015160f81c60f81b826000815181106118ef576118ee61358b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508573ffffffffffffffffffffffffffffffffffffffff16637f2406a7836040518263ffffffff1660e01b81526004016119579190612d35565b602060405180830381865afa158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190613a1a565b846119a39190613aa7565b935080806119b09061350f565b9150506118b4565b50505092915050565b60606119cc83611f5a565b6119d583611f5a565b6040516020016119e6929190613bbf565b604051602081830303815290604052905092915050565b611a0561279d565b60008290506000600167ffffffffffffffff811115611a2757611a2661287d565b5b6040519080825280601f01601f191660200182016040528015611a595781602001600182028036833780820191505090505b5090506000825167ffffffffffffffff811115611a7957611a7861287d565b5b604051908082528060200260200182016040528015611ab257816020015b611a9f61279d565b815260200190600190039081611a975790505b509050600080600090505b8451811015611ce157848181518110611ad957611ad861358b565b5b602001015160f81c60f81b84600081518110611af857611af761358b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611bb6611bb18973ffffffffffffffffffffffffffffffffffffffff1663a4b3eff4876040518263ffffffff1660e01b8152600401611b669190612d35565b600060405180830381865afa158015611b83573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bac9190613ca5565b611fae565b612147565b838281518110611bc957611bc861358b565b5b60200260200101819052506000821115611c4757611c28838281518110611bf357611bf261358b565b5b6020026020010151611c04846121ba565b604051602001611c149190613d3a565b604051602081830303815290604052611cf7565b838281518110611c3b57611c3a61358b565b5b60200260200101819052505b8773ffffffffffffffffffffffffffffffffffffffff16637f2406a7856040518263ffffffff1660e01b8152600401611c809190612d35565b602060405180830381865afa158015611c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc19190613a1a565b82611ccc9190613aa7565b91508080611cd99061350f565b915050611abd565b50611ceb82611da4565b94505050505092915050565b611cff61279d565b611d528360405180604001604052806040518060400160405280600981526020017f7472616e73666f726d0000000000000000000000000000000000000000000000815250815260200185815250612288565b905092915050565b6000818310611d695781611d6b565b825b905092915050565b6060611d7e826123aa565b604051602001611d8e9190613db3565b6040516020818303038152906040529050919050565b611dac61279d565b611dbd611db883611792565b6125ef565b9050919050565b611dcc61279d565b611e1f8360405180604001604052806040518060400160405280600481526020017f66696c6c00000000000000000000000000000000000000000000000000000000815250815260200185815250612288565b905092915050565b606060008060018651611e3a9190613aa7565b905060405192506020830185602088010160008060008990505b85811015611e9e5760008203611e7d578351925082855260208401935060208501945061010091505b6008820391508860ff84841c1603611e93578095505b600181019050611e54565b8096508981038960ff85851c1603611eb7576001810390505b868803611ec5576001810390505b8089528060208a010160405250505050505050935093915050565b60606000825190506040519150602082016020840160005b83811015611f4557815183815160005b81811015611f2b5760208401935083518352602083019250602081019050611f08565b508086019550602085019450505050600181019050611ef8565b50602084830303845281604052505050919050565b60606000821315611f7557611f6e826121ba565b9050611fa9565b611f8782611f8290613dea565b6121ba565b604051602001611f979190613e7e565b60405160208183030381529060405290505b919050565b6060806020830160036002855102046040519250602083016000805b8381101561212d5760006010820603611fe857845191506018850194505b60008060028306600081146120145760ff8560e81c169250600f8560f41c1691508460181b9450612024565b8460f81c9250600f8560f01c1691505b5080600081146120f95760006002610100858560081b010361040081106000811461205d57602d93506003925081610400039150612065565b610400820391505b5060098111156120cf5760638111156120b4576103e78111156120995760318360081b1792508160010191506103e8810690505b606481046030018360081b1792508160010191506064810690505b600a81046030018360081b179250816001019150600a810690505b60208160300160081b8460101b171792508260088302610100031b8952818901985050505061211f565b607b83106060841116605b84106040851116171561211e578260f81b86526001860195505b5b505050600181019050611fca565b506020858303038552816040525050505080915050919050565b61214f61279d565b816040516020016121609190613eec565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b6060600060016121c98461264a565b01905060008167ffffffffffffffff8111156121e8576121e761287d565b5b6040519080825280601f01601f19166020018201604052801561221a5781602001600182028036833780820191505090505b509050600082602001820190505b60011561227d578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161227157612270613a47565b5b04945060008503612228575b819350505050919050565b61229061279d565b826000015181600001819052508260200151816020018190525060018360400151516122bc9190613aa7565b67ffffffffffffffff8111156122d5576122d461287d565b5b60405190808252806020026020018201604052801561230e57816020015b6122fb612800565b8152602001906001900390816122f35790505b50816040018190525060005b83604001515181101561237b578360400151818151811061233e5761233d61358b565b5b60200260200101518260400151828151811061235d5761235c61358b565b5b602002602001018190525080806123739061350f565b91505061231a565b50818160400151846040015151815181106123995761239861358b565b5b602002602001018190525092915050565b60606000600367ffffffffffffffff8111156123c9576123c861287d565b5b6040519080825280602002602001820160405280156123fc57816020015b60608152602001906001900390816123e75790505b5090506103e88311156124435761241f6103e88461241a9190613a76565b6121ba565b816000815181106124335761243261358b565b5b6020026020010181905250612499565b6040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152508160008151811061248d5761248c61358b565b5b60200260200101819052505b600a8310156124fc576040518060400160405280600381526020017f2e30300000000000000000000000000000000000000000000000000000000000815250816001815181106124ec576124eb61358b565b5b60200260200101819052506125b6565b606483101561255f576040518060400160405280600281526020017f2e300000000000000000000000000000000000000000000000000000000000008152508160018151811061254f5761254e61358b565b5b60200260200101819052506125b5565b6040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250816001815181106125a9576125a861358b565b5b60200260200101819052505b5b6125bf836121ba565b816002815181106125d3576125d261358b565b5b60200260200101819052506125e781611ee0565b915050919050565b6125f761279d565b60405160200161260690613f5a565b60405160208183030381529060405281600001819052508160405160200161262e9190614007565b6040516020818303038152906040528160200181905250919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106126a8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161269e5761269d613a47565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106126e5576d04ee2d6d415b85acef810000000083816126db576126da613a47565b5b0492506020810190505b662386f26fc10000831061271457662386f26fc10000838161270a57612709613a47565b5b0492506010810190505b6305f5e100831061273d576305f5e100838161273357612732613a47565b5b0492506008810190505b612710831061276257612710838161275857612757613a47565b5b0492506004810190505b60648310612785576064838161277b5761277a613a47565b5b0492506002810190505b600a8310612794576001810190505b80915050919050565b60405180606001604052806060815260200160608152602001606081525090565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b6000819050919050565b61282d8161281a565b82525050565b60006020820190506128486000830184612824565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128b58261286c565b810181811067ffffffffffffffff821117156128d4576128d361287d565b5b80604052505050565b60006128e761284e565b90506128f382826128ac565b919050565b600067ffffffffffffffff8211156129135761291261287d565b5b61291c8261286c565b9050602081019050919050565b82818337600083830152505050565b600061294b612946846128f8565b6128dd565b90508281526020810184848401111561296757612966612867565b5b612972848285612929565b509392505050565b600082601f83011261298f5761298e612862565b5b813561299f848260208601612938565b91505092915050565b6000602082840312156129be576129bd612858565b5b600082013567ffffffffffffffff8111156129dc576129db61285d565b5b6129e88482850161297a565b91505092915050565b60008115159050919050565b612a06816129f1565b82525050565b6000602082019050612a2160008301846129fd565b92915050565b612a308161281a565b8114612a3b57600080fd5b50565b600081359050612a4d81612a27565b92915050565b600060208284031215612a6957612a68612858565b5b6000612a7784828501612a3e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aba578082015181840152602081019050612a9f565b60008484015250505050565b6000612ad182612a80565b612adb8185612a8b565b9350612aeb818560208601612a9c565b612af48161286c565b840191505092915050565b60006080820190508181036000830152612b198187612ac6565b90508181036020830152612b2d8186612ac6565b90508181036040830152612b418185612ac6565b90508181036060830152612b558184612ac6565b905095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612ba5612ba0612b9b84612b60565b612b80565b612b60565b9050919050565b6000612bb782612b8a565b9050919050565b6000612bc982612bac565b9050919050565b612bd981612bbe565b82525050565b6000602082019050612bf46000830184612bd0565b92915050565b600080fd5b600080fd5b600060808284031215612c1a57612c19612bfa565b5b612c2460806128dd565b9050600082013567ffffffffffffffff811115612c4457612c43612bff565b5b612c508482850161297a565b600083015250602082013567ffffffffffffffff811115612c7457612c73612bff565b5b612c808482850161297a565b602083015250604082013567ffffffffffffffff811115612ca457612ca3612bff565b5b612cb08482850161297a565b604083015250606082013567ffffffffffffffff811115612cd457612cd3612bff565b5b612ce08482850161297a565b60608301525092915050565b600060208284031215612d0257612d01612858565b5b600082013567ffffffffffffffff811115612d2057612d1f61285d565b5b612d2c84828501612c04565b91505092915050565b60006020820190508181036000830152612d4f8184612ac6565b905092915050565b6000612d6282612b60565b9050919050565b6000612d7482612d57565b9050919050565b612d8481612d69565b8114612d8f57600080fd5b50565b600081359050612da181612d7b565b92915050565b60008060408385031215612dbe57612dbd612858565b5b600083013567ffffffffffffffff811115612ddc57612ddb61285d565b5b612de88582860161297a565b9250506020612df985828601612d92565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000612e2a82612e03565b612e348185612e0e565b9350612e44818560208601612a9c565b612e4d8161286c565b840191505092915050565b60006020820190508181036000830152612e728184612e1f565b905092915050565b600060408284031215612e9057612e8f612bfa565b5b612e9a60406128dd565b90506000612eaa84828501612a3e565b6000830152506020612ebe84828501612a3e565b60208301525092915050565b60008060008060a08587031215612ee457612ee3612858565b5b600085013567ffffffffffffffff811115612f0257612f0161285d565b5b612f0e8782880161297a565b945050602085013567ffffffffffffffff811115612f2f57612f2e61285d565b5b612f3b8782880161297a565b935050604085013567ffffffffffffffff811115612f5c57612f5b61285d565b5b612f688782880161297a565b9250506060612f7987828801612e7a565b91505092959194509250565b600082825260208201905092915050565b6000612fa182612a80565b612fab8185612f85565b9350612fbb818560208601612a9c565b612fc48161286c565b840191505092915050565b60006080830160008301518482036000860152612fec8282612f96565b915050602083015184820360208601526130068282612f96565b915050604083015184820360408601526130208282612f96565b9150506060830151848203606086015261303a8282612f96565b9150508091505092915050565b600060208201905081810360008301526130618184612fcf565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006130a18383612f96565b905092915050565b6000602082019050919050565b60006130c182613069565b6130cb8185613074565b9350836020820285016130dd85613085565b8060005b8581101561311957848403895281516130fa8582613095565b9450613105836130a9565b925060208a019950506001810190506130e1565b50829750879550505050505092915050565b6000602082019050818103600083015261314581846130b6565b905092915050565b600081905092915050565b600061316382612a80565b61316d818561314d565b935061317d818560208601612a9c565b80840191505092915050565b60006131958284613158565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131e757607f821691505b6020821081036131fa576131f96131a0565b5b50919050565b7f466f6e74206e6f74207265676973746572656400000000000000000000000000600082015250565b6000613236601383612a8b565b915061324182613200565b602082019050919050565b6000602082019050818103600083015261326581613229565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026132ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613291565b6132d88683613291565b95508019841693508086168417925050509392505050565b600061330b6133066133018461281a565b612b80565b61281a565b9050919050565b6000819050919050565b613325836132f0565b61333961333182613312565b84845461329e565b825550505050565b600090565b61334e613341565b61335981848461331c565b505050565b5b8181101561337d57613372600082613346565b60018101905061335f565b5050565b601f8211156133c2576133938161326c565b61339c84613281565b810160208510156133ab578190505b6133bf6133b785613281565b83018261335e565b50505b505050565b600082821c905092915050565b60006133e5600019846008026133c7565b1980831691505092915050565b60006133fe83836133d4565b9150826002028217905092915050565b61341782612a80565b67ffffffffffffffff8111156134305761342f61287d565b5b61343a82546131cf565b613445828285613381565b600060209050601f8311600181146134785760008415613466578287015190505b61347085826133f2565b8655506134d8565b601f1984166134868661326c565b60005b828110156134ae57848901518255600182019150602085019450602081019050613489565b868310156134cb57848901516134c7601f8916826133d4565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351a8261281a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361354c5761354b6134e0565b5b600182019050919050565b60006135628261281a565b915061356d8361281a565b9250828203905081811115613585576135846134e0565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b60006135d082612e03565b6135da81856135ba565b93506135ea818560208601612a9c565b80840191505092915050565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b600061362c60028361314d565b9150613637826135f6565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b600061367860028361314d565b915061368382613642565b600282019050919050565b600061369a82866135c5565b91506136a58261361f565b91506136b18285613158565b91506136bc8261366b565b91506136c88284613158565b9150819050949350505050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b600061370b601283612a8b565b9150613716826136d5565b602082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b600061374d82856135c5565b915061375982846135c5565b91508190509392505050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b60006137c160348361314d565b91506137cc82613765565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b600061383360268361314d565b915061383e826137d7565b602682019050919050565b6000613854826137b4565b91506138608284613158565b915061386b82613826565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b60006138ac60078361314d565b91506138b782613876565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b60006138f860088361314d565b9150613903826138c2565b600882019050919050565b600061391a82856135c5565b91506139258261389f565b915061393182846135c5565b915061393c826138eb565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b600061397e60078361314d565b915061398982613948565b600782019050919050565b60006139a082856135c5565b91506139ac82846135c5565b91506139b782613971565b91508190509392505050565b60006139ce8261281a565b91506139d98361281a565b92508282026139e78161281a565b915082820484148315176139fe576139fd6134e0565b5b5092915050565b600081519050613a1481612a27565b92915050565b600060208284031215613a3057613a2f612858565b5b6000613a3e84828501613a05565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a818261281a565b9150613a8c8361281a565b925082613a9c57613a9b613a47565b5b828204905092915050565b6000613ab28261281a565b9150613abd8361281a565b9250828201905080821115613ad557613ad46134e0565b5b92915050565b7f7472616e736c6174652800000000000000000000000000000000000000000000600082015250565b6000613b11600a8361314d565b9150613b1c82613adb565b600a82019050919050565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b6000613b5d60018361314d565b9150613b6882613b27565b600182019050919050565b7f2900000000000000000000000000000000000000000000000000000000000000600082015250565b6000613ba960018361314d565b9150613bb482613b73565b600182019050919050565b6000613bca82613b04565b9150613bd68285613158565b9150613be182613b50565b9150613bed8284613158565b9150613bf882613b9c565b91508190509392505050565b600067ffffffffffffffff821115613c1f57613c1e61287d565b5b613c288261286c565b9050602081019050919050565b6000613c48613c4384613c04565b6128dd565b905082815260208101848484011115613c6457613c63612867565b5b613c6f848285612a9c565b509392505050565b600082601f830112613c8c57613c8b612862565b5b8151613c9c848260208601613c35565b91505092915050565b600060208284031215613cbb57613cba612858565b5b600082015167ffffffffffffffff811115613cd957613cd861285d565b5b613ce584828501613c77565b91505092915050565b7f2030290000000000000000000000000000000000000000000000000000000000600082015250565b6000613d2460038361314d565b9150613d2f82613cee565b600382019050919050565b6000613d4582613b04565b9150613d518284613158565b9150613d5c82613d17565b915081905092915050565b7f7363616c65280000000000000000000000000000000000000000000000000000600082015250565b6000613d9d60068361314d565b9150613da882613d67565b600682019050919050565b6000613dbe82613d90565b9150613dca8284613158565b9150613dd582613b9c565b915081905092915050565b6000819050919050565b6000613df582613de0565b91507f80000000000000000000000000000000000000000000000000000000000000008203613e2757613e266134e0565b5b816000039050919050565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613e6860018361314d565b9150613e7382613e32565b600182019050919050565b6000613e8982613e5b565b9150613e958284613158565b915081905092915050565b7f3c7061746820643d220000000000000000000000000000000000000000000000600082015250565b6000613ed660098361314d565b9150613ee182613ea0565b600982019050919050565b6000613ef782613ec9565b9150613f0382846135c5565b915081905092915050565b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b6000613f4460098361314d565b9150613f4f82613f0e565b600982019050919050565b6000613f6582613f37565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b6000613fa560028361314d565b9150613fb082613f6f565b600282019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b6000613ff160058361314d565b9150613ffc82613fbb565b600582019050919050565b600061401282613f98565b915061401e82846135c5565b915061402982613fe4565b91508190509291505056fea26469706673582212201e5c9dcd2a7a22f79e93e01f80cdcbd7cfc7d340b836b023aa4058261442c1ad64736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/abis/MessageStoreV2___.json b/src/abis/MessageStoreV2___.json new file mode 100644 index 00000000..7ae2265d --- /dev/null +++ b/src/abis/MessageStoreV2___.json @@ -0,0 +1,206 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MessageStoreV2", + "sourceName": "contracts/imageParts/svgstore/MessageStoreV2.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "fonts", + "outputs": [ + { + "internalType": "contract IFontProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSVG", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSVGBody", + "outputs": [ + { + "internalType": "bytes", + "name": "output", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "w", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "h", + "type": "uint256" + } + ], + "internalType": "struct IMessageStoreV2.Box", + "name": "box", + "type": "tuple" + } + ], + "name": "getSVGMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + } + ], + "internalType": "struct IMessageStoreV2.Asset", + "name": "asset", + "type": "tuple" + } + ], + "name": "register", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "contract IFontProvider", + "name": "fontProvider", + "type": "address" + } + ], + "name": "registerFont", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "test", + "outputs": [ + { + "internalType": "string[]", + "name": "output", + "type": "string[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60806040526001805534801561001457600080fd5b506136e8806100246000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063be985ac91161005b578063be985ac914610139578063dec0314e14610169578063f80a64f514610199578063f9fbd554146101c957610088565b806307ca9b181461008d5780633882e980146100bd57806386f79edb146100ed578063945cfb9e1461011d575b600080fd5b6100a760048036038101906100a29190612215565b6101f9565b6040516100b49190612277565b60405180910390f35b6100d760048036038101906100d29190612292565b610339565b6040516100e4919061235a565b60405180910390f35b610107600480360381019061010291906123a1565b610382565b604051610114919061244d565b60405180910390f35b610137600480360381019061013291906124bf565b610569565b005b610153600480360381019061014e91906123a1565b6105ca565b604051610160919061244d565b60405180910390f35b610183600480360381019061017e91906123a1565b610684565b6040516101909190612570565b60405180910390f35b6101b360048036038101906101ae91906125e2565b610696565b6040516101c0919061244d565b60405180910390f35b6101e360048036038101906101de9190612292565b610757565b6040516101f091906127a9565b60405180910390f35b60008082604001519050600073ffffffffffffffffffffffffffffffffffffffff1660008260405161022b9190612807565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036102b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a79061286a565b60405180910390fd5b8260026000600154815260200190815260200160002060008201518160000190816102db9190612a8c565b5060208201518160010190816102f19190612a8c565b5060408201518160020190816103079190612a8c565b509050506001600081548092919061031e90612b8d565b9190505550600180546103319190612bd5565b915050919050565b6000818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000600260008481526020019081526020016000206040518060600160405290816000820180546103b4906128b9565b80601f01602080910402602001604051908101604052809291908181526020018280546103e0906128b9565b801561042d5780601f106104025761010080835404028352916020019161042d565b820191906000526020600020905b81548152906001019060200180831161041057829003601f168201915b50505050508152602001600182018054610446906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610472906128b9565b80156104bf5780601f10610494576101008083540402835291602001916104bf565b820191906000526020600020905b8154815290600101906020018083116104a257829003601f168201915b505050505081526020016002820180546104d8906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610504906128b9565b80156105515780601f1061052657610100808354040283529160200191610551565b820191906000526020600020905b81548152906001019060200180831161053457829003601f168201915b50505050508152505090508060000151915050919050565b8060008360405161057a9190612807565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060008067ffffffffffffffff8111156105e8576105e7612023565b5b60405190808252806020026020018201604052801561062157816020015b61060e611fa4565b8152602001906001900390816106065790505b50905061067c6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525061066e6106698461076b565b610789565b61067786610891565b610aac565b915050919050565b606061068f82610891565b9050919050565b60606000600167ffffffffffffffff8111156106b5576106b4612023565b5b6040519080825280602002602001820160405280156106ee57816020015b6106db611fa4565b8152602001906001900390816106d35790505b50905061074c6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525061073b6107368461076b565b610789565b61074789898989610b30565b610aac565b915050949350505050565b606061076482600a610eb4565b9050919050565b610773611fa4565b61077c82610f99565b8160200181905250919050565b60606000826000015151111561081b578160000151905060005b826040015151811015610815576000836040015182815181106107c9576107c8612c09565b5b6020026020010151905082816000015182602001516040516020016107f093929190612d0c565b604051602081830303815290604052925050808061080d90612b8d565b9150506107a3565b50610864565b600082604001515114610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085a90612d9f565b60405180910390fd5b5b80826020015160405160200161087b929190612dbf565b6040516020818303038152906040529050919050565b60606000600260008481526020019081526020016000206040518060600160405290816000820180546108c3906128b9565b80601f01602080910402602001604051908101604052809291908181526020018280546108ef906128b9565b801561093c5780601f106109115761010080835404028352916020019161093c565b820191906000526020600020905b81548152906001019060200180831161091f57829003601f168201915b50505050508152602001600182018054610955906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610981906128b9565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505081526020016002820180546109e7906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a13906128b9565b8015610a605780601f10610a3557610100808354040283529160200191610a60565b820191906000526020600020905b815481529060010190602001808311610a4357829003601f168201915b5050505050815250509050610a73611fc5565b610400816000018181525050610400816020018181525050610aa382600001518360200151846040015184610b30565b92505050919050565b6060600084604051602001610ac19190612ec7565b6040516020818303038152906040529050600084511115610b01578084604051602001610aef929190612f8c565b60405160208183030381529060405290505b8083604051602001610b14929190613012565b6040516020818303038152906040529050809150509392505050565b60606000610b3f86600a610eb4565b90506000815167ffffffffffffffff811115610b5e57610b5d612023565b5b604051908082528060200260200182016040528015610b9757816020015b610b84611fa4565b815260200190600190039081610b7c5790505b50905060008086604051610bab9190612807565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060048660000151610bef9190613041565b905060005b8451811015610d1c576000610c2384878481518110610c1657610c15612c09565b5b6020026020010151611060565b905082811115610c31578092505b610cea610cb86000848773ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190613098565b610cb39190613041565b6111c8565b610cdc86898681518110610ccf57610cce612c09565b5b6020026020010151611204565b6114fe90919063ffffffff16565b858381518110610cfd57610cfc612c09565b5b6020026020010181905250508080610d1490612b8d565b915050610bf4565b506000610ddb826103e88960000151610d359190613041565b610d3f91906130f4565b86518573ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db09190613098565b610dba9190613041565b6103e88a60200151610dcc9190613041565b610dd691906130f4565b611561565b90506000610e02610deb8361157a565b610df4876115ab565b6114fe90919063ffffffff16565b9050610e178a826115cb90919063ffffffff16565b90506000600167ffffffffffffffff811115610e3657610e35612023565b5b604051908082528060200260200182016040528015610e6f57816020015b610e5c611fa4565b815260200190600190039081610e545790505b5090508181600081518110610e8757610e86612c09565b5b6020026020010181905250610ea3610e9e8261076b565b610789565b975050505050505050949350505050565b6060600083519050600080600090505b828111610ef057610ed686828761162e565b905080915050600182610ee99190613125565b9150610ec4565b508067ffffffffffffffff811115610f0b57610f0a612023565b5b604051908082528060200260200182016040528015610f3e57816020015b6060815260200190600190039081610f295790505b5092506000905060005b828111610f9057610f5a86828761162e565b858481518110610f6d57610f6c612c09565b5b602002602001018193508290525050600182610f899190613125565b9150610f48565b50505092915050565b60606000825167ffffffffffffffff811115610fb857610fb7612023565b5b604051908082528060200260200182016040528015610feb57816020015b6060815260200190600190039081610fd65790505b50905060005b835181101561104e5761101d8482815181106110105761100f612c09565b5b6020026020010151610789565b8282815181106110305761102f612c09565b5b6020026020010181905250808061104690612b8d565b915050610ff1565b50611058816116e7565b915050919050565b6000808290506000600167ffffffffffffffff81111561108357611082612023565b5b6040519080825280601f01601f1916602001820160405280156110b55781602001600182028036833780820191505090505b50905060005b82518110156111bf578281815181106110d7576110d6612c09565b5b602001015160f81c60f81b826000815181106110f6576110f5612c09565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508573ffffffffffffffffffffffffffffffffffffffff16637f2406a7836040518263ffffffff1660e01b815260040161115e919061244d565b602060405180830381865afa15801561117b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119f9190613098565b846111aa9190613125565b935080806111b790612b8d565b9150506110bb565b50505092915050565b60606111d383611761565b6111dc83611761565b6040516020016111ed92919061323d565b604051602081830303815290604052905092915050565b61120c611fa4565b60008290506000600167ffffffffffffffff81111561122e5761122d612023565b5b6040519080825280601f01601f1916602001820160405280156112605781602001600182028036833780820191505090505b5090506000825167ffffffffffffffff8111156112805761127f612023565b5b6040519080825280602002602001820160405280156112b957816020015b6112a6611fa4565b81526020019060019003908161129e5790505b509050600080600090505b84518110156114e8578481815181106112e0576112df612c09565b5b602001015160f81c60f81b846000815181106112ff576112fe612c09565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506113bd6113b88973ffffffffffffffffffffffffffffffffffffffff1663a4b3eff4876040518263ffffffff1660e01b815260040161136d919061244d565b600060405180830381865afa15801561138a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113b39190613323565b6117b5565b61194e565b8382815181106113d0576113cf612c09565b5b6020026020010181905250600082111561144e5761142f8382815181106113fa576113f9612c09565b5b602002602001015161140b846119c1565b60405160200161141b91906133b8565b6040516020818303038152906040526114fe565b83828151811061144257611441612c09565b5b60200260200101819052505b8773ffffffffffffffffffffffffffffffffffffffff16637f2406a7856040518263ffffffff1660e01b8152600401611487919061244d565b602060405180830381865afa1580156114a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c89190613098565b826114d39190613125565b915080806114e090612b8d565b9150506112c4565b506114f2826115ab565b94505050505092915050565b611506611fa4565b6115598360405180604001604052806040518060400160405280600981526020017f7472616e73666f726d0000000000000000000000000000000000000000000000815250815260200185815250611a8f565b905092915050565b60008183106115705781611572565b825b905092915050565b606061158582611bb1565b6040516020016115959190613431565b6040516020818303038152906040529050919050565b6115b3611fa4565b6115c46115bf83610f99565b611df6565b9050919050565b6115d3611fa4565b6116268360405180604001604052806040518060400160405280600481526020017f66696c6c00000000000000000000000000000000000000000000000000000000815250815260200185815250611a8f565b905092915050565b6060600080600186516116419190613125565b905060405192506020830185602088010160008060008990505b858110156116a55760008203611684578351925082855260208401935060208501945061010091505b6008820391508860ff84841c160361169a578095505b60018101905061165b565b8096508981038960ff85851c16036116be576001810390505b8688036116cc576001810390505b8089528060208a010160405250505050505050935093915050565b60606000825190506040519150602082016020840160005b8381101561174c57815183815160005b81811015611732576020840193508351835260208301925060208101905061170f565b5080860195506020850194505050506001810190506116ff565b50602084830303845281604052505050919050565b6060600082131561177c57611775826119c1565b90506117b0565b61178e8261178990613468565b6119c1565b60405160200161179e91906134fc565b60405160208183030381529060405290505b919050565b6060806020830160036002855102046040519250602083016000805b8381101561193457600060108206036117ef57845191506018850194505b600080600283066000811461181b5760ff8560e81c169250600f8560f41c1691508460181b945061182b565b8460f81c9250600f8560f01c1691505b5080600081146119005760006002610100858560081b010361040081106000811461186457602d9350600392508161040003915061186c565b610400820391505b5060098111156118d65760638111156118bb576103e78111156118a05760318360081b1792508160010191506103e8810690505b606481046030018360081b1792508160010191506064810690505b600a81046030018360081b179250816001019150600a810690505b60208160300160081b8460101b171792508260088302610100031b89528189019850505050611926565b607b83106060841116605b841060408511161715611925578260f81b86526001860195505b5b5050506001810190506117d1565b506020858303038552816040525050505080915050919050565b611956611fa4565b81604051602001611967919061356a565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b6060600060016119d084611e51565b01905060008167ffffffffffffffff8111156119ef576119ee612023565b5b6040519080825280601f01601f191660200182016040528015611a215781602001600182028036833780820191505090505b509050600082602001820190505b600115611a84578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611a7857611a776130c5565b5b04945060008503611a2f575b819350505050919050565b611a97611fa4565b82600001518160000181905250826020015181602001819052506001836040015151611ac39190613125565b67ffffffffffffffff811115611adc57611adb612023565b5b604051908082528060200260200182016040528015611b1557816020015b611b02611fdf565b815260200190600190039081611afa5790505b50816040018190525060005b836040015151811015611b825783604001518181518110611b4557611b44612c09565b5b602002602001015182604001518281518110611b6457611b63612c09565b5b60200260200101819052508080611b7a90612b8d565b915050611b21565b5081816040015184604001515181518110611ba057611b9f612c09565b5b602002602001018190525092915050565b60606000600367ffffffffffffffff811115611bd057611bcf612023565b5b604051908082528060200260200182016040528015611c0357816020015b6060815260200190600190039081611bee5790505b5090506103e8831115611c4a57611c266103e884611c2191906130f4565b6119c1565b81600081518110611c3a57611c39612c09565b5b6020026020010181905250611ca0565b6040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081600081518110611c9457611c93612c09565b5b60200260200101819052505b600a831015611d03576040518060400160405280600381526020017f2e3030000000000000000000000000000000000000000000000000000000000081525081600181518110611cf357611cf2612c09565b5b6020026020010181905250611dbd565b6064831015611d66576040518060400160405280600281526020017f2e3000000000000000000000000000000000000000000000000000000000000081525081600181518110611d5657611d55612c09565b5b6020026020010181905250611dbc565b6040518060400160405280600181526020017f2e0000000000000000000000000000000000000000000000000000000000000081525081600181518110611db057611daf612c09565b5b60200260200101819052505b5b611dc6836119c1565b81600281518110611dda57611dd9612c09565b5b6020026020010181905250611dee816116e7565b915050919050565b611dfe611fa4565b604051602001611e0d906135d8565b604051602081830303815290604052816000018190525081604051602001611e359190613685565b6040516020818303038152906040528160200181905250919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611eaf577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611ea557611ea46130c5565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611eec576d04ee2d6d415b85acef81000000008381611ee257611ee16130c5565b5b0492506020810190505b662386f26fc100008310611f1b57662386f26fc100008381611f1157611f106130c5565b5b0492506010810190505b6305f5e1008310611f44576305f5e1008381611f3a57611f396130c5565b5b0492506008810190505b6127108310611f69576127108381611f5f57611f5e6130c5565b5b0492506004810190505b60648310611f8c5760648381611f8257611f816130c5565b5b0492506002810190505b600a8310611f9b576001810190505b80915050919050565b60405180606001604052806060815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61205b82612012565b810181811067ffffffffffffffff8211171561207a57612079612023565b5b80604052505050565b600061208d611ff9565b90506120998282612052565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156120c8576120c7612023565b5b6120d182612012565b9050602081019050919050565b82818337600083830152505050565b60006121006120fb846120ad565b612083565b90508281526020810184848401111561211c5761211b6120a8565b5b6121278482856120de565b509392505050565b600082601f830112612144576121436120a3565b5b81356121548482602086016120ed565b91505092915050565b6000606082840312156121735761217261200d565b5b61217d6060612083565b9050600082013567ffffffffffffffff81111561219d5761219c61209e565b5b6121a98482850161212f565b600083015250602082013567ffffffffffffffff8111156121cd576121cc61209e565b5b6121d98482850161212f565b602083015250604082013567ffffffffffffffff8111156121fd576121fc61209e565b5b6122098482850161212f565b60408301525092915050565b60006020828403121561222b5761222a612003565b5b600082013567ffffffffffffffff81111561224957612248612008565b5b6122558482850161215d565b91505092915050565b6000819050919050565b6122718161225e565b82525050565b600060208201905061228c6000830184612268565b92915050565b6000602082840312156122a8576122a7612003565b5b600082013567ffffffffffffffff8111156122c6576122c5612008565b5b6122d28482850161212f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061232061231b612316846122db565b6122fb565b6122db565b9050919050565b600061233282612305565b9050919050565b600061234482612327565b9050919050565b61235481612339565b82525050565b600060208201905061236f600083018461234b565b92915050565b61237e8161225e565b811461238957600080fd5b50565b60008135905061239b81612375565b92915050565b6000602082840312156123b7576123b6612003565b5b60006123c58482850161238c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124085780820151818401526020810190506123ed565b60008484015250505050565b600061241f826123ce565b61242981856123d9565b93506124398185602086016123ea565b61244281612012565b840191505092915050565b600060208201905081810360008301526124678184612414565b905092915050565b600061247a826122db565b9050919050565b600061248c8261246f565b9050919050565b61249c81612481565b81146124a757600080fd5b50565b6000813590506124b981612493565b92915050565b600080604083850312156124d6576124d5612003565b5b600083013567ffffffffffffffff8111156124f4576124f3612008565b5b6125008582860161212f565b9250506020612511858286016124aa565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60006125428261251b565b61254c8185612526565b935061255c8185602086016123ea565b61256581612012565b840191505092915050565b6000602082019050818103600083015261258a8184612537565b905092915050565b6000604082840312156125a8576125a761200d565b5b6125b26040612083565b905060006125c28482850161238c565b60008301525060206125d68482850161238c565b60208301525092915050565b60008060008060a085870312156125fc576125fb612003565b5b600085013567ffffffffffffffff81111561261a57612619612008565b5b6126268782880161212f565b945050602085013567ffffffffffffffff81111561264757612646612008565b5b6126538782880161212f565b935050604085013567ffffffffffffffff81111561267457612673612008565b5b6126808782880161212f565b925050606061269187828801612592565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006126e5826123ce565b6126ef81856126c9565b93506126ff8185602086016123ea565b61270881612012565b840191505092915050565b600061271f83836126da565b905092915050565b6000602082019050919050565b600061273f8261269d565b61274981856126a8565b93508360208202850161275b856126b9565b8060005b8581101561279757848403895281516127788582612713565b945061278383612727565b925060208a0199505060018101905061275f565b50829750879550505050505092915050565b600060208201905081810360008301526127c38184612734565b905092915050565b600081905092915050565b60006127e1826123ce565b6127eb81856127cb565b93506127fb8185602086016123ea565b80840191505092915050565b600061281382846127d6565b915081905092915050565b7f466f6e74206e6f74207265676973746572656400000000000000000000000000600082015250565b60006128546013836123d9565b915061285f8261281e565b602082019050919050565b6000602082019050818103600083015261288381612847565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128d157607f821691505b6020821081036128e4576128e361288a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261294c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261290f565b612956868361290f565b95508019841693508086168417925050509392505050565b600061298961298461297f8461225e565b6122fb565b61225e565b9050919050565b6000819050919050565b6129a38361296e565b6129b76129af82612990565b84845461291c565b825550505050565b600090565b6129cc6129bf565b6129d781848461299a565b505050565b5b818110156129fb576129f06000826129c4565b6001810190506129dd565b5050565b601f821115612a4057612a11816128ea565b612a1a846128ff565b81016020851015612a29578190505b612a3d612a35856128ff565b8301826129dc565b50505b505050565b600082821c905092915050565b6000612a6360001984600802612a45565b1980831691505092915050565b6000612a7c8383612a52565b9150826002028217905092915050565b612a95826123ce565b67ffffffffffffffff811115612aae57612aad612023565b5b612ab882546128b9565b612ac38282856129ff565b600060209050601f831160018114612af65760008415612ae4578287015190505b612aee8582612a70565b865550612b56565b601f198416612b04866128ea565b60005b82811015612b2c57848901518255600182019150602085019450602081019050612b07565b86831015612b495784890151612b45601f891682612a52565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b988261225e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bca57612bc9612b5e565b5b600182019050919050565b6000612be08261225e565b9150612beb8361225e565b9250828203905081811115612c0357612c02612b5e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b6000612c4e8261251b565b612c588185612c38565b9350612c688185602086016123ea565b80840191505092915050565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b6000612caa6002836127cb565b9150612cb582612c74565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b6000612cf66002836127cb565b9150612d0182612cc0565b600282019050919050565b6000612d188286612c43565b9150612d2382612c9d565b9150612d2f82856127d6565b9150612d3a82612ce9565b9150612d4682846127d6565b9150819050949350505050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b6000612d896012836123d9565b9150612d9482612d53565b602082019050919050565b60006020820190508181036000830152612db881612d7c565b9050919050565b6000612dcb8285612c43565b9150612dd78284612c43565b91508190509392505050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b6000612e3f6034836127cb565b9150612e4a82612de3565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b6000612eb16026836127cb565b9150612ebc82612e55565b602682019050919050565b6000612ed282612e32565b9150612ede82846127d6565b9150612ee982612ea4565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b6000612f2a6007836127cb565b9150612f3582612ef4565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b6000612f766008836127cb565b9150612f8182612f40565b600882019050919050565b6000612f988285612c43565b9150612fa382612f1d565b9150612faf8284612c43565b9150612fba82612f69565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b6000612ffc6007836127cb565b915061300782612fc6565b600782019050919050565b600061301e8285612c43565b915061302a8284612c43565b915061303582612fef565b91508190509392505050565b600061304c8261225e565b91506130578361225e565b92508282026130658161225e565b9150828204841483151761307c5761307b612b5e565b5b5092915050565b60008151905061309281612375565b92915050565b6000602082840312156130ae576130ad612003565b5b60006130bc84828501613083565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006130ff8261225e565b915061310a8361225e565b92508261311a576131196130c5565b5b828204905092915050565b60006131308261225e565b915061313b8361225e565b925082820190508082111561315357613152612b5e565b5b92915050565b7f7472616e736c6174652800000000000000000000000000000000000000000000600082015250565b600061318f600a836127cb565b915061319a82613159565b600a82019050919050565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b60006131db6001836127cb565b91506131e6826131a5565b600182019050919050565b7f2900000000000000000000000000000000000000000000000000000000000000600082015250565b60006132276001836127cb565b9150613232826131f1565b600182019050919050565b600061324882613182565b915061325482856127d6565b915061325f826131ce565b915061326b82846127d6565b91506132768261321a565b91508190509392505050565b600067ffffffffffffffff82111561329d5761329c612023565b5b6132a682612012565b9050602081019050919050565b60006132c66132c184613282565b612083565b9050828152602081018484840111156132e2576132e16120a8565b5b6132ed8482856123ea565b509392505050565b600082601f83011261330a576133096120a3565b5b815161331a8482602086016132b3565b91505092915050565b60006020828403121561333957613338612003565b5b600082015167ffffffffffffffff81111561335757613356612008565b5b613363848285016132f5565b91505092915050565b7f2030290000000000000000000000000000000000000000000000000000000000600082015250565b60006133a26003836127cb565b91506133ad8261336c565b600382019050919050565b60006133c382613182565b91506133cf82846127d6565b91506133da82613395565b915081905092915050565b7f7363616c65280000000000000000000000000000000000000000000000000000600082015250565b600061341b6006836127cb565b9150613426826133e5565b600682019050919050565b600061343c8261340e565b915061344882846127d6565b91506134538261321a565b915081905092915050565b6000819050919050565b60006134738261345e565b91507f800000000000000000000000000000000000000000000000000000000000000082036134a5576134a4612b5e565b5b816000039050919050565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006134e66001836127cb565b91506134f1826134b0565b600182019050919050565b6000613507826134d9565b915061351382846127d6565b915081905092915050565b7f3c7061746820643d220000000000000000000000000000000000000000000000600082015250565b60006135546009836127cb565b915061355f8261351e565b600982019050919050565b600061357582613547565b91506135818284612c43565b915081905092915050565b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b60006135c26009836127cb565b91506135cd8261358c565b600982019050919050565b60006135e3826135b5565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b60006136236002836127cb565b915061362e826135ed565b600282019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b600061366f6005836127cb565b915061367a82613639565b600582019050919050565b600061369082613616565b915061369c8284612c43565b91506136a782613662565b91508190509291505056fea2646970667358221220f269d6739e4c0eb70da81b6cbbd74a1310a8de4a3c4decc4cba97d1d57e69eb064736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063be985ac91161005b578063be985ac914610139578063dec0314e14610169578063f80a64f514610199578063f9fbd554146101c957610088565b806307ca9b181461008d5780633882e980146100bd57806386f79edb146100ed578063945cfb9e1461011d575b600080fd5b6100a760048036038101906100a29190612215565b6101f9565b6040516100b49190612277565b60405180910390f35b6100d760048036038101906100d29190612292565b610339565b6040516100e4919061235a565b60405180910390f35b610107600480360381019061010291906123a1565b610382565b604051610114919061244d565b60405180910390f35b610137600480360381019061013291906124bf565b610569565b005b610153600480360381019061014e91906123a1565b6105ca565b604051610160919061244d565b60405180910390f35b610183600480360381019061017e91906123a1565b610684565b6040516101909190612570565b60405180910390f35b6101b360048036038101906101ae91906125e2565b610696565b6040516101c0919061244d565b60405180910390f35b6101e360048036038101906101de9190612292565b610757565b6040516101f091906127a9565b60405180910390f35b60008082604001519050600073ffffffffffffffffffffffffffffffffffffffff1660008260405161022b9190612807565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036102b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a79061286a565b60405180910390fd5b8260026000600154815260200190815260200160002060008201518160000190816102db9190612a8c565b5060208201518160010190816102f19190612a8c565b5060408201518160020190816103079190612a8c565b509050506001600081548092919061031e90612b8d565b9190505550600180546103319190612bd5565b915050919050565b6000818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000600260008481526020019081526020016000206040518060600160405290816000820180546103b4906128b9565b80601f01602080910402602001604051908101604052809291908181526020018280546103e0906128b9565b801561042d5780601f106104025761010080835404028352916020019161042d565b820191906000526020600020905b81548152906001019060200180831161041057829003601f168201915b50505050508152602001600182018054610446906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610472906128b9565b80156104bf5780601f10610494576101008083540402835291602001916104bf565b820191906000526020600020905b8154815290600101906020018083116104a257829003601f168201915b505050505081526020016002820180546104d8906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610504906128b9565b80156105515780601f1061052657610100808354040283529160200191610551565b820191906000526020600020905b81548152906001019060200180831161053457829003601f168201915b50505050508152505090508060000151915050919050565b8060008360405161057a9190612807565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060008067ffffffffffffffff8111156105e8576105e7612023565b5b60405190808252806020026020018201604052801561062157816020015b61060e611fa4565b8152602001906001900390816106065790505b50905061067c6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525061066e6106698461076b565b610789565b61067786610891565b610aac565b915050919050565b606061068f82610891565b9050919050565b60606000600167ffffffffffffffff8111156106b5576106b4612023565b5b6040519080825280602002602001820160405280156106ee57816020015b6106db611fa4565b8152602001906001900390816106d35790505b50905061074c6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525061073b6107368461076b565b610789565b61074789898989610b30565b610aac565b915050949350505050565b606061076482600a610eb4565b9050919050565b610773611fa4565b61077c82610f99565b8160200181905250919050565b60606000826000015151111561081b578160000151905060005b826040015151811015610815576000836040015182815181106107c9576107c8612c09565b5b6020026020010151905082816000015182602001516040516020016107f093929190612d0c565b604051602081830303815290604052925050808061080d90612b8d565b9150506107a3565b50610864565b600082604001515114610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085a90612d9f565b60405180910390fd5b5b80826020015160405160200161087b929190612dbf565b6040516020818303038152906040529050919050565b60606000600260008481526020019081526020016000206040518060600160405290816000820180546108c3906128b9565b80601f01602080910402602001604051908101604052809291908181526020018280546108ef906128b9565b801561093c5780601f106109115761010080835404028352916020019161093c565b820191906000526020600020905b81548152906001019060200180831161091f57829003601f168201915b50505050508152602001600182018054610955906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610981906128b9565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505081526020016002820180546109e7906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a13906128b9565b8015610a605780601f10610a3557610100808354040283529160200191610a60565b820191906000526020600020905b815481529060010190602001808311610a4357829003601f168201915b5050505050815250509050610a73611fc5565b610400816000018181525050610400816020018181525050610aa382600001518360200151846040015184610b30565b92505050919050565b6060600084604051602001610ac19190612ec7565b6040516020818303038152906040529050600084511115610b01578084604051602001610aef929190612f8c565b60405160208183030381529060405290505b8083604051602001610b14929190613012565b6040516020818303038152906040529050809150509392505050565b60606000610b3f86600a610eb4565b90506000815167ffffffffffffffff811115610b5e57610b5d612023565b5b604051908082528060200260200182016040528015610b9757816020015b610b84611fa4565b815260200190600190039081610b7c5790505b50905060008086604051610bab9190612807565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060048660000151610bef9190613041565b905060005b8451811015610d1c576000610c2384878481518110610c1657610c15612c09565b5b6020026020010151611060565b905082811115610c31578092505b610cea610cb86000848773ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190613098565b610cb39190613041565b6111c8565b610cdc86898681518110610ccf57610cce612c09565b5b6020026020010151611204565b6114fe90919063ffffffff16565b858381518110610cfd57610cfc612c09565b5b6020026020010181905250508080610d1490612b8d565b915050610bf4565b506000610ddb826103e88960000151610d359190613041565b610d3f91906130f4565b86518573ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db09190613098565b610dba9190613041565b6103e88a60200151610dcc9190613041565b610dd691906130f4565b611561565b90506000610e02610deb8361157a565b610df4876115ab565b6114fe90919063ffffffff16565b9050610e178a826115cb90919063ffffffff16565b90506000600167ffffffffffffffff811115610e3657610e35612023565b5b604051908082528060200260200182016040528015610e6f57816020015b610e5c611fa4565b815260200190600190039081610e545790505b5090508181600081518110610e8757610e86612c09565b5b6020026020010181905250610ea3610e9e8261076b565b610789565b975050505050505050949350505050565b6060600083519050600080600090505b828111610ef057610ed686828761162e565b905080915050600182610ee99190613125565b9150610ec4565b508067ffffffffffffffff811115610f0b57610f0a612023565b5b604051908082528060200260200182016040528015610f3e57816020015b6060815260200190600190039081610f295790505b5092506000905060005b828111610f9057610f5a86828761162e565b858481518110610f6d57610f6c612c09565b5b602002602001018193508290525050600182610f899190613125565b9150610f48565b50505092915050565b60606000825167ffffffffffffffff811115610fb857610fb7612023565b5b604051908082528060200260200182016040528015610feb57816020015b6060815260200190600190039081610fd65790505b50905060005b835181101561104e5761101d8482815181106110105761100f612c09565b5b6020026020010151610789565b8282815181106110305761102f612c09565b5b6020026020010181905250808061104690612b8d565b915050610ff1565b50611058816116e7565b915050919050565b6000808290506000600167ffffffffffffffff81111561108357611082612023565b5b6040519080825280601f01601f1916602001820160405280156110b55781602001600182028036833780820191505090505b50905060005b82518110156111bf578281815181106110d7576110d6612c09565b5b602001015160f81c60f81b826000815181106110f6576110f5612c09565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508573ffffffffffffffffffffffffffffffffffffffff16637f2406a7836040518263ffffffff1660e01b815260040161115e919061244d565b602060405180830381865afa15801561117b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119f9190613098565b846111aa9190613125565b935080806111b790612b8d565b9150506110bb565b50505092915050565b60606111d383611761565b6111dc83611761565b6040516020016111ed92919061323d565b604051602081830303815290604052905092915050565b61120c611fa4565b60008290506000600167ffffffffffffffff81111561122e5761122d612023565b5b6040519080825280601f01601f1916602001820160405280156112605781602001600182028036833780820191505090505b5090506000825167ffffffffffffffff8111156112805761127f612023565b5b6040519080825280602002602001820160405280156112b957816020015b6112a6611fa4565b81526020019060019003908161129e5790505b509050600080600090505b84518110156114e8578481815181106112e0576112df612c09565b5b602001015160f81c60f81b846000815181106112ff576112fe612c09565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506113bd6113b88973ffffffffffffffffffffffffffffffffffffffff1663a4b3eff4876040518263ffffffff1660e01b815260040161136d919061244d565b600060405180830381865afa15801561138a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113b39190613323565b6117b5565b61194e565b8382815181106113d0576113cf612c09565b5b6020026020010181905250600082111561144e5761142f8382815181106113fa576113f9612c09565b5b602002602001015161140b846119c1565b60405160200161141b91906133b8565b6040516020818303038152906040526114fe565b83828151811061144257611441612c09565b5b60200260200101819052505b8773ffffffffffffffffffffffffffffffffffffffff16637f2406a7856040518263ffffffff1660e01b8152600401611487919061244d565b602060405180830381865afa1580156114a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c89190613098565b826114d39190613125565b915080806114e090612b8d565b9150506112c4565b506114f2826115ab565b94505050505092915050565b611506611fa4565b6115598360405180604001604052806040518060400160405280600981526020017f7472616e73666f726d0000000000000000000000000000000000000000000000815250815260200185815250611a8f565b905092915050565b60008183106115705781611572565b825b905092915050565b606061158582611bb1565b6040516020016115959190613431565b6040516020818303038152906040529050919050565b6115b3611fa4565b6115c46115bf83610f99565b611df6565b9050919050565b6115d3611fa4565b6116268360405180604001604052806040518060400160405280600481526020017f66696c6c00000000000000000000000000000000000000000000000000000000815250815260200185815250611a8f565b905092915050565b6060600080600186516116419190613125565b905060405192506020830185602088010160008060008990505b858110156116a55760008203611684578351925082855260208401935060208501945061010091505b6008820391508860ff84841c160361169a578095505b60018101905061165b565b8096508981038960ff85851c16036116be576001810390505b8688036116cc576001810390505b8089528060208a010160405250505050505050935093915050565b60606000825190506040519150602082016020840160005b8381101561174c57815183815160005b81811015611732576020840193508351835260208301925060208101905061170f565b5080860195506020850194505050506001810190506116ff565b50602084830303845281604052505050919050565b6060600082131561177c57611775826119c1565b90506117b0565b61178e8261178990613468565b6119c1565b60405160200161179e91906134fc565b60405160208183030381529060405290505b919050565b6060806020830160036002855102046040519250602083016000805b8381101561193457600060108206036117ef57845191506018850194505b600080600283066000811461181b5760ff8560e81c169250600f8560f41c1691508460181b945061182b565b8460f81c9250600f8560f01c1691505b5080600081146119005760006002610100858560081b010361040081106000811461186457602d9350600392508161040003915061186c565b610400820391505b5060098111156118d65760638111156118bb576103e78111156118a05760318360081b1792508160010191506103e8810690505b606481046030018360081b1792508160010191506064810690505b600a81046030018360081b179250816001019150600a810690505b60208160300160081b8460101b171792508260088302610100031b89528189019850505050611926565b607b83106060841116605b841060408511161715611925578260f81b86526001860195505b5b5050506001810190506117d1565b506020858303038552816040525050505080915050919050565b611956611fa4565b81604051602001611967919061356a565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b6060600060016119d084611e51565b01905060008167ffffffffffffffff8111156119ef576119ee612023565b5b6040519080825280601f01601f191660200182016040528015611a215781602001600182028036833780820191505090505b509050600082602001820190505b600115611a84578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611a7857611a776130c5565b5b04945060008503611a2f575b819350505050919050565b611a97611fa4565b82600001518160000181905250826020015181602001819052506001836040015151611ac39190613125565b67ffffffffffffffff811115611adc57611adb612023565b5b604051908082528060200260200182016040528015611b1557816020015b611b02611fdf565b815260200190600190039081611afa5790505b50816040018190525060005b836040015151811015611b825783604001518181518110611b4557611b44612c09565b5b602002602001015182604001518281518110611b6457611b63612c09565b5b60200260200101819052508080611b7a90612b8d565b915050611b21565b5081816040015184604001515181518110611ba057611b9f612c09565b5b602002602001018190525092915050565b60606000600367ffffffffffffffff811115611bd057611bcf612023565b5b604051908082528060200260200182016040528015611c0357816020015b6060815260200190600190039081611bee5790505b5090506103e8831115611c4a57611c266103e884611c2191906130f4565b6119c1565b81600081518110611c3a57611c39612c09565b5b6020026020010181905250611ca0565b6040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081600081518110611c9457611c93612c09565b5b60200260200101819052505b600a831015611d03576040518060400160405280600381526020017f2e3030000000000000000000000000000000000000000000000000000000000081525081600181518110611cf357611cf2612c09565b5b6020026020010181905250611dbd565b6064831015611d66576040518060400160405280600281526020017f2e3000000000000000000000000000000000000000000000000000000000000081525081600181518110611d5657611d55612c09565b5b6020026020010181905250611dbc565b6040518060400160405280600181526020017f2e0000000000000000000000000000000000000000000000000000000000000081525081600181518110611db057611daf612c09565b5b60200260200101819052505b5b611dc6836119c1565b81600281518110611dda57611dd9612c09565b5b6020026020010181905250611dee816116e7565b915050919050565b611dfe611fa4565b604051602001611e0d906135d8565b604051602081830303815290604052816000018190525081604051602001611e359190613685565b6040516020818303038152906040528160200181905250919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611eaf577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611ea557611ea46130c5565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611eec576d04ee2d6d415b85acef81000000008381611ee257611ee16130c5565b5b0492506020810190505b662386f26fc100008310611f1b57662386f26fc100008381611f1157611f106130c5565b5b0492506010810190505b6305f5e1008310611f44576305f5e1008381611f3a57611f396130c5565b5b0492506008810190505b6127108310611f69576127108381611f5f57611f5e6130c5565b5b0492506004810190505b60648310611f8c5760648381611f8257611f816130c5565b5b0492506002810190505b600a8310611f9b576001810190505b80915050919050565b60405180606001604052806060815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61205b82612012565b810181811067ffffffffffffffff8211171561207a57612079612023565b5b80604052505050565b600061208d611ff9565b90506120998282612052565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156120c8576120c7612023565b5b6120d182612012565b9050602081019050919050565b82818337600083830152505050565b60006121006120fb846120ad565b612083565b90508281526020810184848401111561211c5761211b6120a8565b5b6121278482856120de565b509392505050565b600082601f830112612144576121436120a3565b5b81356121548482602086016120ed565b91505092915050565b6000606082840312156121735761217261200d565b5b61217d6060612083565b9050600082013567ffffffffffffffff81111561219d5761219c61209e565b5b6121a98482850161212f565b600083015250602082013567ffffffffffffffff8111156121cd576121cc61209e565b5b6121d98482850161212f565b602083015250604082013567ffffffffffffffff8111156121fd576121fc61209e565b5b6122098482850161212f565b60408301525092915050565b60006020828403121561222b5761222a612003565b5b600082013567ffffffffffffffff81111561224957612248612008565b5b6122558482850161215d565b91505092915050565b6000819050919050565b6122718161225e565b82525050565b600060208201905061228c6000830184612268565b92915050565b6000602082840312156122a8576122a7612003565b5b600082013567ffffffffffffffff8111156122c6576122c5612008565b5b6122d28482850161212f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061232061231b612316846122db565b6122fb565b6122db565b9050919050565b600061233282612305565b9050919050565b600061234482612327565b9050919050565b61235481612339565b82525050565b600060208201905061236f600083018461234b565b92915050565b61237e8161225e565b811461238957600080fd5b50565b60008135905061239b81612375565b92915050565b6000602082840312156123b7576123b6612003565b5b60006123c58482850161238c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124085780820151818401526020810190506123ed565b60008484015250505050565b600061241f826123ce565b61242981856123d9565b93506124398185602086016123ea565b61244281612012565b840191505092915050565b600060208201905081810360008301526124678184612414565b905092915050565b600061247a826122db565b9050919050565b600061248c8261246f565b9050919050565b61249c81612481565b81146124a757600080fd5b50565b6000813590506124b981612493565b92915050565b600080604083850312156124d6576124d5612003565b5b600083013567ffffffffffffffff8111156124f4576124f3612008565b5b6125008582860161212f565b9250506020612511858286016124aa565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60006125428261251b565b61254c8185612526565b935061255c8185602086016123ea565b61256581612012565b840191505092915050565b6000602082019050818103600083015261258a8184612537565b905092915050565b6000604082840312156125a8576125a761200d565b5b6125b26040612083565b905060006125c28482850161238c565b60008301525060206125d68482850161238c565b60208301525092915050565b60008060008060a085870312156125fc576125fb612003565b5b600085013567ffffffffffffffff81111561261a57612619612008565b5b6126268782880161212f565b945050602085013567ffffffffffffffff81111561264757612646612008565b5b6126538782880161212f565b935050604085013567ffffffffffffffff81111561267457612673612008565b5b6126808782880161212f565b925050606061269187828801612592565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006126e5826123ce565b6126ef81856126c9565b93506126ff8185602086016123ea565b61270881612012565b840191505092915050565b600061271f83836126da565b905092915050565b6000602082019050919050565b600061273f8261269d565b61274981856126a8565b93508360208202850161275b856126b9565b8060005b8581101561279757848403895281516127788582612713565b945061278383612727565b925060208a0199505060018101905061275f565b50829750879550505050505092915050565b600060208201905081810360008301526127c38184612734565b905092915050565b600081905092915050565b60006127e1826123ce565b6127eb81856127cb565b93506127fb8185602086016123ea565b80840191505092915050565b600061281382846127d6565b915081905092915050565b7f466f6e74206e6f74207265676973746572656400000000000000000000000000600082015250565b60006128546013836123d9565b915061285f8261281e565b602082019050919050565b6000602082019050818103600083015261288381612847565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128d157607f821691505b6020821081036128e4576128e361288a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261294c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261290f565b612956868361290f565b95508019841693508086168417925050509392505050565b600061298961298461297f8461225e565b6122fb565b61225e565b9050919050565b6000819050919050565b6129a38361296e565b6129b76129af82612990565b84845461291c565b825550505050565b600090565b6129cc6129bf565b6129d781848461299a565b505050565b5b818110156129fb576129f06000826129c4565b6001810190506129dd565b5050565b601f821115612a4057612a11816128ea565b612a1a846128ff565b81016020851015612a29578190505b612a3d612a35856128ff565b8301826129dc565b50505b505050565b600082821c905092915050565b6000612a6360001984600802612a45565b1980831691505092915050565b6000612a7c8383612a52565b9150826002028217905092915050565b612a95826123ce565b67ffffffffffffffff811115612aae57612aad612023565b5b612ab882546128b9565b612ac38282856129ff565b600060209050601f831160018114612af65760008415612ae4578287015190505b612aee8582612a70565b865550612b56565b601f198416612b04866128ea565b60005b82811015612b2c57848901518255600182019150602085019450602081019050612b07565b86831015612b495784890151612b45601f891682612a52565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b988261225e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bca57612bc9612b5e565b5b600182019050919050565b6000612be08261225e565b9150612beb8361225e565b9250828203905081811115612c0357612c02612b5e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b6000612c4e8261251b565b612c588185612c38565b9350612c688185602086016123ea565b80840191505092915050565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b6000612caa6002836127cb565b9150612cb582612c74565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b6000612cf66002836127cb565b9150612d0182612cc0565b600282019050919050565b6000612d188286612c43565b9150612d2382612c9d565b9150612d2f82856127d6565b9150612d3a82612ce9565b9150612d4682846127d6565b9150819050949350505050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b6000612d896012836123d9565b9150612d9482612d53565b602082019050919050565b60006020820190508181036000830152612db881612d7c565b9050919050565b6000612dcb8285612c43565b9150612dd78284612c43565b91508190509392505050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b6000612e3f6034836127cb565b9150612e4a82612de3565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b6000612eb16026836127cb565b9150612ebc82612e55565b602682019050919050565b6000612ed282612e32565b9150612ede82846127d6565b9150612ee982612ea4565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b6000612f2a6007836127cb565b9150612f3582612ef4565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b6000612f766008836127cb565b9150612f8182612f40565b600882019050919050565b6000612f988285612c43565b9150612fa382612f1d565b9150612faf8284612c43565b9150612fba82612f69565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b6000612ffc6007836127cb565b915061300782612fc6565b600782019050919050565b600061301e8285612c43565b915061302a8284612c43565b915061303582612fef565b91508190509392505050565b600061304c8261225e565b91506130578361225e565b92508282026130658161225e565b9150828204841483151761307c5761307b612b5e565b5b5092915050565b60008151905061309281612375565b92915050565b6000602082840312156130ae576130ad612003565b5b60006130bc84828501613083565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006130ff8261225e565b915061310a8361225e565b92508261311a576131196130c5565b5b828204905092915050565b60006131308261225e565b915061313b8361225e565b925082820190508082111561315357613152612b5e565b5b92915050565b7f7472616e736c6174652800000000000000000000000000000000000000000000600082015250565b600061318f600a836127cb565b915061319a82613159565b600a82019050919050565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b60006131db6001836127cb565b91506131e6826131a5565b600182019050919050565b7f2900000000000000000000000000000000000000000000000000000000000000600082015250565b60006132276001836127cb565b9150613232826131f1565b600182019050919050565b600061324882613182565b915061325482856127d6565b915061325f826131ce565b915061326b82846127d6565b91506132768261321a565b91508190509392505050565b600067ffffffffffffffff82111561329d5761329c612023565b5b6132a682612012565b9050602081019050919050565b60006132c66132c184613282565b612083565b9050828152602081018484840111156132e2576132e16120a8565b5b6132ed8482856123ea565b509392505050565b600082601f83011261330a576133096120a3565b5b815161331a8482602086016132b3565b91505092915050565b60006020828403121561333957613338612003565b5b600082015167ffffffffffffffff81111561335757613356612008565b5b613363848285016132f5565b91505092915050565b7f2030290000000000000000000000000000000000000000000000000000000000600082015250565b60006133a26003836127cb565b91506133ad8261336c565b600382019050919050565b60006133c382613182565b91506133cf82846127d6565b91506133da82613395565b915081905092915050565b7f7363616c65280000000000000000000000000000000000000000000000000000600082015250565b600061341b6006836127cb565b9150613426826133e5565b600682019050919050565b600061343c8261340e565b915061344882846127d6565b91506134538261321a565b915081905092915050565b6000819050919050565b60006134738261345e565b91507f800000000000000000000000000000000000000000000000000000000000000082036134a5576134a4612b5e565b5b816000039050919050565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006134e66001836127cb565b91506134f1826134b0565b600182019050919050565b6000613507826134d9565b915061351382846127d6565b915081905092915050565b7f3c7061746820643d220000000000000000000000000000000000000000000000600082015250565b60006135546009836127cb565b915061355f8261351e565b600982019050919050565b600061357582613547565b91506135818284612c43565b915081905092915050565b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b60006135c26009836127cb565b91506135cd8261358c565b600982019050919050565b60006135e3826135b5565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b60006136236002836127cb565b915061362e826135ed565b600282019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b600061366f6005836127cb565b915061367a82613639565b600582019050919050565b600061369082613616565b915061369c8284612c43565b91506136a782613662565b91508190509291505056fea2646970667358221220f269d6739e4c0eb70da81b6cbbd74a1310a8de4a3c4decc4cba97d1d57e69eb064736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/abis/MessageTokenV2.json b/src/abis/MessageTokenV2.json new file mode 100644 index 00000000..cbd6d47c --- /dev/null +++ b/src/abis/MessageTokenV2.json @@ -0,0 +1,937 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MessageTokenV2", + "sourceName": "contracts/MessageTokenV2.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IAssetProvider", + "name": "_assetProvider", + "type": "address" + }, + { + "internalType": "contract IMessageStoreV2", + "name": "_messageStore", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ApprovalCallerNotOwnerNorApproved", + "type": "error" + }, + { + "inputs": [], + "name": "ApprovalQueryForNonexistentToken", + "type": "error" + }, + { + "inputs": [], + "name": "BalanceQueryForZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "MintERC2309QuantityExceedsLimit", + "type": "error" + }, + { + "inputs": [], + "name": "MintToZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "MintZeroQuantity", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "OperatorNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "OwnerQueryForNonexistentToken", + "type": "error" + }, + { + "inputs": [], + "name": "OwnershipNotInitializedForExtraData", + "type": "error" + }, + { + "inputs": [], + "name": "TransferCallerNotOwnerNorApproved", + "type": "error" + }, + { + "inputs": [], + "name": "TransferFromIncorrectOwner", + "type": "error" + }, + { + "inputs": [], + "name": "TransferToNonERC721ReceiverImplementer", + "type": "error" + }, + { + "inputs": [], + "name": "TransferToZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "URIQueryForNonexistentToken", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "fromTokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toTokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "ConsecutiveTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "SetPrice", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "OPERATOR_FILTER_REGISTRY", + "outputs": [ + { + "internalType": "contract IOperatorFilterRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "contract IERC721Marketplace", + "name": "_dealer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "acceptOffer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "assetProvider", + "outputs": [ + { + "internalType": "contract IAssetProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "debugTokenURI", + "outputs": [ + { + "internalType": "string", + "name": "uri", + "type": "string" + }, + { + "internalType": "uint256", + "name": "gas", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "description", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getAsset", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "internalType": "struct IMessageStoreV2.Asset", + "name": "output", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getAssetId", + "outputs": [ + { + "internalType": "uint256", + "name": "output", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLatestMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getPriceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "mintLimit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mintPriceFor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "internalType": "struct IMessageStoreV2.Asset", + "name": "asset", + "type": "tuple" + } + ], + "name": "mintWithAsset", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_buyer", + "type": "address" + }, + { + "internalType": "address", + "name": "_facilitator", + "type": "address" + } + ], + "name": "purchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IAssetProvider", + "name": "_assetProvider", + "type": "address" + } + ], + "name": "setAssetProvider", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_description", + "type": "string" + } + ], + "name": "setDescription", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_limit", + "type": "uint256" + } + ], + "name": "setMintLimit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "setMintPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "setPriceOf", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a06040523480156200001157600080fd5b506040516200596d3803806200596d833981810160405281019062000037919062000589565b816040518060400160405280600c81526020017f4d657373616765546f6b656e00000000000000000000000000000000000000008152506040518060400160405280600c81526020017f4d657373616765546f6b656e0000000000000000000000000000000000000000815250733cc6cdda760b79bafa08df41ecfa224f810dceb6600183838160029081620000ce91906200084a565b508060039081620000e091906200084a565b50620000f1620003f360201b60201c565b600081905550505060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620002ee578015620001b4576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200017a92919062000942565b600060405180830381600087803b1580156200019557600080fd5b505af1158015620001aa573d6000803e3d6000fd5b50505050620002ed565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200026e576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200023492919062000942565b600060405180830381600087803b1580156200024f57600080fd5b505af115801562000264573d6000803e3d6000fd5b50505050620002ec565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620002b791906200096f565b600060405180830381600087803b158015620002d257600080fd5b505af1158015620002e7573d6000803e3d6000fd5b505050505b5b5b50506200031062000304620003f860201b60201c565b6200040060201b60201c565b82600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506040518060400160405280600c81526020017f4d657373616765546f6b656e0000000000000000000000000000000000000000815250600a90816200039a91906200084a565b508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505074446c3b15f9926687d2c40534fdb564000000000000600c8190555050506200098c565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004f882620004cb565b9050919050565b60006200050c82620004eb565b9050919050565b6200051e81620004ff565b81146200052a57600080fd5b50565b6000815190506200053e8162000513565b92915050565b60006200055182620004eb565b9050919050565b620005638162000544565b81146200056f57600080fd5b50565b600081519050620005838162000558565b92915050565b60008060408385031215620005a357620005a2620004c6565b5b6000620005b3858286016200052d565b9250506020620005c68582860162000572565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200065257607f821691505b6020821081036200066857620006676200060a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006d27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000693565b620006de868362000693565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200072b620007256200071f84620006f6565b62000700565b620006f6565b9050919050565b6000819050919050565b62000747836200070a565b6200075f620007568262000732565b848454620006a0565b825550505050565b600090565b6200077662000767565b620007838184846200073c565b505050565b5b81811015620007ab576200079f6000826200076c565b60018101905062000789565b5050565b601f821115620007fa57620007c4816200066e565b620007cf8462000683565b81016020851015620007df578190505b620007f7620007ee8562000683565b83018262000788565b50505b505050565b600082821c905092915050565b60006200081f60001984600802620007ff565b1980831691505092915050565b60006200083a83836200080c565b9150826002028217905092915050565b6200085582620005d0565b67ffffffffffffffff811115620008715762000870620005db565b5b6200087d825462000639565b6200088a828285620007af565b600060209050601f831160018114620008c25760008415620008ad578287015190505b620008b985826200082c565b86555062000929565b601f198416620008d2866200066e565b60005b82811015620008fc57848901518255600182019150602085019450602081019050620008d5565b868310156200091c578489015162000918601f8916826200080c565b8355505b6001600288020188555050505b505050505050565b6200093c81620004eb565b82525050565b600060408201905062000959600083018562000931565b62000968602083018462000931565b9392505050565b600060208201905062000986600083018462000931565b92915050565b608051614fb0620009bd6000396000818161118d01528181611255015281816119060152611ae80152614fb06000f3fe6080604052600436106102255760003560e01c80638da5cb5b11610123578063b54b4fb9116100ab578063eac8f5b81161006f578063eac8f5b814610818578063f2fde38b14610855578063f4a0a5281461087e578063fba49e4f146108a7578063fdd2732e146108d057610225565b8063b54b4fb914610707578063b88d4fde14610744578063c87b56dd14610760578063cc44ab411461079d578063e985e9c5146107db57610225565b8063996517cf116100f2578063996517cf146106365780639e6a1d7d14610661578063a22cb4651461068a578063a370f7d7146106b3578063b212cfc7146106de57610225565b80638da5cb5b1461058e57806390c3f38f146105b95780639589d7b9146105e257806395d89b411461060b57610225565b806341f43434116101b157806370a082311161017557806370a0823114610495578063715018a6146104d25780637284e416146104e957806373a56e6c1461051457806386f79edb1461055157610225565b806341f43434146103a957806342842e0e146103d457806361f547fd146103f05780636352211e1461042d5780636817c76c1461046a57610225565b80631249c58b116101f85780631249c58b146102eb5780631346d8ea1461030957806318160ddd1461034657806323b872dd146103715780633b7f8f151461038d57610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613355565b6108fb565b60405161025e919061339d565b60405180910390f35b34801561027357600080fd5b5061027c610975565b6040516102899190613448565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906134a0565b610a07565b6040516102c6919061350e565b60405180910390f35b6102e960048036038101906102e49190613555565b610a86565b005b6102f3610b90565b60405161030091906135a4565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b91906135bf565b610bd5565b60405161033d91906135a4565b60405180910390f35b34801561035257600080fd5b5061035b610be1565b60405161036891906135a4565b60405180910390f35b61038b600480360381019061038691906135ec565b610bf0565b005b6103a760048036038101906103a2919061363f565b610d40565b005b3480156103b557600080fd5b506103be610e97565b6040516103cb91906136f1565b60405180910390f35b6103ee60048036038101906103e991906135ec565b610ea9565b005b3480156103fc57600080fd5b50610417600480360381019061041291906134a0565b610ff9565b60405161042491906135a4565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f91906134a0565b611016565b604051610461919061350e565b60405180910390f35b34801561047657600080fd5b5061047f611028565b60405161048c91906135a4565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b791906135bf565b61102e565b6040516104c991906135a4565b60405180910390f35b3480156104de57600080fd5b506104e76110e6565b005b3480156104f557600080fd5b506104fe6110fa565b60405161050b9190613448565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613933565b611188565b60405161054891906135a4565b60405180910390f35b34801561055d57600080fd5b50610578600480360381019061057391906134a0565b611251565b6040516105859190613448565b60405180910390f35b34801561059a57600080fd5b506105a361130c565b6040516105b0919061350e565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061397c565b611336565b005b3480156105ee57600080fd5b5061060960048036038101906106049190613a03565b611351565b005b34801561061757600080fd5b506106206113cf565b60405161062d9190613448565b60405180910390f35b34801561064257600080fd5b5061064b611461565b60405161065891906135a4565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906134a0565b611467565b005b34801561069657600080fd5b506106b160048036038101906106ac9190613a82565b611479565b005b3480156106bf57600080fd5b506106c8611583565b6040516106d59190613ae3565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190613b3c565b6115a9565b005b34801561071357600080fd5b5061072e600480360381019061072991906134a0565b6115f5565b60405161073b91906135a4565b60405180910390f35b61075e60048036038101906107599190613c0a565b611612565b005b34801561076c57600080fd5b50610787600480360381019061078291906134a0565b611765565b6040516107949190613448565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf91906134a0565b611843565b6040516107d2929190613c8d565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190613cbd565b611868565b60405161080f919061339d565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a91906134a0565b6118fc565b60405161084c9190613dbf565b60405180910390f35b34801561086157600080fd5b5061087c600480360381019061087791906135bf565b6119bd565b005b34801561088a57600080fd5b506108a560048036038101906108a091906134a0565b611a40565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613de1565b611a52565b005b3480156108dc57600080fd5b506108e5611ae4565b6040516108f29190613448565b60405180910390f35b60007fe019895a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096e575061096d82611bb0565b5b9050919050565b60606002805461098490613e50565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090613e50565b80156109fd5780601f106109d2576101008083540402835291602001916109fd565b820191906000526020600020905b8154815290600101906020018083116109e057829003601f168201915b5050505050905090565b6000610a1282611c42565b610a48576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610b81576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610afe929190613e81565b602060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f9190613ebf565b610b8057806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610b77919061350e565b60405180910390fd5b5b610b8b8383611ca1565b505050565b600080610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613f38565b60405180910390fd5b90565b6000600b549050919050565b6000610beb611de5565b905090565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d2e573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c6257610c5d848484611dee565b610d3a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cab929190613e81565b602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190613ebf565b610d2d57336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d24919061350e565b60405180910390fd5b5b610d39848484611dee565b5b50505050565b60006009600085815260200190815260200160002054905060008111610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613fa4565b60405180910390fd5b80341015610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590614010565b60405180910390fd5b6000610dea3484612110565b90506000610df834876121b5565b90506000610e0587611016565b905060008190508073ffffffffffffffffffffffffffffffffffffffff166108fc848634610e33919061405f565b610e3d919061405f565b9081150290604051600060405180830381858888f19350505050158015610e68573d6000803e3d6000fd5b506000600960008a815260200190815260200160002081905550610e8d82888a6121bd565b5050505050505050565b6daaeb6d7670e522a718067333cd4e81565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fe7573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f1b57610f16848484612481565b610ff3565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f64929190613e81565b602060405180830381865afa158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190613ebf565b610fe657336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fdd919061350e565b60405180910390fd5b5b610ff2848484612481565b5b50505050565b6000600e6000838152602001908152602001600020549050919050565b6000611021826124a1565b9050919050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611095576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6110ee61256d565b6110f860006125eb565b565b600a805461110790613e50565b80601f016020809104026020016040519081016040528092919081815260200182805461113390613e50565b80156111805780601f1061115557610100808354040283529160200191611180565b820191906000526020600020905b81548152906001019060200180831161116357829003601f168201915b505050505081565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634e2849c6846040518263ffffffff1660e01b81526004016111e49190613dbf565b6020604051808303816000875af1158015611203573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122791906140a8565b90506112316126b1565b915080600e60008481526020019081526020016000208190555050919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166386f79edb600e6000858152602001908152602001600020546040518263ffffffff1660e01b81526004016112bf91906135a4565b600060405180830381865afa1580156112dc573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113059190614145565b9050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61133e61256d565b80600a908161134d9190614330565b5050565b61135b8382611a52565b8173ffffffffffffffffffffffffffffffffffffffff16633c6fc8173085846040518463ffffffff1660e01b815260040161139893929190614423565b600060405180830381600087803b1580156113b257600080fd5b505af11580156113c6573d6000803e3d6000fd5b50505050505050565b6060600380546113de90613e50565b80601f016020809104026020016040519081016040528092919081815260200182805461140a90613e50565b80156114575780601f1061142c57610100808354040283529160200191611457565b820191906000526020600020905b81548152906001019060200180831161143a57829003601f168201915b5050505050905090565b600c5481565b61146f61256d565b80600c8190555050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611574576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016114f1929190613e81565b602060405180830381865afa15801561150e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115329190613ebf565b61157357806040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161156a919061350e565b60405180910390fd5b5b61157e8383612722565b505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115b161256d565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060096000838152602001908152602001600020549050919050565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611751573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611685576116808585858561282d565b61175e565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016116ce929190613e81565b602060405180830381865afa1580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f9190613ebf565b61175057336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611747919061350e565b60405180910390fd5b5b61175d8585858561282d565b5b5050505050565b60606000600e600084815260200190815260200160002054905061178883611c42565b6117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be906144cc565b60405180910390fd5b60006117d2826128a0565b905061181b6117e08561298f565b600a6117eb856129c0565b6117f485612a6a565b6040516020016118079493929190614794565b604051602081830303815290604052612a6a565b60405160200161182b9190614855565b60405160208183030381529060405292505050919050565b606060005a905061185383611765565b91505a81611861919061405f565b9050915091565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119046132c1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663eac8f5b8600e6000858152602001908152602001600020546040518263ffffffff1660e01b815260040161197091906135a4565b600060405180830381865afa15801561198d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906119b6919061495f565b9050919050565b6119c561256d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90614a1a565b60405180910390fd5b611a3d816125eb565b50565b611a4861256d565b80600b8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16611a7283611016565b73ffffffffffffffffffffffffffffffffffffffff1614611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90614a86565b60405180910390fd5b8060096000848152602001908152602001600020819055505050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166386f79edb600e60006001611b30611de5565b611b3a919061405f565b8152602001908152602001600020546040518263ffffffff1660e01b8152600401611b6591906135a4565b600060405180830381865afa158015611b82573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bab9190614145565b905090565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c0b57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c3b5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600081611c4d612be2565b11158015611c5c575060005482105b8015611c9a575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b6000611cac82611016565b90508073ffffffffffffffffffffffffffffffffffffffff16611ccd612be7565b73ffffffffffffffffffffffffffffffffffffffff1614611d3057611cf981611cf4612be7565b611868565b611d2f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60008054905090565b6000611df9826124a1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e60576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611e6c84612bef565b91509150611e828187611e7d612be7565b612c16565b611ece57611e9786611e92612be7565b611868565b611ecd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f34576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f418686866001612c5a565b8015611f4c57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061201a85611ff6888887612c60565b7c020000000000000000000000000000000000000000000000000000000017612c88565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036120a0576000600185019050600060046000838152602001908152602001600020540361209e57600054811461209d578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121088686866001612cb3565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121af576103e86019846121559190614aa6565b61215f9190614b17565b905060008290508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156121ac573d6000803e3d6000fd5b50505b92915050565b600092915050565b60006121c8826124a1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461222f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061223b84612bef565b91509150600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122a5576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122b28686866001612c5a565b80156122bd57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061238b85612367888887612c60565b7c020000000000000000000000000000000000000000000000000000000017612c88565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603612411576000600185019050600060046000838152602001908152602001600020540361240f57600054811461240e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124798686866001612cb3565b505050505050565b61249c83838360405180602001604052806000815250611612565b505050565b600080829050806124b0612be2565b11612536576000548110156125355760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612533575b600081036125295760046000836001900393508381526020019081526020016000205490506124ff565b8092505050612568565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b612575612cb9565b73ffffffffffffffffffffffffffffffffffffffff1661259361130c565b73ffffffffffffffffffffffffffffffffffffffff16146125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e090614b94565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600c546126be611de5565b106126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f590614c00565b60405180910390fd5b612709336001612cc1565b6001612713611de5565b61271d919061405f565b905090565b806007600061272f612be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166127dc612be7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612821919061339d565b60405180910390a35050565b612838848484610bf0565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461289a5761286384848484612cdf565b612899576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3f24f02856040518263ffffffff1660e01b815260040161290091906135a4565b600060405180830381865afa15801561291d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906129469190614c20565b91509150604051806080016040528060498152602001614f3260499139828260405160200161297793929190614d30565b60405160208183030381529060405292505050919050565b606061299a82612e2f565b6040516020016129aa9190614dc3565b6040516020818303038152906040529050919050565b6060600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379b92f27836040518263ffffffff1660e01b8152600401612a1d91906135a4565b600060405180830381865afa158015612a3a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612a639190614145565b9050919050565b60606000825103612a8c57604051806020016040528060008152509050612bdd565b6000604051806060016040528060408152602001614ef26040913990506000600360028551612abb9190614de5565b612ac59190614b17565b6004612ad19190614aa6565b90506000602082612ae29190614de5565b67ffffffffffffffff811115612afb57612afa613711565b5b6040519080825280601f01601f191660200182016040528015612b2d5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612b9c576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050612b41565b600389510660018114612bb65760028114612bc657612bd1565b613d3d60f01b6002830352612bd1565b603d60f81b60018303525b50505050508093505050505b919050565b600090565b600033905090565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612c77868684612efd565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b612cdb828260405180602001604052806000815250612f06565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d05612be7565b8786866040518563ffffffff1660e01b8152600401612d279493929190614e63565b6020604051808303816000875af1925050508015612d6357506040513d601f19601f82011682018060405250810190612d609190614ec4565b60015b612ddc573d8060008114612d93576040519150601f19603f3d011682016040523d82523d6000602084013e612d98565b606091505b506000815103612dd4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060006001612e3e84612fa3565b01905060008167ffffffffffffffff811115612e5d57612e5c613711565b5b6040519080825280601f01601f191660200182016040528015612e8f5781602001600182028036833780820191505090505b509050600082602001820190505b600115612ef2578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612ee657612ee5614ae8565b5b04945060008503612e9d575b819350505050919050565b60009392505050565b612f1083836130f6565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612f9e57600080549050600083820390505b612f506000868380600101945086612cdf565b612f86576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612f3d578160005414612f9b57600080fd5b50505b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613001577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612ff757612ff6614ae8565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061303e576d04ee2d6d415b85acef8100000000838161303457613033614ae8565b5b0492506020810190505b662386f26fc10000831061306d57662386f26fc10000838161306357613062614ae8565b5b0492506010810190505b6305f5e1008310613096576305f5e100838161308c5761308b614ae8565b5b0492506008810190505b61271083106130bb5761271083816130b1576130b0614ae8565b5b0492506004810190505b606483106130de57606483816130d4576130d3614ae8565b5b0492506002810190505b600a83106130ed576001810190505b80915050919050565b60008054905060008203613136576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131436000848385612c5a565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506131ba836131ab6000866000612c60565b6131b4856132b1565b17612c88565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461325b57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050613220565b5060008203613296576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506132ac6000848385612cb3565b505050565b60006001821460e11b9050919050565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613332816132fd565b811461333d57600080fd5b50565b60008135905061334f81613329565b92915050565b60006020828403121561336b5761336a6132f3565b5b600061337984828501613340565b91505092915050565b60008115159050919050565b61339781613382565b82525050565b60006020820190506133b2600083018461338e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133f25780820151818401526020810190506133d7565b60008484015250505050565b6000601f19601f8301169050919050565b600061341a826133b8565b61342481856133c3565b93506134348185602086016133d4565b61343d816133fe565b840191505092915050565b60006020820190508181036000830152613462818461340f565b905092915050565b6000819050919050565b61347d8161346a565b811461348857600080fd5b50565b60008135905061349a81613474565b92915050565b6000602082840312156134b6576134b56132f3565b5b60006134c48482850161348b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134f8826134cd565b9050919050565b613508816134ed565b82525050565b600060208201905061352360008301846134ff565b92915050565b613532816134ed565b811461353d57600080fd5b50565b60008135905061354f81613529565b92915050565b6000806040838503121561356c5761356b6132f3565b5b600061357a85828601613540565b925050602061358b8582860161348b565b9150509250929050565b61359e8161346a565b82525050565b60006020820190506135b96000830184613595565b92915050565b6000602082840312156135d5576135d46132f3565b5b60006135e384828501613540565b91505092915050565b600080600060608486031215613605576136046132f3565b5b600061361386828701613540565b935050602061362486828701613540565b92505060406136358682870161348b565b9150509250925092565b600080600060608486031215613658576136576132f3565b5b60006136668682870161348b565b935050602061367786828701613540565b925050604061368886828701613540565b9150509250925092565b6000819050919050565b60006136b76136b26136ad846134cd565b613692565b6134cd565b9050919050565b60006136c98261369c565b9050919050565b60006136db826136be565b9050919050565b6136eb816136d0565b82525050565b600060208201905061370660008301846136e2565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613749826133fe565b810181811067ffffffffffffffff8211171561376857613767613711565b5b80604052505050565b600061377b6132e9565b90506137878282613740565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156137b6576137b5613711565b5b6137bf826133fe565b9050602081019050919050565b82818337600083830152505050565b60006137ee6137e98461379b565b613771565b90508281526020810184848401111561380a57613809613796565b5b6138158482856137cc565b509392505050565b600082601f83011261383257613831613791565b5b81356138428482602086016137db565b91505092915050565b6000608082840312156138615761386061370c565b5b61386b6080613771565b9050600082013567ffffffffffffffff81111561388b5761388a61378c565b5b6138978482850161381d565b600083015250602082013567ffffffffffffffff8111156138bb576138ba61378c565b5b6138c78482850161381d565b602083015250604082013567ffffffffffffffff8111156138eb576138ea61378c565b5b6138f78482850161381d565b604083015250606082013567ffffffffffffffff81111561391b5761391a61378c565b5b6139278482850161381d565b60608301525092915050565b600060208284031215613949576139486132f3565b5b600082013567ffffffffffffffff811115613967576139666132f8565b5b6139738482850161384b565b91505092915050565b600060208284031215613992576139916132f3565b5b600082013567ffffffffffffffff8111156139b0576139af6132f8565b5b6139bc8482850161381d565b91505092915050565b60006139d0826134ed565b9050919050565b6139e0816139c5565b81146139eb57600080fd5b50565b6000813590506139fd816139d7565b92915050565b600080600060608486031215613a1c57613a1b6132f3565b5b6000613a2a8682870161348b565b9350506020613a3b868287016139ee565b9250506040613a4c8682870161348b565b9150509250925092565b613a5f81613382565b8114613a6a57600080fd5b50565b600081359050613a7c81613a56565b92915050565b60008060408385031215613a9957613a986132f3565b5b6000613aa785828601613540565b9250506020613ab885828601613a6d565b9150509250929050565b6000613acd826136be565b9050919050565b613add81613ac2565b82525050565b6000602082019050613af86000830184613ad4565b92915050565b6000613b09826134ed565b9050919050565b613b1981613afe565b8114613b2457600080fd5b50565b600081359050613b3681613b10565b92915050565b600060208284031215613b5257613b516132f3565b5b6000613b6084828501613b27565b91505092915050565b600067ffffffffffffffff821115613b8457613b83613711565b5b613b8d826133fe565b9050602081019050919050565b6000613bad613ba884613b69565b613771565b905082815260208101848484011115613bc957613bc8613796565b5b613bd48482856137cc565b509392505050565b600082601f830112613bf157613bf0613791565b5b8135613c01848260208601613b9a565b91505092915050565b60008060008060808587031215613c2457613c236132f3565b5b6000613c3287828801613540565b9450506020613c4387828801613540565b9350506040613c548782880161348b565b925050606085013567ffffffffffffffff811115613c7557613c746132f8565b5b613c8187828801613bdc565b91505092959194509250565b60006040820190508181036000830152613ca7818561340f565b9050613cb66020830184613595565b9392505050565b60008060408385031215613cd457613cd36132f3565b5b6000613ce285828601613540565b9250506020613cf385828601613540565b9150509250929050565b600082825260208201905092915050565b6000613d19826133b8565b613d238185613cfd565b9350613d338185602086016133d4565b613d3c816133fe565b840191505092915050565b60006080830160008301518482036000860152613d648282613d0e565b91505060208301518482036020860152613d7e8282613d0e565b91505060408301518482036040860152613d988282613d0e565b91505060608301518482036060860152613db28282613d0e565b9150508091505092915050565b60006020820190508181036000830152613dd98184613d47565b905092915050565b60008060408385031215613df857613df76132f3565b5b6000613e068582860161348b565b9250506020613e178582860161348b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e6857607f821691505b602082108103613e7b57613e7a613e21565b5b50919050565b6000604082019050613e9660008301856134ff565b613ea360208301846134ff565b9392505050565b600081519050613eb981613a56565b92915050565b600060208284031215613ed557613ed46132f3565b5b6000613ee384828501613eaa565b91505092915050565b7f6d757374206e6f742063616c6c00000000000000000000000000000000000000600082015250565b6000613f22600d836133c3565b9150613f2d82613eec565b602082019050919050565b60006020820190508181036000830152613f5181613f15565b9050919050565b7f546f6b656e206973206e6f74206f6e2073616c65000000000000000000000000600082015250565b6000613f8e6014836133c3565b9150613f9982613f58565b602082019050919050565b60006020820190508181036000830152613fbd81613f81565b9050919050565b7f4e6f7420656e6f7567682066756e640000000000000000000000000000000000600082015250565b6000613ffa600f836133c3565b915061400582613fc4565b602082019050919050565b6000602082019050818103600083015261402981613fed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061406a8261346a565b91506140758361346a565b925082820390508181111561408d5761408c614030565b5b92915050565b6000815190506140a281613474565b92915050565b6000602082840312156140be576140bd6132f3565b5b60006140cc84828501614093565b91505092915050565b60006140e86140e38461379b565b613771565b90508281526020810184848401111561410457614103613796565b5b61410f8482856133d4565b509392505050565b600082601f83011261412c5761412b613791565b5b815161413c8482602086016140d5565b91505092915050565b60006020828403121561415b5761415a6132f3565b5b600082015167ffffffffffffffff811115614179576141786132f8565b5b61418584828501614117565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026141f07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826141b3565b6141fa86836141b3565b95508019841693508086168417925050509392505050565b600061422d6142286142238461346a565b613692565b61346a565b9050919050565b6000819050919050565b61424783614212565b61425b61425382614234565b8484546141c0565b825550505050565b600090565b614270614263565b61427b81848461423e565b505050565b5b8181101561429f57614294600082614268565b600181019050614281565b5050565b601f8211156142e4576142b58161418e565b6142be846141a3565b810160208510156142cd578190505b6142e16142d9856141a3565b830182614280565b50505b505050565b600082821c905092915050565b6000614307600019846008026142e9565b1980831691505092915050565b600061432083836142f6565b9150826002028217905092915050565b614339826133b8565b67ffffffffffffffff81111561435257614351613711565b5b61435c8254613e50565b6143678282856142a3565b600060209050601f83116001811461439a5760008415614388578287015190505b6143928582614314565b8655506143fa565b601f1984166143a88661418e565b60005b828110156143d0578489015182556001820191506020850194506020810190506143ab565b868310156143ed57848901516143e9601f8916826142f6565b8355505b6001600288020188555050505b505050505050565b600061440d826136be565b9050919050565b61441d81614402565b82525050565b60006060820190506144386000830186614414565b6144456020830185613595565b6144526040830184613595565b949350505050565b7f4d657373616765546f6b656e2e746f6b656e5552493a206e6f6e65786973746560008201527f6e7420746f6b656e000000000000000000000000000000000000000000000000602082015250565b60006144b66028836133c3565b91506144c18261445a565b604082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b600081905092915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b600061452d6009836144ec565b9150614538826144f7565b600982019050919050565b600061454e826133b8565b61455881856144ec565b93506145688185602086016133d4565b80840191505092915050565b7f222c226465736372697074696f6e223a22000000000000000000000000000000600082015250565b60006145aa6011836144ec565b91506145b582614574565b601182019050919050565b600081546145cd81613e50565b6145d781866144ec565b945060018216600081146145f257600181146146075761463a565b60ff198316865281151582028601935061463a565b6146108561418e565b60005b8381101561463257815481890152600182019150602081019050614613565b838801955050505b50505092915050565b7f222c2261747472696275746573223a5b00000000000000000000000000000000600082015250565b60006146796010836144ec565b915061468482614643565b601082019050919050565b600081519050919050565b600081905092915050565b60006146b08261468f565b6146ba818561469a565b93506146ca8185602086016133d4565b80840191505092915050565b7f5d2c22696d616765223a22646174613a696d6167652f7376672b786d6c3b626160008201527f736536342c000000000000000000000000000000000000000000000000000000602082015250565b60006147326025836144ec565b915061473d826146d6565b602582019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061477e6002836144ec565b915061478982614748565b600282019050919050565b600061479f82614520565b91506147ab8287614543565b91506147b68261459d565b91506147c282866145c0565b91506147cd8261466c565b91506147d982856146a5565b91506147e482614725565b91506147f08284614543565b91506147fb82614771565b915081905095945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b600061483f601d836144ec565b915061484a82614809565b601d82019050919050565b600061486082614832565b915061486c8284614543565b915081905092915050565b60006080828403121561488d5761488c61370c565b5b6148976080613771565b9050600082015167ffffffffffffffff8111156148b7576148b661378c565b5b6148c384828501614117565b600083015250602082015167ffffffffffffffff8111156148e7576148e661378c565b5b6148f384828501614117565b602083015250604082015167ffffffffffffffff8111156149175761491661378c565b5b61492384828501614117565b604083015250606082015167ffffffffffffffff8111156149475761494661378c565b5b61495384828501614117565b60608301525092915050565b600060208284031215614975576149746132f3565b5b600082015167ffffffffffffffff811115614993576149926132f8565b5b61499f84828501614877565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a046026836133c3565b9150614a0f826149a8565b604082019050919050565b60006020820190508181036000830152614a33816149f7565b9050919050565b7f4f6e6c7920746865206f6e7765722063616e2073657420746865207072696365600082015250565b6000614a706020836133c3565b9150614a7b82614a3a565b602082019050919050565b60006020820190508181036000830152614a9f81614a63565b9050919050565b6000614ab18261346a565b9150614abc8361346a565b9250828202614aca8161346a565b91508282048414831517614ae157614ae0614030565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b228261346a565b9150614b2d8361346a565b925082614b3d57614b3c614ae8565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b7e6020836133c3565b9150614b8982614b48565b602082019050919050565b60006020820190508181036000830152614bad81614b71565b9050919050565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b6000614bea6008836133c3565b9150614bf582614bb4565b602082019050919050565b60006020820190508181036000830152614c1981614bdd565b9050919050565b60008060408385031215614c3757614c366132f3565b5b600083015167ffffffffffffffff811115614c5557614c546132f8565b5b614c6185828601614117565b925050602083015167ffffffffffffffff811115614c8257614c816132f8565b5b614c8e85828601614117565b9150509250929050565b7f3c2f646566733e0a3c75736520687265663d2223000000000000000000000000600082015250565b6000614cce6014836144ec565b9150614cd982614c98565b601482019050919050565b7f22202f3e0a3c2f7376673e0a0000000000000000000000000000000000000000600082015250565b6000614d1a600c836144ec565b9150614d2582614ce4565b600c82019050919050565b6000614d3c8286614543565b9150614d488285614543565b9150614d5382614cc1565b9150614d5f8284614543565b9150614d6a82614d0d565b9150819050949350505050565b7f4d65737361676520546f6b656e20563120000000000000000000000000000000600082015250565b6000614dad6011836144ec565b9150614db882614d77565b601182019050919050565b6000614dce82614da0565b9150614dda8284614543565b915081905092915050565b6000614df08261346a565b9150614dfb8361346a565b9250828201905080821115614e1357614e12614030565b5b92915050565b600082825260208201905092915050565b6000614e358261468f565b614e3f8185614e19565b9350614e4f8185602086016133d4565b614e58816133fe565b840191505092915050565b6000608082019050614e7860008301876134ff565b614e8560208301866134ff565b614e926040830185613595565b8181036060830152614ea48184614e2a565b905095945050505050565b600081519050614ebe81613329565b92915050565b600060208284031215614eda57614ed96132f3565b5b6000614ee884828501614eaf565b9150509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672076696577426f783d2230203020313032342031303234222020786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e0a3c646566733e0aa264697066735822122040a9759d2fb9bd8af28184bf5253f85ba7e6b677baf0563b0006afa9d1baa71e64736f6c63430008110033", + "deployedBytecode": "0x6080604052600436106102255760003560e01c80638da5cb5b11610123578063b54b4fb9116100ab578063eac8f5b81161006f578063eac8f5b814610818578063f2fde38b14610855578063f4a0a5281461087e578063fba49e4f146108a7578063fdd2732e146108d057610225565b8063b54b4fb914610707578063b88d4fde14610744578063c87b56dd14610760578063cc44ab411461079d578063e985e9c5146107db57610225565b8063996517cf116100f2578063996517cf146106365780639e6a1d7d14610661578063a22cb4651461068a578063a370f7d7146106b3578063b212cfc7146106de57610225565b80638da5cb5b1461058e57806390c3f38f146105b95780639589d7b9146105e257806395d89b411461060b57610225565b806341f43434116101b157806370a082311161017557806370a0823114610495578063715018a6146104d25780637284e416146104e957806373a56e6c1461051457806386f79edb1461055157610225565b806341f43434146103a957806342842e0e146103d457806361f547fd146103f05780636352211e1461042d5780636817c76c1461046a57610225565b80631249c58b116101f85780631249c58b146102eb5780631346d8ea1461030957806318160ddd1461034657806323b872dd146103715780633b7f8f151461038d57610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613355565b6108fb565b60405161025e919061339d565b60405180910390f35b34801561027357600080fd5b5061027c610975565b6040516102899190613448565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906134a0565b610a07565b6040516102c6919061350e565b60405180910390f35b6102e960048036038101906102e49190613555565b610a86565b005b6102f3610b90565b60405161030091906135a4565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b91906135bf565b610bd5565b60405161033d91906135a4565b60405180910390f35b34801561035257600080fd5b5061035b610be1565b60405161036891906135a4565b60405180910390f35b61038b600480360381019061038691906135ec565b610bf0565b005b6103a760048036038101906103a2919061363f565b610d40565b005b3480156103b557600080fd5b506103be610e97565b6040516103cb91906136f1565b60405180910390f35b6103ee60048036038101906103e991906135ec565b610ea9565b005b3480156103fc57600080fd5b50610417600480360381019061041291906134a0565b610ff9565b60405161042491906135a4565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f91906134a0565b611016565b604051610461919061350e565b60405180910390f35b34801561047657600080fd5b5061047f611028565b60405161048c91906135a4565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b791906135bf565b61102e565b6040516104c991906135a4565b60405180910390f35b3480156104de57600080fd5b506104e76110e6565b005b3480156104f557600080fd5b506104fe6110fa565b60405161050b9190613448565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613933565b611188565b60405161054891906135a4565b60405180910390f35b34801561055d57600080fd5b50610578600480360381019061057391906134a0565b611251565b6040516105859190613448565b60405180910390f35b34801561059a57600080fd5b506105a361130c565b6040516105b0919061350e565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061397c565b611336565b005b3480156105ee57600080fd5b5061060960048036038101906106049190613a03565b611351565b005b34801561061757600080fd5b506106206113cf565b60405161062d9190613448565b60405180910390f35b34801561064257600080fd5b5061064b611461565b60405161065891906135a4565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906134a0565b611467565b005b34801561069657600080fd5b506106b160048036038101906106ac9190613a82565b611479565b005b3480156106bf57600080fd5b506106c8611583565b6040516106d59190613ae3565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190613b3c565b6115a9565b005b34801561071357600080fd5b5061072e600480360381019061072991906134a0565b6115f5565b60405161073b91906135a4565b60405180910390f35b61075e60048036038101906107599190613c0a565b611612565b005b34801561076c57600080fd5b50610787600480360381019061078291906134a0565b611765565b6040516107949190613448565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf91906134a0565b611843565b6040516107d2929190613c8d565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190613cbd565b611868565b60405161080f919061339d565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a91906134a0565b6118fc565b60405161084c9190613dbf565b60405180910390f35b34801561086157600080fd5b5061087c600480360381019061087791906135bf565b6119bd565b005b34801561088a57600080fd5b506108a560048036038101906108a091906134a0565b611a40565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613de1565b611a52565b005b3480156108dc57600080fd5b506108e5611ae4565b6040516108f29190613448565b60405180910390f35b60007fe019895a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096e575061096d82611bb0565b5b9050919050565b60606002805461098490613e50565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090613e50565b80156109fd5780601f106109d2576101008083540402835291602001916109fd565b820191906000526020600020905b8154815290600101906020018083116109e057829003601f168201915b5050505050905090565b6000610a1282611c42565b610a48576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610b81576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610afe929190613e81565b602060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f9190613ebf565b610b8057806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610b77919061350e565b60405180910390fd5b5b610b8b8383611ca1565b505050565b600080610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613f38565b60405180910390fd5b90565b6000600b549050919050565b6000610beb611de5565b905090565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d2e573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c6257610c5d848484611dee565b610d3a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cab929190613e81565b602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190613ebf565b610d2d57336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d24919061350e565b60405180910390fd5b5b610d39848484611dee565b5b50505050565b60006009600085815260200190815260200160002054905060008111610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613fa4565b60405180910390fd5b80341015610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590614010565b60405180910390fd5b6000610dea3484612110565b90506000610df834876121b5565b90506000610e0587611016565b905060008190508073ffffffffffffffffffffffffffffffffffffffff166108fc848634610e33919061405f565b610e3d919061405f565b9081150290604051600060405180830381858888f19350505050158015610e68573d6000803e3d6000fd5b506000600960008a815260200190815260200160002081905550610e8d82888a6121bd565b5050505050505050565b6daaeb6d7670e522a718067333cd4e81565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fe7573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f1b57610f16848484612481565b610ff3565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f64929190613e81565b602060405180830381865afa158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190613ebf565b610fe657336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fdd919061350e565b60405180910390fd5b5b610ff2848484612481565b5b50505050565b6000600e6000838152602001908152602001600020549050919050565b6000611021826124a1565b9050919050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611095576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6110ee61256d565b6110f860006125eb565b565b600a805461110790613e50565b80601f016020809104026020016040519081016040528092919081815260200182805461113390613e50565b80156111805780601f1061115557610100808354040283529160200191611180565b820191906000526020600020905b81548152906001019060200180831161116357829003601f168201915b505050505081565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634e2849c6846040518263ffffffff1660e01b81526004016111e49190613dbf565b6020604051808303816000875af1158015611203573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122791906140a8565b90506112316126b1565b915080600e60008481526020019081526020016000208190555050919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166386f79edb600e6000858152602001908152602001600020546040518263ffffffff1660e01b81526004016112bf91906135a4565b600060405180830381865afa1580156112dc573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113059190614145565b9050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61133e61256d565b80600a908161134d9190614330565b5050565b61135b8382611a52565b8173ffffffffffffffffffffffffffffffffffffffff16633c6fc8173085846040518463ffffffff1660e01b815260040161139893929190614423565b600060405180830381600087803b1580156113b257600080fd5b505af11580156113c6573d6000803e3d6000fd5b50505050505050565b6060600380546113de90613e50565b80601f016020809104026020016040519081016040528092919081815260200182805461140a90613e50565b80156114575780601f1061142c57610100808354040283529160200191611457565b820191906000526020600020905b81548152906001019060200180831161143a57829003601f168201915b5050505050905090565b600c5481565b61146f61256d565b80600c8190555050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611574576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016114f1929190613e81565b602060405180830381865afa15801561150e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115329190613ebf565b61157357806040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161156a919061350e565b60405180910390fd5b5b61157e8383612722565b505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115b161256d565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060096000838152602001908152602001600020549050919050565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611751573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611685576116808585858561282d565b61175e565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016116ce929190613e81565b602060405180830381865afa1580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f9190613ebf565b61175057336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611747919061350e565b60405180910390fd5b5b61175d8585858561282d565b5b5050505050565b60606000600e600084815260200190815260200160002054905061178883611c42565b6117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be906144cc565b60405180910390fd5b60006117d2826128a0565b905061181b6117e08561298f565b600a6117eb856129c0565b6117f485612a6a565b6040516020016118079493929190614794565b604051602081830303815290604052612a6a565b60405160200161182b9190614855565b60405160208183030381529060405292505050919050565b606060005a905061185383611765565b91505a81611861919061405f565b9050915091565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119046132c1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663eac8f5b8600e6000858152602001908152602001600020546040518263ffffffff1660e01b815260040161197091906135a4565b600060405180830381865afa15801561198d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906119b6919061495f565b9050919050565b6119c561256d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90614a1a565b60405180910390fd5b611a3d816125eb565b50565b611a4861256d565b80600b8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16611a7283611016565b73ffffffffffffffffffffffffffffffffffffffff1614611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90614a86565b60405180910390fd5b8060096000848152602001908152602001600020819055505050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166386f79edb600e60006001611b30611de5565b611b3a919061405f565b8152602001908152602001600020546040518263ffffffff1660e01b8152600401611b6591906135a4565b600060405180830381865afa158015611b82573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bab9190614145565b905090565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c0b57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c3b5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600081611c4d612be2565b11158015611c5c575060005482105b8015611c9a575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b6000611cac82611016565b90508073ffffffffffffffffffffffffffffffffffffffff16611ccd612be7565b73ffffffffffffffffffffffffffffffffffffffff1614611d3057611cf981611cf4612be7565b611868565b611d2f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60008054905090565b6000611df9826124a1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e60576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611e6c84612bef565b91509150611e828187611e7d612be7565b612c16565b611ece57611e9786611e92612be7565b611868565b611ecd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f34576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f418686866001612c5a565b8015611f4c57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061201a85611ff6888887612c60565b7c020000000000000000000000000000000000000000000000000000000017612c88565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036120a0576000600185019050600060046000838152602001908152602001600020540361209e57600054811461209d578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121088686866001612cb3565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121af576103e86019846121559190614aa6565b61215f9190614b17565b905060008290508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156121ac573d6000803e3d6000fd5b50505b92915050565b600092915050565b60006121c8826124a1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461222f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061223b84612bef565b91509150600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122a5576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122b28686866001612c5a565b80156122bd57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061238b85612367888887612c60565b7c020000000000000000000000000000000000000000000000000000000017612c88565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603612411576000600185019050600060046000838152602001908152602001600020540361240f57600054811461240e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124798686866001612cb3565b505050505050565b61249c83838360405180602001604052806000815250611612565b505050565b600080829050806124b0612be2565b11612536576000548110156125355760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612533575b600081036125295760046000836001900393508381526020019081526020016000205490506124ff565b8092505050612568565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b612575612cb9565b73ffffffffffffffffffffffffffffffffffffffff1661259361130c565b73ffffffffffffffffffffffffffffffffffffffff16146125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e090614b94565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600c546126be611de5565b106126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f590614c00565b60405180910390fd5b612709336001612cc1565b6001612713611de5565b61271d919061405f565b905090565b806007600061272f612be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166127dc612be7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612821919061339d565b60405180910390a35050565b612838848484610bf0565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461289a5761286384848484612cdf565b612899576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3f24f02856040518263ffffffff1660e01b815260040161290091906135a4565b600060405180830381865afa15801561291d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906129469190614c20565b91509150604051806080016040528060498152602001614f3260499139828260405160200161297793929190614d30565b60405160208183030381529060405292505050919050565b606061299a82612e2f565b6040516020016129aa9190614dc3565b6040516020818303038152906040529050919050565b6060600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379b92f27836040518263ffffffff1660e01b8152600401612a1d91906135a4565b600060405180830381865afa158015612a3a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612a639190614145565b9050919050565b60606000825103612a8c57604051806020016040528060008152509050612bdd565b6000604051806060016040528060408152602001614ef26040913990506000600360028551612abb9190614de5565b612ac59190614b17565b6004612ad19190614aa6565b90506000602082612ae29190614de5565b67ffffffffffffffff811115612afb57612afa613711565b5b6040519080825280601f01601f191660200182016040528015612b2d5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612b9c576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050612b41565b600389510660018114612bb65760028114612bc657612bd1565b613d3d60f01b6002830352612bd1565b603d60f81b60018303525b50505050508093505050505b919050565b600090565b600033905090565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612c77868684612efd565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b612cdb828260405180602001604052806000815250612f06565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d05612be7565b8786866040518563ffffffff1660e01b8152600401612d279493929190614e63565b6020604051808303816000875af1925050508015612d6357506040513d601f19601f82011682018060405250810190612d609190614ec4565b60015b612ddc573d8060008114612d93576040519150601f19603f3d011682016040523d82523d6000602084013e612d98565b606091505b506000815103612dd4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060006001612e3e84612fa3565b01905060008167ffffffffffffffff811115612e5d57612e5c613711565b5b6040519080825280601f01601f191660200182016040528015612e8f5781602001600182028036833780820191505090505b509050600082602001820190505b600115612ef2578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612ee657612ee5614ae8565b5b04945060008503612e9d575b819350505050919050565b60009392505050565b612f1083836130f6565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612f9e57600080549050600083820390505b612f506000868380600101945086612cdf565b612f86576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612f3d578160005414612f9b57600080fd5b50505b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613001577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612ff757612ff6614ae8565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061303e576d04ee2d6d415b85acef8100000000838161303457613033614ae8565b5b0492506020810190505b662386f26fc10000831061306d57662386f26fc10000838161306357613062614ae8565b5b0492506010810190505b6305f5e1008310613096576305f5e100838161308c5761308b614ae8565b5b0492506008810190505b61271083106130bb5761271083816130b1576130b0614ae8565b5b0492506004810190505b606483106130de57606483816130d4576130d3614ae8565b5b0492506002810190505b600a83106130ed576001810190505b80915050919050565b60008054905060008203613136576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131436000848385612c5a565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506131ba836131ab6000866000612c60565b6131b4856132b1565b17612c88565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461325b57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050613220565b5060008203613296576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506132ac6000848385612cb3565b505050565b60006001821460e11b9050919050565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613332816132fd565b811461333d57600080fd5b50565b60008135905061334f81613329565b92915050565b60006020828403121561336b5761336a6132f3565b5b600061337984828501613340565b91505092915050565b60008115159050919050565b61339781613382565b82525050565b60006020820190506133b2600083018461338e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133f25780820151818401526020810190506133d7565b60008484015250505050565b6000601f19601f8301169050919050565b600061341a826133b8565b61342481856133c3565b93506134348185602086016133d4565b61343d816133fe565b840191505092915050565b60006020820190508181036000830152613462818461340f565b905092915050565b6000819050919050565b61347d8161346a565b811461348857600080fd5b50565b60008135905061349a81613474565b92915050565b6000602082840312156134b6576134b56132f3565b5b60006134c48482850161348b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134f8826134cd565b9050919050565b613508816134ed565b82525050565b600060208201905061352360008301846134ff565b92915050565b613532816134ed565b811461353d57600080fd5b50565b60008135905061354f81613529565b92915050565b6000806040838503121561356c5761356b6132f3565b5b600061357a85828601613540565b925050602061358b8582860161348b565b9150509250929050565b61359e8161346a565b82525050565b60006020820190506135b96000830184613595565b92915050565b6000602082840312156135d5576135d46132f3565b5b60006135e384828501613540565b91505092915050565b600080600060608486031215613605576136046132f3565b5b600061361386828701613540565b935050602061362486828701613540565b92505060406136358682870161348b565b9150509250925092565b600080600060608486031215613658576136576132f3565b5b60006136668682870161348b565b935050602061367786828701613540565b925050604061368886828701613540565b9150509250925092565b6000819050919050565b60006136b76136b26136ad846134cd565b613692565b6134cd565b9050919050565b60006136c98261369c565b9050919050565b60006136db826136be565b9050919050565b6136eb816136d0565b82525050565b600060208201905061370660008301846136e2565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613749826133fe565b810181811067ffffffffffffffff8211171561376857613767613711565b5b80604052505050565b600061377b6132e9565b90506137878282613740565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156137b6576137b5613711565b5b6137bf826133fe565b9050602081019050919050565b82818337600083830152505050565b60006137ee6137e98461379b565b613771565b90508281526020810184848401111561380a57613809613796565b5b6138158482856137cc565b509392505050565b600082601f83011261383257613831613791565b5b81356138428482602086016137db565b91505092915050565b6000608082840312156138615761386061370c565b5b61386b6080613771565b9050600082013567ffffffffffffffff81111561388b5761388a61378c565b5b6138978482850161381d565b600083015250602082013567ffffffffffffffff8111156138bb576138ba61378c565b5b6138c78482850161381d565b602083015250604082013567ffffffffffffffff8111156138eb576138ea61378c565b5b6138f78482850161381d565b604083015250606082013567ffffffffffffffff81111561391b5761391a61378c565b5b6139278482850161381d565b60608301525092915050565b600060208284031215613949576139486132f3565b5b600082013567ffffffffffffffff811115613967576139666132f8565b5b6139738482850161384b565b91505092915050565b600060208284031215613992576139916132f3565b5b600082013567ffffffffffffffff8111156139b0576139af6132f8565b5b6139bc8482850161381d565b91505092915050565b60006139d0826134ed565b9050919050565b6139e0816139c5565b81146139eb57600080fd5b50565b6000813590506139fd816139d7565b92915050565b600080600060608486031215613a1c57613a1b6132f3565b5b6000613a2a8682870161348b565b9350506020613a3b868287016139ee565b9250506040613a4c8682870161348b565b9150509250925092565b613a5f81613382565b8114613a6a57600080fd5b50565b600081359050613a7c81613a56565b92915050565b60008060408385031215613a9957613a986132f3565b5b6000613aa785828601613540565b9250506020613ab885828601613a6d565b9150509250929050565b6000613acd826136be565b9050919050565b613add81613ac2565b82525050565b6000602082019050613af86000830184613ad4565b92915050565b6000613b09826134ed565b9050919050565b613b1981613afe565b8114613b2457600080fd5b50565b600081359050613b3681613b10565b92915050565b600060208284031215613b5257613b516132f3565b5b6000613b6084828501613b27565b91505092915050565b600067ffffffffffffffff821115613b8457613b83613711565b5b613b8d826133fe565b9050602081019050919050565b6000613bad613ba884613b69565b613771565b905082815260208101848484011115613bc957613bc8613796565b5b613bd48482856137cc565b509392505050565b600082601f830112613bf157613bf0613791565b5b8135613c01848260208601613b9a565b91505092915050565b60008060008060808587031215613c2457613c236132f3565b5b6000613c3287828801613540565b9450506020613c4387828801613540565b9350506040613c548782880161348b565b925050606085013567ffffffffffffffff811115613c7557613c746132f8565b5b613c8187828801613bdc565b91505092959194509250565b60006040820190508181036000830152613ca7818561340f565b9050613cb66020830184613595565b9392505050565b60008060408385031215613cd457613cd36132f3565b5b6000613ce285828601613540565b9250506020613cf385828601613540565b9150509250929050565b600082825260208201905092915050565b6000613d19826133b8565b613d238185613cfd565b9350613d338185602086016133d4565b613d3c816133fe565b840191505092915050565b60006080830160008301518482036000860152613d648282613d0e565b91505060208301518482036020860152613d7e8282613d0e565b91505060408301518482036040860152613d988282613d0e565b91505060608301518482036060860152613db28282613d0e565b9150508091505092915050565b60006020820190508181036000830152613dd98184613d47565b905092915050565b60008060408385031215613df857613df76132f3565b5b6000613e068582860161348b565b9250506020613e178582860161348b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e6857607f821691505b602082108103613e7b57613e7a613e21565b5b50919050565b6000604082019050613e9660008301856134ff565b613ea360208301846134ff565b9392505050565b600081519050613eb981613a56565b92915050565b600060208284031215613ed557613ed46132f3565b5b6000613ee384828501613eaa565b91505092915050565b7f6d757374206e6f742063616c6c00000000000000000000000000000000000000600082015250565b6000613f22600d836133c3565b9150613f2d82613eec565b602082019050919050565b60006020820190508181036000830152613f5181613f15565b9050919050565b7f546f6b656e206973206e6f74206f6e2073616c65000000000000000000000000600082015250565b6000613f8e6014836133c3565b9150613f9982613f58565b602082019050919050565b60006020820190508181036000830152613fbd81613f81565b9050919050565b7f4e6f7420656e6f7567682066756e640000000000000000000000000000000000600082015250565b6000613ffa600f836133c3565b915061400582613fc4565b602082019050919050565b6000602082019050818103600083015261402981613fed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061406a8261346a565b91506140758361346a565b925082820390508181111561408d5761408c614030565b5b92915050565b6000815190506140a281613474565b92915050565b6000602082840312156140be576140bd6132f3565b5b60006140cc84828501614093565b91505092915050565b60006140e86140e38461379b565b613771565b90508281526020810184848401111561410457614103613796565b5b61410f8482856133d4565b509392505050565b600082601f83011261412c5761412b613791565b5b815161413c8482602086016140d5565b91505092915050565b60006020828403121561415b5761415a6132f3565b5b600082015167ffffffffffffffff811115614179576141786132f8565b5b61418584828501614117565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026141f07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826141b3565b6141fa86836141b3565b95508019841693508086168417925050509392505050565b600061422d6142286142238461346a565b613692565b61346a565b9050919050565b6000819050919050565b61424783614212565b61425b61425382614234565b8484546141c0565b825550505050565b600090565b614270614263565b61427b81848461423e565b505050565b5b8181101561429f57614294600082614268565b600181019050614281565b5050565b601f8211156142e4576142b58161418e565b6142be846141a3565b810160208510156142cd578190505b6142e16142d9856141a3565b830182614280565b50505b505050565b600082821c905092915050565b6000614307600019846008026142e9565b1980831691505092915050565b600061432083836142f6565b9150826002028217905092915050565b614339826133b8565b67ffffffffffffffff81111561435257614351613711565b5b61435c8254613e50565b6143678282856142a3565b600060209050601f83116001811461439a5760008415614388578287015190505b6143928582614314565b8655506143fa565b601f1984166143a88661418e565b60005b828110156143d0578489015182556001820191506020850194506020810190506143ab565b868310156143ed57848901516143e9601f8916826142f6565b8355505b6001600288020188555050505b505050505050565b600061440d826136be565b9050919050565b61441d81614402565b82525050565b60006060820190506144386000830186614414565b6144456020830185613595565b6144526040830184613595565b949350505050565b7f4d657373616765546f6b656e2e746f6b656e5552493a206e6f6e65786973746560008201527f6e7420746f6b656e000000000000000000000000000000000000000000000000602082015250565b60006144b66028836133c3565b91506144c18261445a565b604082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b600081905092915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b600061452d6009836144ec565b9150614538826144f7565b600982019050919050565b600061454e826133b8565b61455881856144ec565b93506145688185602086016133d4565b80840191505092915050565b7f222c226465736372697074696f6e223a22000000000000000000000000000000600082015250565b60006145aa6011836144ec565b91506145b582614574565b601182019050919050565b600081546145cd81613e50565b6145d781866144ec565b945060018216600081146145f257600181146146075761463a565b60ff198316865281151582028601935061463a565b6146108561418e565b60005b8381101561463257815481890152600182019150602081019050614613565b838801955050505b50505092915050565b7f222c2261747472696275746573223a5b00000000000000000000000000000000600082015250565b60006146796010836144ec565b915061468482614643565b601082019050919050565b600081519050919050565b600081905092915050565b60006146b08261468f565b6146ba818561469a565b93506146ca8185602086016133d4565b80840191505092915050565b7f5d2c22696d616765223a22646174613a696d6167652f7376672b786d6c3b626160008201527f736536342c000000000000000000000000000000000000000000000000000000602082015250565b60006147326025836144ec565b915061473d826146d6565b602582019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061477e6002836144ec565b915061478982614748565b600282019050919050565b600061479f82614520565b91506147ab8287614543565b91506147b68261459d565b91506147c282866145c0565b91506147cd8261466c565b91506147d982856146a5565b91506147e482614725565b91506147f08284614543565b91506147fb82614771565b915081905095945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b600061483f601d836144ec565b915061484a82614809565b601d82019050919050565b600061486082614832565b915061486c8284614543565b915081905092915050565b60006080828403121561488d5761488c61370c565b5b6148976080613771565b9050600082015167ffffffffffffffff8111156148b7576148b661378c565b5b6148c384828501614117565b600083015250602082015167ffffffffffffffff8111156148e7576148e661378c565b5b6148f384828501614117565b602083015250604082015167ffffffffffffffff8111156149175761491661378c565b5b61492384828501614117565b604083015250606082015167ffffffffffffffff8111156149475761494661378c565b5b61495384828501614117565b60608301525092915050565b600060208284031215614975576149746132f3565b5b600082015167ffffffffffffffff811115614993576149926132f8565b5b61499f84828501614877565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a046026836133c3565b9150614a0f826149a8565b604082019050919050565b60006020820190508181036000830152614a33816149f7565b9050919050565b7f4f6e6c7920746865206f6e7765722063616e2073657420746865207072696365600082015250565b6000614a706020836133c3565b9150614a7b82614a3a565b602082019050919050565b60006020820190508181036000830152614a9f81614a63565b9050919050565b6000614ab18261346a565b9150614abc8361346a565b9250828202614aca8161346a565b91508282048414831517614ae157614ae0614030565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b228261346a565b9150614b2d8361346a565b925082614b3d57614b3c614ae8565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b7e6020836133c3565b9150614b8982614b48565b602082019050919050565b60006020820190508181036000830152614bad81614b71565b9050919050565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b6000614bea6008836133c3565b9150614bf582614bb4565b602082019050919050565b60006020820190508181036000830152614c1981614bdd565b9050919050565b60008060408385031215614c3757614c366132f3565b5b600083015167ffffffffffffffff811115614c5557614c546132f8565b5b614c6185828601614117565b925050602083015167ffffffffffffffff811115614c8257614c816132f8565b5b614c8e85828601614117565b9150509250929050565b7f3c2f646566733e0a3c75736520687265663d2223000000000000000000000000600082015250565b6000614cce6014836144ec565b9150614cd982614c98565b601482019050919050565b7f22202f3e0a3c2f7376673e0a0000000000000000000000000000000000000000600082015250565b6000614d1a600c836144ec565b9150614d2582614ce4565b600c82019050919050565b6000614d3c8286614543565b9150614d488285614543565b9150614d5382614cc1565b9150614d5f8284614543565b9150614d6a82614d0d565b9150819050949350505050565b7f4d65737361676520546f6b656e20563120000000000000000000000000000000600082015250565b6000614dad6011836144ec565b9150614db882614d77565b601182019050919050565b6000614dce82614da0565b9150614dda8284614543565b915081905092915050565b6000614df08261346a565b9150614dfb8361346a565b9250828201905080821115614e1357614e12614030565b5b92915050565b600082825260208201905092915050565b6000614e358261468f565b614e3f8185614e19565b9350614e4f8185602086016133d4565b614e58816133fe565b840191505092915050565b6000608082019050614e7860008301876134ff565b614e8560208301866134ff565b614e926040830185613595565b8181036060830152614ea48184614e2a565b905095945050505050565b600081519050614ebe81613329565b92915050565b600060208284031215614eda57614ed96132f3565b5b6000614ee884828501614eaf565b9150509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672076696577426f783d2230203020313032342031303234222020786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e0a3c646566733e0aa264697066735822122040a9759d2fb9bd8af28184bf5253f85ba7e6b677baf0563b0006afa9d1baa71e64736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index 9e8dd243..71dbd538 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -71,6 +71,31 @@ import { addresses as dynamic_goerli } from "./addresses/dynamic_goerli"; import { addresses as dynamic_localhost } from "./addresses/dynamic_localhost"; import { addresses as message_pnouns_goerli } from "./addresses/message_pnouns_goerli"; import { addresses as message_splatter_goerli } from "./addresses/message_splatter_goerli"; +import { addresses as messagestore2_goerli } from "./addresses/messagestore2_goerli"; +import { addresses as messagestore2_localhost } from "./addresses/messagestore2_localhost"; +import { addresses as messagestore2_mumbai } from "./addresses/messagestore2_mumbai"; +import { addresses as messageprovider_goerli } from "./addresses/messageprovider_goerli"; +import { addresses as messageprovider_localhost } from "./addresses/messageprovider_localhost"; +import { addresses as messageprovider_mumbai } from "./addresses/messageprovider_mumbai"; +import { addresses as messagetoken_goerli } from "./addresses/messagetoken_goerli"; +import { addresses as messagetoken_localhost } from "./addresses/messagetoken_localhost"; +import { addresses as messagetoken_mumbai } from "./addresses/messagetoken_mumbai"; +import { addresses as nounsDescriptor_mumbai } from "./addresses/nounsDescriptor_mumbai"; +import { addresses as nounsDescriptor_localhost } from "./addresses/nounsDescriptor_localhost"; +import { addresses as nounsSeeder_mumbai } from "./addresses/nounsSeeder_mumbai"; +import { addresses as nounsSeeder_localhost } from "./addresses/nounsSeeder_localhost"; +import { addresses as nftDescriptor_mumbai } from "./addresses/nftDescriptor_mumbai"; +import { addresses as nftDescriptor_localhost } from "./addresses/nftDescriptor_localhost"; +import { addresses as localSeeder_mumbai } from "./addresses/localseeder_mumbai"; +import { addresses as localSeeder_localhost } from "./addresses/localseeder_localhost"; +import { addresses as localNounsDescriptor_mumbai } from "./addresses/localNounsDescriptor_mumbai"; +import { addresses as localNounsDescriptor_localhost } from "./addresses/localNounsDescriptor_localhost"; +import { addresses as localProvider_mumbai } from "./addresses/localNounsProvider_mumbai"; +import { addresses as localProvider_localhost } from "./addresses/localNounsProvider_localhost"; +import { addresses as localNounsToken_mumbai } from "./addresses/localNounsToken_mumbai"; +import { addresses as localNounsToken_localhost } from "./addresses/localNounsToken_localhost"; +import { addresses as localNounsMinter_mumbai } from "./addresses/localNounsMinter_mumbai"; +import { addresses as localNounsMinter_localhost } from "./addresses/localNounsMinter_localhost"; export interface Addresses { [key: string]: { [key: string]: string }; @@ -85,6 +110,23 @@ export const addresses: Addresses = { }, messageSplatter: { goerli: message_splatter_goerli.messageSplatterToken, + + }, + messageStore: { + localhost: messagestore2_localhost.messageStore, + goerli: messagestore2_goerli.messageStore, + mumbai: messagestore2_mumbai.messageStore, + }, + messageProvider: { + localhost: messageprovider_localhost.messageProvider, + goerli: messageprovider_goerli.messageProvider, + mumbai: messageprovider_mumbai.messageProvider, + }, + messageToken: { + localhost: messagetoken_localhost.messageToken, + goerli: messagetoken_goerli.messageToken, + mumbai: messagetoken_mumbai.messageToken, + }, svgHelper: { goerli: splatter_goerli.svgHelperAddress, @@ -143,6 +185,9 @@ export const addresses: Addresses = { goerli: sample_goerli.providerAddress, localhost: sample_localhost.providerAddress, }, + sampleToken: { + localhost: sample_localhost.sampleToken, + }, assetStore: { goerli: store_goerli.storeAddress, mainnet: store_mainnet.storeAddress, @@ -271,4 +316,37 @@ export const addresses: Addresses = { mainnet: dynamic_mainnet.tokenGate, goerli: dynamic_goerli.tokenGate, }, + nounsDescriptor: { + mumbai: nounsDescriptor_mumbai.nounsDescriptor, + localhost: nounsDescriptor_localhost.nounsDescriptor, + }, + nounsSeeder: { + mumbai: nounsSeeder_mumbai.nounsSeeder, + localhost: nounsSeeder_localhost.nounsSeeder, + }, + nftDescriptor: { + mumbai: nftDescriptor_mumbai.nftDescriptor, + localhost: nftDescriptor_localhost.nftDescriptor, + }, + + localSeeder: { + mumbai: localSeeder_mumbai.localseeder, + localhost: localSeeder_localhost.localseeder, + }, + localNounsDescriptor: { + mumbai: localNounsDescriptor_mumbai.localNounsDescriptor, + localhost: localNounsDescriptor_localhost.localNounsDescriptor, + }, + localProvider: { + mumbai: localProvider_mumbai.localNounsProvider, + localhost: localProvider_localhost.localNounsProvider, + }, + localNounsToken: { + mumbai: localNounsToken_mumbai.localNounsToken, + localhost: localNounsToken_localhost.localNounsToken, + }, + localNounsMinter: { + mumbai: localNounsMinter_mumbai.localNounsMinter, + localhost: localNounsMinter_localhost.localNounsMinter, + }, }; diff --git a/src/utils/addresses/localNounsDescriptor_localhost.ts b/src/utils/addresses/localNounsDescriptor_localhost.ts new file mode 100644 index 00000000..2475711b --- /dev/null +++ b/src/utils/addresses/localNounsDescriptor_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsDescriptor:"0xDC11f7E700A4c898AE5CAddB1082cFfa76512aDD", +} diff --git a/src/utils/addresses/localNounsDescriptor_mumbai.ts b/src/utils/addresses/localNounsDescriptor_mumbai.ts new file mode 100644 index 00000000..5d3751e9 --- /dev/null +++ b/src/utils/addresses/localNounsDescriptor_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsDescriptor:"0x7351860b203bDDAC7e987F7d3B4e809960d05cf1", +} diff --git a/src/utils/addresses/localNounsMinter_localhost.ts b/src/utils/addresses/localNounsMinter_localhost.ts new file mode 100644 index 00000000..c08e5584 --- /dev/null +++ b/src/utils/addresses/localNounsMinter_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsMinter:"0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", +} diff --git a/src/utils/addresses/localNounsMinter_mumbai.ts b/src/utils/addresses/localNounsMinter_mumbai.ts new file mode 100644 index 00000000..b9956f0b --- /dev/null +++ b/src/utils/addresses/localNounsMinter_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsMinter:"0x0d602965065c64e6d5d69834C246863472aac4A5", +} diff --git a/src/utils/addresses/localNounsProvider_localhost.ts b/src/utils/addresses/localNounsProvider_localhost.ts new file mode 100644 index 00000000..ff3d0c5d --- /dev/null +++ b/src/utils/addresses/localNounsProvider_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsProvider:"0x51A1ceB83B83F1985a81C295d1fF28Afef186E02", +} diff --git a/src/utils/addresses/localNounsProvider_mumbai.ts b/src/utils/addresses/localNounsProvider_mumbai.ts new file mode 100644 index 00000000..36843f0d --- /dev/null +++ b/src/utils/addresses/localNounsProvider_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsProvider:"0xfB4Fa72bcA36e02E24D2081EcBcf8D6d071CCE03", +} diff --git a/src/utils/addresses/localNounsToken_localhost.ts b/src/utils/addresses/localNounsToken_localhost.ts new file mode 100644 index 00000000..09135c78 --- /dev/null +++ b/src/utils/addresses/localNounsToken_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsToken:"0x36b58F5C1969B7b6591D752ea6F5486D069010AB", +} diff --git a/src/utils/addresses/localNounsToken_mumbai.ts b/src/utils/addresses/localNounsToken_mumbai.ts new file mode 100644 index 00000000..c8683abf --- /dev/null +++ b/src/utils/addresses/localNounsToken_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsToken:"0x4d21F695453D2d206D72A08086f0440A97A82125", +} diff --git a/src/utils/addresses/localseeder_localhost.ts b/src/utils/addresses/localseeder_localhost.ts new file mode 100644 index 00000000..83de0f6d --- /dev/null +++ b/src/utils/addresses/localseeder_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + localseeder:"0xD8a5a9b31c3C0232E196d518E89Fd8bF83AcAd43", +} diff --git a/src/utils/addresses/localseeder_mumbai.ts b/src/utils/addresses/localseeder_mumbai.ts new file mode 100644 index 00000000..bad495e6 --- /dev/null +++ b/src/utils/addresses/localseeder_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + localseeder:"0x14E6BC05997989d6B5a1F2910Fe9eD4eC25F1294", +} diff --git a/src/utils/addresses/londrina_solid_localhost.ts b/src/utils/addresses/londrina_solid_localhost.ts index 164a2604..d68f9caa 100644 --- a/src/utils/addresses/londrina_solid_localhost.ts +++ b/src/utils/addresses/londrina_solid_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - font: "0xDDa0648FA8c9cD593416EC37089C2a2E6060B45c", -}; + font:"0x15cAbd0536f9707d1c03b21dDdC556726D7FF136", +} diff --git a/src/utils/addresses/londrina_solid_mumbai.ts b/src/utils/addresses/londrina_solid_mumbai.ts index 13758194..294b4592 100644 --- a/src/utils/addresses/londrina_solid_mumbai.ts +++ b/src/utils/addresses/londrina_solid_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - font: "0xF3636358069588D2A16a81d27e7e8cB15Eb3827B", -}; + font:"0xD0A75dF37c7E40361789886740287FbFB8cF6cd3", +} diff --git a/src/utils/addresses/londrina_solid_polygon.ts b/src/utils/addresses/londrina_solid_polygon.ts new file mode 100644 index 00000000..64349bc4 --- /dev/null +++ b/src/utils/addresses/londrina_solid_polygon.ts @@ -0,0 +1,3 @@ +export const addresses = { + font:"0x1183F445E209051ecB8f0c062153F2b2110F806A", +} diff --git a/src/utils/addresses/messageprovider_goerli.ts b/src/utils/addresses/messageprovider_goerli.ts new file mode 100644 index 00000000..648098ef --- /dev/null +++ b/src/utils/addresses/messageprovider_goerli.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageProvider: "0xaf5902C67Ff32b6Bc971Fb732888A8fdB9CECf48", +}; diff --git a/src/utils/addresses/messageprovider_localhost.ts b/src/utils/addresses/messageprovider_localhost.ts new file mode 100644 index 00000000..60848c49 --- /dev/null +++ b/src/utils/addresses/messageprovider_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageProvider: "0xd4416aE65D7Ad86405D2D97e9DE5Bf6675A5ACaC", +} diff --git a/src/utils/addresses/messageprovider_mumbai.ts b/src/utils/addresses/messageprovider_mumbai.ts new file mode 100644 index 00000000..a6423cfb --- /dev/null +++ b/src/utils/addresses/messageprovider_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageProvider: "0x0a55020dB260079B5853C3817ba60Fd1CB3528f2", +} diff --git a/src/utils/addresses/messagestore2_goerli.ts b/src/utils/addresses/messagestore2_goerli.ts new file mode 100644 index 00000000..db3deda3 --- /dev/null +++ b/src/utils/addresses/messagestore2_goerli.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageStore: "0xEfdE86a24ac55D9AcCEDdAc5f0357949a2c1BD3a", +}; diff --git a/src/utils/addresses/messagestore2_localhost.ts b/src/utils/addresses/messagestore2_localhost.ts new file mode 100644 index 00000000..52c923f6 --- /dev/null +++ b/src/utils/addresses/messagestore2_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageStore: "0x7De52d6d12044AcfD720D2C7f3BC679c68673BEE", +} diff --git a/src/utils/addresses/messagestore2_mumbai.ts b/src/utils/addresses/messagestore2_mumbai.ts new file mode 100644 index 00000000..b7070003 --- /dev/null +++ b/src/utils/addresses/messagestore2_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageStore: "0x923747177065d5c267a57DB6b64AD89ee099F672", +} diff --git a/src/utils/addresses/messagestore_londrinasolid_goerli.ts b/src/utils/addresses/messagestore_londrinasolid_goerli.ts new file mode 100644 index 00000000..74d2fd22 --- /dev/null +++ b/src/utils/addresses/messagestore_londrinasolid_goerli.ts @@ -0,0 +1,3 @@ +export const addresses = { + messagestore: "0x7c56D603Eb7976ee6592F7DDa8118576a9FDfeA3", +}; diff --git a/src/utils/addresses/messagestore_notosans_goerli.ts b/src/utils/addresses/messagestore_notosans_goerli.ts new file mode 100644 index 00000000..0900d923 --- /dev/null +++ b/src/utils/addresses/messagestore_notosans_goerli.ts @@ -0,0 +1,3 @@ +export const addresses = { + messagestore: "0x9bF2831b806CEbD0B09d490c90C88bcb47515C62", +}; diff --git a/src/utils/addresses/messagetoken_goerli.ts b/src/utils/addresses/messagetoken_goerli.ts new file mode 100644 index 00000000..7fa50564 --- /dev/null +++ b/src/utils/addresses/messagetoken_goerli.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageToken: "0x8C4aa1A2887bD3abC110CB91aC198569b6f92E76", +}; diff --git a/src/utils/addresses/messagetoken_localhost.ts b/src/utils/addresses/messagetoken_localhost.ts new file mode 100644 index 00000000..7efbcd88 --- /dev/null +++ b/src/utils/addresses/messagetoken_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageToken: "0x1025d7bCcE981D9808C05d51151DCeFD747Edc02", +} diff --git a/src/utils/addresses/messagetoken_mumbai.ts b/src/utils/addresses/messagetoken_mumbai.ts new file mode 100644 index 00000000..4600f5c9 --- /dev/null +++ b/src/utils/addresses/messagetoken_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageToken: "0x4718CfA8DbC4A5C57490f47d6877750bBab3B22B", +} diff --git a/src/utils/addresses/nftDescriptor_localhost.ts b/src/utils/addresses/nftDescriptor_localhost.ts new file mode 100644 index 00000000..b9e2a303 --- /dev/null +++ b/src/utils/addresses/nftDescriptor_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + nftDescriptor:"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", +} diff --git a/src/utils/addresses/nftDescriptor_mumbai.ts b/src/utils/addresses/nftDescriptor_mumbai.ts new file mode 100644 index 00000000..26646f74 --- /dev/null +++ b/src/utils/addresses/nftDescriptor_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + nftDescriptor:"0x77dD7d8d4a7091a64c25Eb0127839ff1f467edCa", +} diff --git a/src/utils/addresses/nounsDescriptor_localhost.ts b/src/utils/addresses/nounsDescriptor_localhost.ts new file mode 100644 index 00000000..2bfe8fe1 --- /dev/null +++ b/src/utils/addresses/nounsDescriptor_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + nounsDescriptor:"0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", +} diff --git a/src/utils/addresses/nounsDescriptor_mumbai.ts b/src/utils/addresses/nounsDescriptor_mumbai.ts new file mode 100644 index 00000000..908194a9 --- /dev/null +++ b/src/utils/addresses/nounsDescriptor_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + nounsDescriptor:"0xE61d3572FDc4Bd1A49fa8bc691E3A0650FF0DdfC", +} diff --git a/src/utils/addresses/nounsSeeder_localhost.ts b/src/utils/addresses/nounsSeeder_localhost.ts new file mode 100644 index 00000000..55c0737e --- /dev/null +++ b/src/utils/addresses/nounsSeeder_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + nounsSeeder:"0x5FbDB2315678afecb367f032d93F642f64180aa3", +} diff --git a/src/utils/addresses/nounsSeeder_mumbai.ts b/src/utils/addresses/nounsSeeder_mumbai.ts new file mode 100644 index 00000000..8433cc5d --- /dev/null +++ b/src/utils/addresses/nounsSeeder_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + nounsSeeder:"0x86c95EC4fA955505E0B904CFCF232E93e17a1c75", +} diff --git a/src/utils/addresses/sample_localhost.ts b/src/utils/addresses/sample_localhost.ts index 10429ab4..153d86ba 100644 --- a/src/utils/addresses/sample_localhost.ts +++ b/src/utils/addresses/sample_localhost.ts @@ -1,5 +1,4 @@ export const addresses = { - svgHelperAddress: "0xAD2935E147b61175D5dc3A9e7bDa93B0975A43BA", - providerAddress: "0x00CAC06Dd0BB4103f8b62D280fE9BCEE8f26fD59", - sampleToken: "0x4951A1C579039EbfCBA0BE33D2cd3A6D30b0f802", -}; + providerAddress:"0x7Cf4be31f546c04787886358b9486ca3d62B9acf", + sampleToken:"0x33E45b187da34826aBCEDA1039231Be46f1b05Af" +} diff --git a/src/utils/const.ts b/src/utils/const.ts index 01164aa2..e1bef9fa 100644 --- a/src/utils/const.ts +++ b/src/utils/const.ts @@ -84,10 +84,13 @@ const ProviderSVGTokenEx = { wabi: require("@/abis/SVGTokenV1.json"), // wrapped abi }; const ProviderMessageTokenEx = { - wabi: require("@/abis/MessageToken.json"), // wrapped abi + wabi: require("@/abis/MessageTokenV2.json"), // wrapped abi +}; +const ProviderMessageProviderEx = { + wabi: require("@/abis/MessageProvider3.json"), // wrapped abi }; const ProviderMessageStoreEx = { - wabi: require("@/abis/MessageStoreV1.json"), // wrapped abi + wabi: require("@/abis/MessageStoreV2.json"), // wrapped abi }; const IAssetProvider = { wabi: require("@/abis/IAssetProvider.json"), // wrapped abi @@ -161,6 +164,18 @@ export const getMessageTokenContract = ( return tokenContract; }; +export const getMessageProviderContract = ( + address: string, + provider: ProviderOrSigner +): ethers.Contract => { + const tokenContract = new ethers.Contract( + address, + ProviderMessageProviderEx.wabi.abi, + provider + ); + return tokenContract; +}; + export const getMessageStoreContract = ( address: string, provider: ProviderOrSigner diff --git a/src/views/Message.vue b/src/views/Message.vue index c0a14725..8605ade7 100644 --- a/src/views/Message.vue +++ b/src/views/Message.vue @@ -10,18 +10,35 @@ rows="8" class="w-full resize rounded-md border-2" v-model="message" + @input="updateSVGMessage" />
Color: - + Font: + + Asset: +
+
Preview
+
+
+
-
- Loading... -
+
Loading...
diff --git a/src/views/MessagePNouns.vue b/src/views/MessagePNouns.vue index 157f22ae..78175af3 100644 --- a/src/views/MessagePNouns.vue +++ b/src/views/MessagePNouns.vue @@ -35,9 +35,7 @@
-
- Loading... -
+
Loading...
diff --git a/src/views/SVG.vue b/src/views/SVG.vue index e5078417..b1bc1e8d 100644 --- a/src/views/SVG.vue +++ b/src/views/SVG.vue @@ -77,7 +77,6 @@ properties width, height.
-
{{ token.name }} @@ -177,7 +176,6 @@ export default defineComponent({ // const network = "localhost"; // const tokenAddress = "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0"; - // store contract="0x442622c789E5489A222141d06966608a2980E915" // provider contract="0x24F08949190D291DaBb9d7a828ad048FE6250E0C" // token contract="0x07f21753E1DA964fc7131571DD999471C6492e7E" @@ -185,7 +183,7 @@ export default defineComponent({ // store contract="0x05ce81EC1751E2317ddc2E90948EBc6Ca66781a1" // provider contract="0xc65Ffa203d73538557Cff496bE85BD12B28927ca" // token contract="0x5F0f949949c82f660B38FC7601A45498fa2C9fC9" - + const network = "mumbai"; const tokenAddress = "0x67b8571A13410a2687b8ceA1C416b88d75165Fc6"; From 29988ca1d231cb5d7f20b9378b9b5adabfa65d4c Mon Sep 17 00:00:00 2001 From: isamu Date: Mon, 15 May 2023 09:31:48 +0900 Subject: [PATCH 046/146] update package --- .../packages/graphics/package-lock.json | 18 +++++++++--------- .../contracts/packages/graphics/package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/contract/contracts/packages/graphics/package-lock.json b/contract/contracts/packages/graphics/package-lock.json index b60d0633..3bf2705f 100644 --- a/contract/contracts/packages/graphics/package-lock.json +++ b/contract/contracts/packages/graphics/package-lock.json @@ -1,23 +1,23 @@ { "name": "fully-on-chain.sol", - "version": "1.0.1", + "version": "1.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "fully-on-chain.sol", - "version": "1.0.1", + "version": "1.4.0", "license": "MIT", "dependencies": { - "@openzeppelin/contracts": "^4.7.3", + "@openzeppelin/contracts": "^4.8.3", "bytes-array.sol": "^1.0.2", "trigonometry.sol": "^1.0.1" } }, "node_modules/@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==" }, "node_modules/bytes-array.sol": { "version": "1.0.2", @@ -32,9 +32,9 @@ }, "dependencies": { "@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==" }, "bytes-array.sol": { "version": "1.0.2", diff --git a/contract/contracts/packages/graphics/package.json b/contract/contracts/packages/graphics/package.json index d73b6887..69d8090f 100644 --- a/contract/contracts/packages/graphics/package.json +++ b/contract/contracts/packages/graphics/package.json @@ -24,7 +24,7 @@ }, "homepage": "https://github.com/Cryptocoders-wtf/generative/tree/main/contract/contracts/packages/graphics#readme", "dependencies": { - "@openzeppelin/contracts": "^4.7.3", + "@openzeppelin/contracts": "^4.8.3", "bytes-array.sol": "^1.0.2", "trigonometry.sol": "^1.0.1" } From 81befbc5344a2d9454f5ad47078aababaeed3887 Mon Sep 17 00:00:00 2001 From: isamu Date: Mon, 15 May 2023 09:33:51 +0900 Subject: [PATCH 047/146] update package --- contract/package-lock.json | 14 +++++++------- contract/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/contract/package-lock.json b/contract/package-lock.json index 1c0d99f3..18487fa9 100644 --- a/contract/package-lock.json +++ b/contract/package-lock.json @@ -12,7 +12,7 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.0", "@nomiclabs/hardhat-etherscan": "^3.1.1", "@nouns/sdk": "^0.3.2", - "@openzeppelin/contracts": "^4.7.3", + "@openzeppelin/contracts": "^4.8.3", "assetprovider.sol": "^1.2.0", "assetstore.sol": "^1.0.1", "bytes-array.sol": "^1.0.0", @@ -1352,9 +1352,9 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", "dev": true }, "node_modules/@scure/base": { @@ -9976,9 +9976,9 @@ } }, "@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", "dev": true }, "@scure/base": { diff --git a/contract/package.json b/contract/package.json index 1bc7d7ef..3087392b 100644 --- a/contract/package.json +++ b/contract/package.json @@ -7,7 +7,7 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.0", "@nomiclabs/hardhat-etherscan": "^3.1.1", "@nouns/sdk": "^0.3.2", - "@openzeppelin/contracts": "^4.7.3", + "@openzeppelin/contracts": "^4.8.3", "assetprovider.sol": "^1.2.0", "assetstore.sol": "^1.0.1", "bytes-array.sol": "^1.0.0", From 747c526c29d9dd0793b4e70c3a86ca80bb4ef96a Mon Sep 17 00:00:00 2001 From: isamu Date: Mon, 15 May 2023 09:39:25 +0900 Subject: [PATCH 048/146] update packages --- contract/package-lock.json | 774 ++++++++++++++++++++----------------- contract/package.json | 4 +- 2 files changed, 414 insertions(+), 364 deletions(-) diff --git a/contract/package-lock.json b/contract/package-lock.json index 18487fa9..c539eb94 100644 --- a/contract/package-lock.json +++ b/contract/package-lock.json @@ -10,7 +10,7 @@ }, "devDependencies": { "@nomicfoundation/hardhat-toolbox": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.1.1", + "@nomiclabs/hardhat-etherscan": "^3.1.7", "@nouns/sdk": "^0.3.2", "@openzeppelin/contracts": "^4.8.3", "assetprovider.sol": "^1.2.0", @@ -19,13 +19,39 @@ "dotenv": "^16.0.3", "fast-xml-parser": "^4.0.11", "fully-on-chain.sol": "^1.1.0", - "hardhat": "^2.11.2", + "hardhat": "^2.14.0", "prettier-plugin-solidity": "^1.0.0", "randomizer.sol": "^1.0.0", "trigonometry.sol": "^1.0.0", "ts-node": "^10.9.1" } }, + "node_modules/@chainsafe/as-sha256": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", + "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==", + "dev": true + }, + "node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", + "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "dev": true, + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "node_modules/@chainsafe/ssz": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", + "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "dev": true, + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.4.2", + "case": "^1.6.3" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -873,34 +899,36 @@ } }, "node_modules/@nomicfoundation/ethereumjs-block": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", - "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", + "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3" + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1" }, "engines": { "node": ">=14" } }, "node_modules/@nomicfoundation/ethereumjs-blockchain": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", - "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", + "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-ethash": "^2.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-ethash": "3.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", @@ -913,24 +941,24 @@ } }, "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", - "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", + "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-util": "9.0.1", "crc-32": "^1.2.0" } }, "node_modules/@nomicfoundation/ethereumjs-ethash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", - "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", + "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "bigint-crypto-utils": "^3.0.23", "ethereum-cryptography": "0.1.3" @@ -940,15 +968,15 @@ } }, "node_modules/@nomicfoundation/ethereumjs-evm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", - "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", + "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "@ethersproject/providers": "^5.7.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "mcl-wasm": "^0.7.1", @@ -959,9 +987,9 @@ } }, "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", - "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", + "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", "dev": true, "bin": { "rlp": "bin/rlp" @@ -971,28 +999,28 @@ } }, "node_modules/@nomicfoundation/ethereumjs-statemanager": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", - "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", + "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1" + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" } }, "node_modules/@nomicfoundation/ethereumjs-trie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", - "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", + "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@types/readable-stream": "^2.3.13", "ethereum-cryptography": "0.1.3", "readable-stream": "^3.6.0" }, @@ -1001,14 +1029,16 @@ } }, "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", - "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", + "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@chainsafe/ssz": "^0.9.2", + "@ethersproject/providers": "^5.7.2", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "ethereum-cryptography": "0.1.3" }, "engines": { @@ -1016,38 +1046,55 @@ } }, "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", - "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", + "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", + "@chainsafe/ssz": "^0.10.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "ethereum-cryptography": "0.1.3" }, "engines": { "node": ">=14" } }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", + "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", + "dev": true, + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/ssz": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", + "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", + "dev": true, + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.5.0" + } + }, "node_modules/@nomicfoundation/ethereumjs-vm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", - "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", + "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1", "mcl-wasm": "^0.7.1", "rustbn.js": "~0.2.0" }, @@ -1090,9 +1137,9 @@ } }, "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.0.tgz", - "integrity": "sha512-BoOPbzLQ1GArnBZd4Jz4IU8FY3RY4nUwpXlfymXwxlXNimngkPRJj7ivVNurD7igohEjf90v/Axn2M5WwAdCJQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", + "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", "dev": true, "peerDependencies": { "@ethersproject/abi": "^5.4.7", @@ -1104,7 +1151,7 @@ "@typechain/ethers-v5": "^10.1.0", "@typechain/hardhat": "^6.1.2", "@types/chai": "^4.2.0", - "@types/mocha": "^9.1.0", + "@types/mocha": ">=9.1.0", "@types/node": ">=12.0.0", "chai": "^4.2.0", "ethers": "^5.4.7", @@ -1309,21 +1356,21 @@ } }, "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.1.tgz", - "integrity": "sha512-a6+fJlHTiPjzUYnvwkcduJN0rAKWagQsQNoHJP/9mJ1CZjIkGysGtvVAjNpnrYWocj/Hbi36XmZ0H2aIKlol7A==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", + "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@ethersproject/address": "^5.0.2", - "cbor": "^5.0.2", + "cbor": "^8.1.0", "chalk": "^2.4.2", "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.11", "semver": "^6.3.0", "table": "^6.8.0", - "undici": "^5.4.0" + "undici": "^5.14.0" }, "peerDependencies": { "hardhat": "^2.0.4" @@ -1613,12 +1660,6 @@ "node": ">= 10.0.0" } }, - "node_modules/@types/async-eventemitter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", - "dev": true - }, "node_modules/@types/bn.js": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", @@ -1725,6 +1766,22 @@ "dev": true, "peer": true }, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/@types/secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", @@ -2055,24 +2112,6 @@ "node": ">=8" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "dependencies": { - "async": "^2.4.0" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2171,33 +2210,12 @@ "dev": true }, "node_modules/bigint-crypto-utils": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", - "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", + "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==", "dev": true, - "dependencies": { - "bigint-mod-arith": "^3.1.0" - }, "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/bigint-mod-arith": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", - "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", - "dev": true, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/bignumber.js": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", - "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", - "dev": true, - "engines": { - "node": "*" + "node": ">=14.0.0" } }, "node_modules/binary-extensions": { @@ -2389,6 +2407,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/case": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -2406,16 +2433,15 @@ } }, "node_modules/cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", "dev": true, "dependencies": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" + "nofilter": "^3.1.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.19" } }, "node_modules/chai": { @@ -2541,16 +2567,16 @@ } }, "node_modules/classic-level": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", - "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", + "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", "dev": true, "hasInstallScript": true, "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.0", "module-error": "^1.0.1", - "napi-macros": "~2.0.0", + "napi-macros": "^2.2.2", "node-gyp-build": "^4.3.0" }, "engines": { @@ -4542,23 +4568,23 @@ } }, "node_modules/hardhat": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.12.0.tgz", - "integrity": "sha512-mNJFbVG479HwOzxiaLxobyvED2M1aEAuPPYhEo1+88yicMDSTrU2JIS7vV+V0GSNQKaDoiHCmV6bcKjiljT/dQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", + "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@nomicfoundation/ethereumjs-vm": "^6.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-vm": "7.0.1", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", @@ -4594,15 +4620,15 @@ "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", - "undici": "^5.4.0", + "undici": "^5.14.0", "uuid": "^8.3.2", "ws": "^7.4.6" }, "bin": { - "hardhat": "internal/cli/cli.js" + "hardhat": "internal/cli/bootstrap.js" }, "engines": { - "node": "^14.0.0 || ^16.0.0 || ^18.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "ts-node": "*", @@ -5256,6 +5282,16 @@ "dev": true, "peer": true }, + "node_modules/js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -5936,9 +5972,9 @@ } }, "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", "dev": true }, "node_modules/neo-async": { @@ -5997,12 +6033,12 @@ } }, "node_modules/nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12.19" } }, "node_modules/nopt": { @@ -6601,29 +6637,16 @@ } }, "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dev": true, - "peer": true, - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" + "minimatch": "^3.0.5" }, "engines": { - "node": "*" + "node": ">=6.0.0" } }, "node_modules/reduce-flatten": { @@ -9139,6 +9162,32 @@ } }, "dependencies": { + "@chainsafe/as-sha256": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", + "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==", + "dev": true + }, + "@chainsafe/persistent-merkle-tree": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", + "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "dev": true, + "requires": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "@chainsafe/ssz": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", + "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "dev": true, + "requires": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.4.2", + "case": "^1.6.3" + } + }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -9658,31 +9707,33 @@ } }, "@nomicfoundation/ethereumjs-block": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", - "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", + "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3" + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1" } }, "@nomicfoundation/ethereumjs-blockchain": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", - "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", + "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-ethash": "^2.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-ethash": "3.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", @@ -9692,39 +9743,39 @@ } }, "@nomicfoundation/ethereumjs-common": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", - "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", + "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-util": "9.0.1", "crc-32": "^1.2.0" } }, "@nomicfoundation/ethereumjs-ethash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", - "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", + "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "bigint-crypto-utils": "^3.0.23", "ethereum-cryptography": "0.1.3" } }, "@nomicfoundation/ethereumjs-evm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", - "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", + "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "@ethersproject/providers": "^5.7.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "mcl-wasm": "^0.7.1", @@ -9732,80 +9783,101 @@ } }, "@nomicfoundation/ethereumjs-rlp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", - "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", + "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", "dev": true }, "@nomicfoundation/ethereumjs-statemanager": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", - "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", + "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1" + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" } }, "@nomicfoundation/ethereumjs-trie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", - "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", + "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@types/readable-stream": "^2.3.13", "ethereum-cryptography": "0.1.3", "readable-stream": "^3.6.0" } }, "@nomicfoundation/ethereumjs-tx": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", - "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", + "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@chainsafe/ssz": "^0.9.2", + "@ethersproject/providers": "^5.7.2", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "ethereum-cryptography": "0.1.3" } }, "@nomicfoundation/ethereumjs-util": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", - "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", + "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", + "@chainsafe/ssz": "^0.10.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "ethereum-cryptography": "0.1.3" + }, + "dependencies": { + "@chainsafe/persistent-merkle-tree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", + "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", + "dev": true, + "requires": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "@chainsafe/ssz": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", + "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", + "dev": true, + "requires": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.5.0" + } + } } }, "@nomicfoundation/ethereumjs-vm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", - "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", + "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", + "dev": true, + "requires": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1", "mcl-wasm": "^0.7.1", "rustbn.js": "~0.2.0" } @@ -9836,9 +9908,9 @@ } }, "@nomicfoundation/hardhat-toolbox": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.0.tgz", - "integrity": "sha512-BoOPbzLQ1GArnBZd4Jz4IU8FY3RY4nUwpXlfymXwxlXNimngkPRJj7ivVNurD7igohEjf90v/Axn2M5WwAdCJQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", + "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", "dev": true, "requires": {} }, @@ -9939,21 +10011,21 @@ "requires": {} }, "@nomiclabs/hardhat-etherscan": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.1.tgz", - "integrity": "sha512-a6+fJlHTiPjzUYnvwkcduJN0rAKWagQsQNoHJP/9mJ1CZjIkGysGtvVAjNpnrYWocj/Hbi36XmZ0H2aIKlol7A==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", + "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", "dev": true, "requires": { "@ethersproject/abi": "^5.1.2", "@ethersproject/address": "^5.0.2", - "cbor": "^5.0.2", + "cbor": "^8.1.0", "chalk": "^2.4.2", "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.11", "semver": "^6.3.0", "table": "^6.8.0", - "undici": "^5.4.0" + "undici": "^5.14.0" } }, "@nouns/contracts": { @@ -10176,12 +10248,6 @@ } } }, - "@types/async-eventemitter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", - "dev": true - }, "@types/bn.js": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", @@ -10288,6 +10354,24 @@ "dev": true, "peer": true }, + "@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "dev": true, + "requires": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, "@types/secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", @@ -10542,24 +10626,6 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -10640,24 +10706,9 @@ "dev": true }, "bigint-crypto-utils": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", - "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", - "dev": true, - "requires": { - "bigint-mod-arith": "^3.1.0" - } - }, - "bigint-mod-arith": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", - "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", - "dev": true - }, - "bignumber.js": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", - "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", + "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==", "dev": true }, "binary-extensions": { @@ -10814,6 +10865,12 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, + "case": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -10828,13 +10885,12 @@ "dev": true }, "cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", "dev": true, "requires": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" + "nofilter": "^3.1.0" } }, "chai": { @@ -10933,15 +10989,15 @@ } }, "classic-level": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", - "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", + "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", "dev": true, "requires": { "abstract-level": "^1.0.2", "catering": "^2.1.0", "module-error": "^1.0.1", - "napi-macros": "~2.0.0", + "napi-macros": "^2.2.2", "node-gyp-build": "^4.3.0" } }, @@ -12531,23 +12587,23 @@ } }, "hardhat": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.12.0.tgz", - "integrity": "sha512-mNJFbVG479HwOzxiaLxobyvED2M1aEAuPPYhEo1+88yicMDSTrU2JIS7vV+V0GSNQKaDoiHCmV6bcKjiljT/dQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", + "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", "dev": true, "requires": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@nomicfoundation/ethereumjs-vm": "^6.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-vm": "7.0.1", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", @@ -12583,7 +12639,7 @@ "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", - "undici": "^5.4.0", + "undici": "^5.14.0", "uuid": "^8.3.2", "ws": "^7.4.6" }, @@ -13054,6 +13110,12 @@ "dev": true, "peer": true }, + "js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "dev": true + }, "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -13578,9 +13640,9 @@ "dev": true }, "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", "dev": true }, "neo-async": { @@ -13633,9 +13695,9 @@ "dev": true }, "nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", "dev": true }, "nopt": { @@ -14084,25 +14146,13 @@ } }, "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, "peer": true, "requires": { - "minimatch": "3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "peer": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "minimatch": "^3.0.5" } }, "reduce-flatten": { diff --git a/contract/package.json b/contract/package.json index 3087392b..d986d20d 100644 --- a/contract/package.json +++ b/contract/package.json @@ -5,7 +5,7 @@ }, "devDependencies": { "@nomicfoundation/hardhat-toolbox": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.1.1", + "@nomiclabs/hardhat-etherscan": "^3.1.7", "@nouns/sdk": "^0.3.2", "@openzeppelin/contracts": "^4.8.3", "assetprovider.sol": "^1.2.0", @@ -14,7 +14,7 @@ "dotenv": "^16.0.3", "fast-xml-parser": "^4.0.11", "fully-on-chain.sol": "^1.1.0", - "hardhat": "^2.11.2", + "hardhat": "^2.14.0", "prettier-plugin-solidity": "^1.0.0", "randomizer.sol": "^1.0.0", "trigonometry.sol": "^1.0.0", From ad117ccc12c928235e5570198a0f1c45b916bd33 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 15 Jun 2023 16:10:28 +0900 Subject: [PATCH 049/146] LocalNouns initial working version --- contract/contracts/LocalNounsToken.sol | 32 +- .../external/nouns/NounsDescripter.sol | 351 +++ .../localNouns/LocalNounsDescriptor.sol | 68 +- .../localNouns/LocalNounsProvider.sol | 25 +- .../contracts/localNouns/LocalNounsSeeder.sol | 21 +- contract/contracts/localNouns/README.md | 20 +- .../interfaces/IAssetProviderExMint.sol | 2 +- .../interfaces/ILocalNounsSeeder.sol | 32 + .../interfaces/INounsDescriptor.sol | 12 +- .../interfaces/INounsDescriptorMinimal.sol | 8 + contract/hardhat.config.ts | 23 +- contract/package-lock.json | 35 +- contract/package.json | 5 +- contract/scripts/deploy_localNouns.ts | 75 + contract/scripts/deploy_nounsDescriptorV1.ts | 52 + contract/scripts/populate_localNouns.ts | 107 + contract/scripts/populate_nounsV1.ts | 81 + contract/test/image-local-data.json | 1447 ++++++++++++ contract/test/image-original-nouns-data.json | 1943 +++++++++++++++++ 19 files changed, 4237 insertions(+), 102 deletions(-) create mode 100644 contract/contracts/external/nouns/NounsDescripter.sol create mode 100644 contract/contracts/localNouns/interfaces/ILocalNounsSeeder.sol create mode 100644 contract/scripts/deploy_localNouns.ts create mode 100644 contract/scripts/deploy_nounsDescriptorV1.ts create mode 100644 contract/scripts/populate_localNouns.ts create mode 100644 contract/scripts/populate_nounsV1.ts create mode 100644 contract/test/image-local-data.json create mode 100644 contract/test/image-original-nouns-data.json diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index a0f9dbf2..ea32159a 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -8,8 +8,8 @@ pragma solidity ^0.8.6; import '@openzeppelin/contracts/utils/Strings.sol'; import './libs/ProviderTokenA1.sol'; -import { INounsSeeder } from './sushi/interfaces/INounsSeeder.sol'; -import './sushi/interfaces/IAssetProviderExMint.sol'; +import { INounsSeeder } from './localNouns/interfaces/INounsSeeder.sol'; +import './localNouns/interfaces/IAssetProviderExMint.sol'; contract LocalNounsToken is ProviderTokenA1 { using Strings for uint256; @@ -26,10 +26,10 @@ contract LocalNounsToken is ProviderTokenA1 { address _committee, address _designer, address _developper - ) ProviderTokenA1(_assetProvider, 'Sushi Nouns', 'Sushi Nouns') { - description = 'Sushi Nouns Token.'; + ) ProviderTokenA1(_assetProvider, 'Local Nouns', 'Local Nouns') { + description = 'Local Nouns Token.'; assetProvider2 = _assetProvider; - mintPrice = 1e15; // 0.1 + mintPrice = 1e13; // 0.001 mintLimit = 5000; committee = _committee; designer = _designer; @@ -37,10 +37,10 @@ contract LocalNounsToken is ProviderTokenA1 { } function tokenName(uint256 _tokenId) internal pure override returns (string memory) { - return string(abi.encodePacked('Sushi Nouns ', _tokenId.toString())); + return string(abi.encodePacked('Local Nouns ', _tokenId.toString())); } function tokenURI(uint256 _tokenId) public view override returns (string memory) { - require(_tokenId < _nextTokenId(), 'SushiNounsToken.tokenURI: nonexistent token'); + require(_tokenId < _nextTokenId(), 'LocalNounsToken.tokenURI: nonexistent token'); (string memory svgPart, string memory tag) = assetProvider2.generateSVGPart(_tokenId); bytes memory image = bytes(svgPart); @@ -59,7 +59,7 @@ contract LocalNounsToken is ProviderTokenA1 { '","attributes":[', generateTraits(_tokenId), '],"image":"data:image/svg+xml;base64,', - Base64.encode(image), + image, '"}' ) ) @@ -67,19 +67,19 @@ contract LocalNounsToken is ProviderTokenA1 { ) ); } - function mint() public payable virtual override returns (uint256 tokenId) { + function mint(uint256 prefectureId) public payable virtual returns (uint256 tokenId) { require(msg.value >= mintPrice, 'Must send the mint price'); - assetProvider2.mint(_nextTokenId()); + assetProvider2.mint(prefectureId, _nextTokenId()); super.mint(); address payable payableTo = payable(committee); payableTo.transfer(address(this).balance); - if ((_nextTokenId() % 10) == 8) { - assetProvider2.mint(_nextTokenId()); - _safeMint(designer, 1); - assetProvider2.mint(_nextTokenId()); - _safeMint(developper, 1); - } + // if ((_nextTokenId() % 10) == 8) { + // assetProvider2.mint(_nextTokenId()); + // _safeMint(designer, 1); + // assetProvider2.mint(_nextTokenId()); + // _safeMint(developper, 1); + // } return _nextTokenId() - 1; } } diff --git a/contract/contracts/external/nouns/NounsDescripter.sol b/contract/contracts/external/nouns/NounsDescripter.sol new file mode 100644 index 00000000..55361dee --- /dev/null +++ b/contract/contracts/external/nouns/NounsDescripter.sol @@ -0,0 +1,351 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title The Nouns NFT descriptor + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +import { Strings } from '@openzeppelin/contracts/utils/Strings.sol'; +import { INounsDescriptor } from './interfaces/INounsDescriptor.sol'; +import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { NFTDescriptor } from './libs/NFTDescriptor.sol'; +import { MultiPartRLEToSVG } from './libs/MultiPartRLEToSVG.sol'; + +contract NounsDescriptor is INounsDescriptor, Ownable { + using Strings for uint256; + + // prettier-ignore + // https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt + bytes32 constant COPYRIGHT_CC0_1_0_UNIVERSAL_LICENSE = 0xa2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499; + + // Whether or not new Noun parts can be added + bool public override arePartsLocked; + + // Whether or not `tokenURI` should be returned as a data URI (Default: true) + bool public override isDataURIEnabled = true; + + // Base URI + string public override baseURI; + + // Noun Color Palettes (Index => Hex Colors) + mapping(uint8 => string[]) public override palettes; + + // Noun Backgrounds (Hex Colors) + string[] public override backgrounds; + + // Noun Bodies (Custom RLE) + bytes[] public override bodies; + + // Noun Accessories (Custom RLE) + bytes[] public override accessories; + + // Noun Heads (Custom RLE) + bytes[] public override heads; + + // Noun Glasses (Custom RLE) + bytes[] public override glasses; + + /** + * @notice Require that the parts have not been locked. + */ + modifier whenPartsNotLocked() { + require(!arePartsLocked, 'Parts are locked'); + _; + } + + /** + * @notice Get the number of available Noun `backgrounds`. + */ + function backgroundCount() external view override returns (uint256) { + return backgrounds.length; + } + + /** + * @notice Get the number of available Noun `bodies`. + */ + function bodyCount() external view override returns (uint256) { + return bodies.length; + } + + /** + * @notice Get the number of available Noun `accessories`. + */ + function accessoryCount() external view override returns (uint256) { + return accessories.length; + } + + /** + * @notice Get the number of available Noun `heads`. + */ + function headCount() external view override returns (uint256) { + return heads.length; + } + + /** + * @notice Get the number of available Noun `glasses`. + */ + function glassesCount() external view override returns (uint256) { + return glasses.length; + } + + /** + * @notice Add colors to a color palette. + * @dev This function can only be called by the owner. + */ + function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external override onlyOwner { + require(palettes[paletteIndex].length + newColors.length <= 256, 'Palettes can only hold 256 colors'); + for (uint256 i = 0; i < newColors.length; i++) { + _addColorToPalette(paletteIndex, newColors[i]); + } + } + + /** + * @notice Batch add Noun backgrounds. + * @dev This function can only be called by the owner when not locked. + */ + function addManyBackgrounds(string[] calldata _backgrounds) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _backgrounds.length; i++) { + _addBackground(_backgrounds[i]); + } + } + + /** + * @notice Batch add Noun bodies. + * @dev This function can only be called by the owner when not locked. + */ + function addManyBodies(bytes[] calldata _bodies) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _bodies.length; i++) { + _addBody(_bodies[i]); + } + } + + /** + * @notice Batch add Noun accessories. + * @dev This function can only be called by the owner when not locked. + */ + function addManyAccessories(bytes[] calldata _accessories) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _accessories.length; i++) { + _addAccessory(_accessories[i]); + } + } + + /** + * @notice Batch add Noun heads. + * @dev This function can only be called by the owner when not locked. + */ + function addManyHeads(bytes[] calldata _heads) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _heads.length; i++) { + _addHead(_heads[i]); + } + } + + /** + * @notice Batch add Noun glasses. + * @dev This function can only be called by the owner when not locked. + */ + function addManyGlasses(bytes[] calldata _glasses) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _glasses.length; i++) { + _addGlasses(_glasses[i]); + } + } + + /** + * @notice Add a single color to a color palette. + * @dev This function can only be called by the owner. + */ + function addColorToPalette(uint8 _paletteIndex, string calldata _color) external override onlyOwner { + require(palettes[_paletteIndex].length <= 255, 'Palettes can only hold 256 colors'); + _addColorToPalette(_paletteIndex, _color); + } + + /** + * @notice Add a Noun background. + * @dev This function can only be called by the owner when not locked. + */ + function addBackground(string calldata _background) external override onlyOwner whenPartsNotLocked { + _addBackground(_background); + } + + /** + * @notice Add a Noun body. + * @dev This function can only be called by the owner when not locked. + */ + function addBody(bytes calldata _body) external override onlyOwner whenPartsNotLocked { + _addBody(_body); + } + + /** + * @notice Add a Noun accessory. + * @dev This function can only be called by the owner when not locked. + */ + function addAccessory(bytes calldata _accessory) external override onlyOwner whenPartsNotLocked { + _addAccessory(_accessory); + } + + /** + * @notice Add a Noun head. + * @dev This function can only be called by the owner when not locked. + */ + function addHead(bytes calldata _head) external override onlyOwner whenPartsNotLocked { + _addHead(_head); + } + + /** + * @notice Add Noun glasses. + * @dev This function can only be called by the owner when not locked. + */ + function addGlasses(bytes calldata _glasses) external override onlyOwner whenPartsNotLocked { + _addGlasses(_glasses); + } + + /** + * @notice Lock all Noun parts. + * @dev This cannot be reversed and can only be called by the owner when not locked. + */ + function lockParts() external override onlyOwner whenPartsNotLocked { + arePartsLocked = true; + + emit PartsLocked(); + } + + /** + * @notice Toggle a boolean value which determines if `tokenURI` returns a data URI + * or an HTTP URL. + * @dev This can only be called by the owner. + */ + function toggleDataURIEnabled() external override onlyOwner { + bool enabled = !isDataURIEnabled; + + isDataURIEnabled = enabled; + emit DataURIToggled(enabled); + } + + /** + * @notice Set the base URI for all token IDs. It is automatically + * added as a prefix to the value returned in {tokenURI}, or to the + * token ID if {tokenURI} is empty. + * @dev This can only be called by the owner. + */ + function setBaseURI(string calldata _baseURI) external override onlyOwner { + baseURI = _baseURI; + + emit BaseURIUpdated(_baseURI); + } + + /** + * @notice Given a token ID and seed, construct a token URI for an official Nouns DAO noun. + * @dev The returned value may be a base64 encoded data URI or an API URL. + */ + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory) { + if (isDataURIEnabled) { + return dataURI(tokenId, seed); + } + return string(abi.encodePacked(baseURI, tokenId.toString())); + } + + /** + * @notice Given a token ID and seed, construct a base64 encoded data URI for an official Nouns DAO noun. + */ + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) public view override returns (string memory) { + string memory nounId = tokenId.toString(); + string memory name = string(abi.encodePacked('Noun ', nounId)); + string memory description = string(abi.encodePacked('Noun ', nounId, ' is a member of the Nouns DAO')); + + return genericDataURI(name, description, seed); + } + + /** + * @notice Given a name, description, and seed, construct a base64 encoded data URI. + */ + function genericDataURI( + string memory name, + string memory description, + INounsSeeder.Seed memory seed + ) public view override returns (string memory) { + NFTDescriptor.TokenURIParams memory params = NFTDescriptor.TokenURIParams({ + name: name, + description: description, + parts: _getPartsForSeed(seed), + background: backgrounds[seed.background] + }); + return NFTDescriptor.constructTokenURI(params, palettes); + } + + /** + * @notice Given a seed, construct a base64 encoded SVG image. + */ + function generateSVGImage(INounsSeeder.Seed memory seed) external view override returns (string memory) { + MultiPartRLEToSVG.SVGParams memory params = MultiPartRLEToSVG.SVGParams({ + parts: _getPartsForSeed(seed), + background: backgrounds[seed.background] + }); + return NFTDescriptor.generateSVGImage(params, palettes); + } + + /** + * @notice Add a single color to a color palette. + */ + function _addColorToPalette(uint8 _paletteIndex, string calldata _color) internal { + palettes[_paletteIndex].push(_color); + } + + /** + * @notice Add a Noun background. + */ + function _addBackground(string calldata _background) internal { + backgrounds.push(_background); + } + + /** + * @notice Add a Noun body. + */ + function _addBody(bytes calldata _body) internal { + bodies.push(_body); + } + + /** + * @notice Add a Noun accessory. + */ + function _addAccessory(bytes calldata _accessory) internal { + accessories.push(_accessory); + } + + /** + * @notice Add a Noun head. + */ + function _addHead(bytes calldata _head) internal { + heads.push(_head); + } + + /** + * @notice Add Noun glasses. + */ + function _addGlasses(bytes calldata _glasses) internal { + glasses.push(_glasses); + } + + /** + * @notice Get all Noun parts for the passed `seed`. + */ + function _getPartsForSeed(INounsSeeder.Seed memory seed) internal view returns (bytes[] memory) { + bytes[] memory _parts = new bytes[](4); + _parts[0] = bodies[seed.body]; + _parts[1] = accessories[seed.accessory]; + _parts[2] = heads[seed.head]; + _parts[3] = glasses[seed.glasses]; + return _parts; + } +} \ No newline at end of file diff --git a/contract/contracts/localNouns/LocalNounsDescriptor.sol b/contract/contracts/localNouns/LocalNounsDescriptor.sol index 78cad917..a4903292 100644 --- a/contract/contracts/localNouns/LocalNounsDescriptor.sol +++ b/contract/contracts/localNouns/LocalNounsDescriptor.sol @@ -60,6 +60,12 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { // Noun Glasses (Custom RLE) bytes[] public override glasses; + + // prefectureId => parts index of heads + mapping(uint256 => uint256[]) public prefectureHeads; + + // prefectureId => parts index of accessories + mapping(uint256 => uint256[]) public prefectureAccessories; constructor(INounsDescriptor _descriptor) { descriptor = _descriptor; @@ -94,6 +100,20 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { return accessories.length; } + /** + * @notice Get the number of available Noun `accessories` in the prefecture. + */ + function accessoryCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { + return prefectureAccessories[prefectureId].length; + } + + /** + * @notice Get the number of available Noun `accessories` in the prefecture. + */ + function accessoryInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { + return prefectureAccessories[prefectureId][seqNo]; + } + /** * @notice Get the number of available Noun `heads`. */ @@ -101,6 +121,20 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { return heads.length; } + /** + * @notice Get the number of available Noun `heads` in the prefecture. + */ + function headCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { + return prefectureHeads[prefectureId].length; + } + + /** + * @notice Get the number of available Noun `heads` in the prefecture. + */ + function headInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { + return prefectureHeads[prefectureId][seqNo]; + } + /** * @notice Get the number of available Noun `glasses`. */ @@ -144,9 +178,9 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { * @notice Batch add Noun accessories. * @dev This function can only be called by the owner when not locked. */ - function addManyAccessories(bytes[] calldata _accessories) external override onlyOwner whenPartsNotLocked { + function addManyAccessories(uint256 prefectureId, bytes[] calldata _accessories) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _accessories.length; i++) { - _addAccessory(_accessories[i]); + _addAccessory(prefectureId, _accessories[i]); } } @@ -154,9 +188,9 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { * @notice Batch add Noun heads. * @dev This function can only be called by the owner when not locked. */ - function addManyHeads(bytes[] calldata _heads) external override onlyOwner whenPartsNotLocked { + function addManyHeads(uint256 prefectureId, bytes[] calldata _heads) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _heads.length; i++) { - _addHead(_heads[i]); + _addHead(prefectureId, _heads[i]); } } @@ -199,16 +233,16 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { * @notice Add a Noun accessory. * @dev This function can only be called by the owner when not locked. */ - function addAccessory(bytes calldata _accessory) external override onlyOwner whenPartsNotLocked { - _addAccessory(_accessory); + function addAccessory(uint256 prefectureId, bytes calldata _accessory) external override onlyOwner whenPartsNotLocked { + _addAccessory(prefectureId, _accessory); } /** * @notice Add a Noun head. * @dev This function can only be called by the owner when not locked. */ - function addHead(bytes calldata _head) external override onlyOwner whenPartsNotLocked { - _addHead(_head); + function addHead(uint256 prefectureId, bytes calldata _head) external override onlyOwner whenPartsNotLocked { + _addHead(prefectureId, _head); } /** @@ -325,18 +359,20 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { // nothing // bodies.push(_body); } - + /** - * @notice Add a Noun accessory. - */ - function _addAccessory(bytes calldata _accessory) internal { + * @notice Add a Noun accessory. + */ + function _addAccessory(uint256 prefectureId, bytes calldata _accessory) internal { + prefectureAccessories[prefectureId].push(accessories.length); accessories.push(_accessory); } - + /** - * @notice Add a Noun head. - */ - function _addHead(bytes calldata _head) internal { + * @notice Add a Noun head. + */ + function _addHead(uint256 prefectureId, bytes calldata _head) internal { + prefectureHeads[prefectureId].push(heads.length); heads.push(_head); } diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index abff3c7f..e78f59f7 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -13,35 +13,36 @@ import '@openzeppelin/contracts/interfaces/IERC165.sol'; import { INounsDescriptor } from './interfaces/INounsDescriptor.sol'; import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { ILocalNounsSeeder } from './interfaces/ILocalNounsSeeder.sol'; import { NFTDescriptor } from '../external/nouns/libs/NFTDescriptor.sol'; contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { using Strings for uint256; - string constant providerKey = 'SushiNouns'; + string constant providerKey = 'LocalNouns'; address public receiver; uint256 public nextTokenId; INounsDescriptor public immutable descriptor; - INounsDescriptor public immutable sushidescriptor; + INounsDescriptor public immutable localDescriptor; INounsSeeder public immutable seeder; - INounsSeeder public immutable sushiseeder; + ILocalNounsSeeder public immutable localSeader; mapping(uint256 => INounsSeeder.Seed) public seeds; constructor( INounsDescriptor _descriptor, - INounsDescriptor _sushidescriptor, + INounsDescriptor _localDescriptor, INounsSeeder _seeder, - INounsSeeder _sushiseeder + ILocalNounsSeeder _localSeader ) { receiver = owner(); descriptor = _descriptor; - sushidescriptor = _sushidescriptor; + localDescriptor = _localDescriptor; seeder = _seeder; - sushiseeder = _sushiseeder; + localSeader = _localSeader; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { @@ -70,9 +71,9 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { receiver = _receiver; } - function generateSeed(uint256 _assetId) internal view returns (INounsSeeder.Seed memory mixedSeed) { + function generateSeed(uint256 prefectureId, uint256 _assetId) internal view returns (INounsSeeder.Seed memory mixedSeed) { INounsSeeder.Seed memory seed1 = seeder.generateSeed(_assetId, descriptor); - INounsSeeder.Seed memory seed2 = sushiseeder.generateSeed(_assetId, sushidescriptor); + ILocalNounsSeeder.Seed memory seed2 = localSeader.generateSeed(prefectureId, _assetId, localDescriptor); mixedSeed = INounsSeeder.Seed({ background: seed1.background, @@ -86,7 +87,7 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { function generateSVGPart(uint256 _assetId) public view override returns (string memory svgPart, string memory tag) { // INounsSeeder.Seed memory seed = generateSeed(_assetId); INounsSeeder.Seed memory seed = seeds[_assetId]; - svgPart = sushidescriptor.generateSVGImage(seed); + svgPart = localDescriptor.generateSVGImage(seed); // generateSVGImage tag = string(""); @@ -97,9 +98,9 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { // nothing to return } - function mint(uint256 _assetId) external returns (uint256) { + function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256) { if (nextTokenId == _assetId) { - seeds[_assetId] = generateSeed(_assetId); + seeds[_assetId] = generateSeed(prefectureId, _assetId); nextTokenId ++; } diff --git a/contract/contracts/localNouns/LocalNounsSeeder.sol b/contract/contracts/localNouns/LocalNounsSeeder.sol index 4735210a..5885601f 100644 --- a/contract/contracts/localNouns/LocalNounsSeeder.sol +++ b/contract/contracts/localNouns/LocalNounsSeeder.sol @@ -17,30 +17,29 @@ pragma solidity ^0.8.6; -import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { ILocalNounsSeeder } from './interfaces/ILocalNounsSeeder.sol'; import { INounsDescriptorMinimal } from './interfaces/INounsDescriptorMinimal.sol'; -contract LocalNounsSeeder is INounsSeeder { +contract LocalNounsSeeder is ILocalNounsSeeder { /** * @notice Generate a pseudo-random Noun seed using the previous blockhash and noun ID. */ - function generateSeed(uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory) { + function generateSeed(uint256 prefectureId, uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory) { uint256 pseudorandomness = uint256( keccak256(abi.encodePacked(blockhash(block.number - 1), nounId)) ); - uint256 accessoryCount = descriptor.accessoryCount(); - uint256 headCount = descriptor.headCount(); + uint256 accessoryCount = descriptor.accessoryCountInPrefecture(prefectureId); + uint256 headCount = descriptor.headCountInPrefecture(prefectureId); + + uint256 accesoryPartId = descriptor.accessoryInPrefecture(prefectureId, (pseudorandomness >> 96) % accessoryCount); + uint256 headPartId = descriptor.headInPrefecture(prefectureId, (pseudorandomness >> 144) % headCount); return Seed({ background: 0, body: 0, - accessory: uint48( - uint48(pseudorandomness >> 96) % accessoryCount - ), - head: uint48( - uint48(pseudorandomness >> 144) % headCount - ), + accessory: uint48(accesoryPartId), + head: uint48(headPartId), glasses: 0 }); } diff --git a/contract/contracts/localNouns/README.md b/contract/contracts/localNouns/README.md index 025c91dd..6b7992ae 100644 --- a/contract/contracts/localNouns/README.md +++ b/contract/contracts/localNouns/README.md @@ -4,19 +4,17 @@ - bodyとglassはNounsTokenのデータを参照してそのまま使う - headとaccessoryはstorageへ書き込む +-- headとaccessoryは、都道府県ごとのパーツを組み合わせる ## Contractの構成 -- SushiNounsToken -> SushiNounsProvider -> SushiNounsDescriptor(NounsDescriptorを中で参照) -- MixedSeeder(NounsSeeder, SushiNounsSeederをmixしたseeder) - -- データ等を重複しない構成をしている - - paletteが型問題で参照できないのでSushiNounsDescriptorにデータとして入れる -- backgroundsの画像化は試したがデータ量が多いのでgas代問題でng - - SushiNounsDescriptorのpartsを5個にし、NFTDescriptorを改良すればできる -- mint時にseedはproviderで管理する - - seederの受け渡しに問題でtokenで管理していない +- LocalNounsToken -> LocalNounsProvider -> LocalNounsDescriptor(NounsDescriptorを中で参照) +- NounsのパーツはNounsSeeder, LocalNounsのパーツはLocalNounsSeederで採番する ## deploy & test - - test/sushi.ts にテストがある - - これを参照すればdeployもつくれる。 + - scripts/deploy_localNouns.ts → デプロイ + - scripts/populate_localNouns.ts → パーツ画像の登録、テストミント + - nouns daoのcontracのデータを参照するので、mainnet forkingで動かす必要がある + -- パーツはNounsDescriptorV1で作成されたものを使用している + -- scripts/deploy_nounsDescriptorV1.ts → デプロイ + -- scripts/populate_nounsV1.ts → パーツ画像の登録 \ No newline at end of file diff --git a/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol b/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol index 88369dbb..d1ed179d 100644 --- a/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol +++ b/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol @@ -5,5 +5,5 @@ pragma solidity ^0.8.6; import 'assetprovider.sol/IAssetProvider.sol'; interface IAssetProviderExMint is IAssetProvider { - function mint(uint256 _assetId) external returns (uint256); + function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256); } diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsSeeder.sol b/contract/contracts/localNouns/interfaces/ILocalNounsSeeder.sol new file mode 100644 index 00000000..83c03590 --- /dev/null +++ b/contract/contracts/localNouns/interfaces/ILocalNounsSeeder.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsSeeder + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsDescriptorMinimal } from './INounsDescriptorMinimal.sol'; + +interface ILocalNounsSeeder { + struct Seed { + uint48 background; + uint48 body; + uint48 accessory; + uint48 head; + uint48 glasses; + } + + function generateSeed(uint256 prefectureId, uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory); +} \ No newline at end of file diff --git a/contract/contracts/localNouns/interfaces/INounsDescriptor.sol b/contract/contracts/localNouns/interfaces/INounsDescriptor.sol index 6c676f6a..20924c35 100644 --- a/contract/contracts/localNouns/interfaces/INounsDescriptor.sol +++ b/contract/contracts/localNouns/interfaces/INounsDescriptor.sol @@ -51,8 +51,12 @@ interface INounsDescriptor is INounsDescriptorMinimal { function accessoryCount() external view override returns (uint256); + function accessoryCountInPrefecture(uint256 prefectureId) external view returns (uint256); + function headCount() external view override returns (uint256); + function headCountInPrefecture(uint256 prefectureId) external view returns (uint256); + function glassesCount() external view override returns (uint256); function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external; @@ -61,9 +65,9 @@ interface INounsDescriptor is INounsDescriptorMinimal { function addManyBodies(bytes[] calldata bodies) external; - function addManyAccessories(bytes[] calldata accessories) external; + function addManyAccessories(uint256 prefectureId, bytes[] calldata accessories) external; - function addManyHeads(bytes[] calldata heads) external; + function addManyHeads(uint256 prefectureId, bytes[] calldata heads) external; function addManyGlasses(bytes[] calldata glasses) external; @@ -73,9 +77,9 @@ interface INounsDescriptor is INounsDescriptorMinimal { function addBody(bytes calldata body) external; - function addAccessory(bytes calldata accessory) external; + function addAccessory(uint256 prefectureId, bytes calldata accessory) external; - function addHead(bytes calldata head) external; + function addHead(uint256 prefectureId, bytes calldata head) external; function addGlasses(bytes calldata glasses) external; diff --git a/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol b/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol index c49d4c86..d4b52942 100644 --- a/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol +++ b/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol @@ -38,7 +38,15 @@ interface INounsDescriptorMinimal { function accessoryCount() external view returns (uint256); + function accessoryCountInPrefecture(uint256 prefectureId) external view returns (uint256); + + function accessoryInPrefecture(uint256 prefectureId, uint256 seqNo) external view returns (uint256); + function headCount() external view returns (uint256); + function headCountInPrefecture(uint256 prefectureId) external view returns (uint256); + + function headInPrefecture(uint256 prefectureId, uint256 seqNo) external view returns (uint256); + function glassesCount() external view returns (uint256); } diff --git a/contract/hardhat.config.ts b/contract/hardhat.config.ts index 046d2ad1..f1ebb4b3 100644 --- a/contract/hardhat.config.ts +++ b/contract/hardhat.config.ts @@ -16,7 +16,8 @@ const config: HardhatUserConfig = { defaultNetwork: "localhost", networks: { mumbai: { - url: "https://rpc-mumbai.maticvigil.com", + // url: "https://rpc-mumbai.maticvigil.com", + url: "https://polygon-mumbai.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY, accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], }, @@ -42,16 +43,16 @@ const config: HardhatUserConfig = { // https://stackoverflow.com/questions/73618935/hardhat-verification-for-polygon-mumbai-fails etherscan: { apiKey: process.env.ETHERSCAN_API_KEY, - customChains: [ - { - network: "mumbai", - chainId: 80001, - urls: { - apiURL: "https://api-testnet.polygonscan.com", - browserURL: "https://mumbai.polygonscan.com" - } - } - ] + // customChains: [ + // { + // network: "mumbai", + // chainId: 80001, + // urls: { + // apiURL: "https://api-testnet.polygonscan.com", + // browserURL: "https://mumbai.polygonscan.com" + // } + // } + // ] }, }; diff --git a/contract/package-lock.json b/contract/package-lock.json index c539eb94..44d2ccf2 100644 --- a/contract/package-lock.json +++ b/contract/package-lock.json @@ -19,11 +19,12 @@ "dotenv": "^16.0.3", "fast-xml-parser": "^4.0.11", "fully-on-chain.sol": "^1.1.0", - "hardhat": "^2.14.0", + "hardhat": "^2.15.0", "prettier-plugin-solidity": "^1.0.0", "randomizer.sol": "^1.0.0", "trigonometry.sol": "^1.0.0", - "ts-node": "^10.9.1" + "ts-node": "^10.9.1", + "typescript": "^5.1.3" } }, "node_modules/@chainsafe/as-sha256": { @@ -4568,9 +4569,9 @@ } }, "node_modules/hardhat": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", - "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.15.0.tgz", + "integrity": "sha512-cC9tM/N10YaES04zPOp7yR13iX3YibqaNmi0//Ep40Nt9ELIJx3kFpQmucur0PAIfXYpGnw5RuXHNLkxpnVHEw==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", @@ -8659,17 +8660,16 @@ "peer": true }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/typical": { @@ -12587,9 +12587,9 @@ } }, "hardhat": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", - "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.15.0.tgz", + "integrity": "sha512-cC9tM/N10YaES04zPOp7yR13iX3YibqaNmi0//Ep40Nt9ELIJx3kFpQmucur0PAIfXYpGnw5RuXHNLkxpnVHEw==", "dev": true, "requires": { "@ethersproject/abi": "^5.1.2", @@ -15709,11 +15709,10 @@ "peer": true }, "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, - "peer": true + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true }, "typical": { "version": "4.0.0", diff --git a/contract/package.json b/contract/package.json index d986d20d..6a62d509 100644 --- a/contract/package.json +++ b/contract/package.json @@ -14,11 +14,12 @@ "dotenv": "^16.0.3", "fast-xml-parser": "^4.0.11", "fully-on-chain.sol": "^1.1.0", - "hardhat": "^2.14.0", + "hardhat": "^2.15.0", "prettier-plugin-solidity": "^1.0.0", "randomizer.sol": "^1.0.0", "trigonometry.sol": "^1.0.0", - "ts-node": "^10.9.1" + "ts-node": "^10.9.1", + "typescript": "^5.1.3" }, "dependencies": { "base64-sol": "^1.1.0" diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts new file mode 100644 index 00000000..811ad549 --- /dev/null +++ b/contract/scripts/deploy_localNouns.ts @@ -0,0 +1,75 @@ +import { ethers, network } from 'hardhat'; +import { exec } from 'child_process'; +import addresses from '@nouns/sdk/dist/contract/addresses.json'; + +// const nounsDescriptor: string = network.name == 'goerli' ? addresses[5].nounsDescriptor : addresses[1].nounsDescriptor; +// const nounsSeeder: string = network.name == 'goerli' ? addresses[5].nounsSeeder : addresses[1].nounsSeeder; +// const nftDescriptor: string = network.name == 'goerli' ? addresses[5].nftDescriptor : addresses[1].nftDescriptor; + +const nounsDescriptor: string = '0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107'; // mumbai +const nounsSeeder: string = '0x5f5C984E0BAf150D5a74ae21f4777Fd1947DE8c9'; // mumbai +const nftDescriptor: string = '0xC93218fF7C44cbEB57c7661DCa886deCBc0E07C0'; // mumbai + +// const nounsDescriptor: string = '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0'; // localhost +// const nounsSeeder: string = '0x5FC8d32690cc91D4c39d9d3abcBD16989F875707'; // localhost +// const nftDescriptor: string = '0x5FbDB2315678afecb367f032d93F642f64180aa3'; // localhost + +const committee = "0x52A76a606AC925f7113B4CC8605Fe6bCad431EbB"; +// const committee = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"; // localhost + +async function main() { + + const factorySeeder = await ethers.getContractFactory('LocalNounsSeeder'); + const localseeder = await factorySeeder.deploy(); + await localseeder.deployed(); + console.log(`##localseeder="${localseeder.address}"`); + await runCommand(`npx hardhat verify ${localseeder.address} --network ${network.name} &`); + + const factoryLocalNounsDescriptor = await ethers.getContractFactory('LocalNounsDescriptor', { + libraries: { + NFTDescriptor: nftDescriptor, + } + }); + const localNounsDescriptor = await factoryLocalNounsDescriptor.deploy( + nounsDescriptor + ); + await localNounsDescriptor.deployed(); + console.log(`##localNounsDescriptor="${localNounsDescriptor.address}"`); + await runCommand(`npx hardhat verify ${localNounsDescriptor.address} ${nounsDescriptor} --network ${network.name} &`); + + const factorySVGStore = await ethers.getContractFactory('LocalNounsProvider'); + const provider = await factorySVGStore.deploy(nounsDescriptor, localNounsDescriptor.address, nounsSeeder, localseeder.address); + await provider.deployed(); + console.log(`##LocalNounsProvider="${provider.address}"`); + await runCommand(`npx hardhat verify ${provider.address} ${nounsDescriptor} ${localNounsDescriptor.address} ${nounsSeeder} ${localseeder.address} --network ${network.name} &`); + + const factoryToken = await ethers.getContractFactory('LocalNounsToken'); + const token = await factoryToken.deploy(provider.address, committee, committee, committee); + await token.deployed(); + console.log(`##LocalNounsToken="${token.address}"`); + await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${committee} ${committee} ${committee} --network ${network.name} &`); + +} + +async function runCommand(command: string) { + if (network.name !== 'localhost') { + console.log(command); + } + // なぜかコマンドが終了しないので手動で実行 + // await exec(command, (error, stdout, stderr) => { + // if (error) { + // console.log(`error: ${error.message}`); + // return; + // } + // if (stderr) { + // console.log(`stderr: ${stderr}`); + // return; + // } + // console.log(`stdout: ${stdout}`); + // }); +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/contract/scripts/deploy_nounsDescriptorV1.ts b/contract/scripts/deploy_nounsDescriptorV1.ts new file mode 100644 index 00000000..9836f38e --- /dev/null +++ b/contract/scripts/deploy_nounsDescriptorV1.ts @@ -0,0 +1,52 @@ +import { ethers, network } from 'hardhat'; +import { exec } from 'child_process'; +import addresses from '@nouns/sdk/dist/contract/addresses.json'; + +// const nftDescriptor: string = network.name == 'goerli' ? addresses[5].nftDescriptor : addresses[1].nftDescriptor; +// const nftDescriptor: string = '0x1881c541E9d83880008B3720de0E537C34052ecf'; // mumbai +// const nftDescriptor: string = '0x5FbDB2315678afecb367f032d93F642f64180aa3'; // localhost + + +async function main() { + + const factoryNFTDescriptor = await ethers.getContractFactory('NFTDescriptor'); + const nftDescriptor = await factoryNFTDescriptor.deploy(); + await nftDescriptor.deployed(); + console.log(`##nftDescriptor="${nftDescriptor.address}"`); + await runCommand(`npx hardhat verify ${nftDescriptor.address} --network ${network.name} &`); + + + const factoryNounsDescriptor = await ethers.getContractFactory('NounsDescriptor', { + libraries: { + NFTDescriptor: nftDescriptor.address, + } + }); + const nounsDescriptor = await factoryNounsDescriptor.deploy(); + await nounsDescriptor.deployed(); + console.log(`##nounsDescriptor="${nounsDescriptor.address}"`); + await runCommand(`npx hardhat verify ${nounsDescriptor.address} --network ${network.name} &`); + +} + +async function runCommand(command: string) { + if (network.name !== 'localhost') { + console.log(command); + } + // なぜかコマンドが終了しないので手動で実行 + // await exec(command, (error, stdout, stderr) => { + // if (error) { + // console.log(`error: ${error.message}`); + // return; + // } + // if (stderr) { + // console.log(`stderr: ${stderr}`); + // return; + // } + // console.log(`stdout: ${stdout}`); + // }); +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts new file mode 100644 index 00000000..40d853fa --- /dev/null +++ b/contract/scripts/populate_localNouns.ts @@ -0,0 +1,107 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import * as fs from 'fs'; + +import { images, palette } from "../test/image-local-data"; +import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; +import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; + +dotenv.config(); + +const localSeederAddress: string = '0xD00fa9C531CEE42ba319B5Bda19c60e54BEddA41'; +const localNounsDescriptorAddress: string = '0xA4D4793f2fFafb1E7278C80565FA7252Ef146623'; +const localProviderAddress: string = '0xDC00D91b1FE2bc91C241Ae1E03b30F867789E83e'; +const localTokenAddress: string = '0x4958bb35e1aEA77133E46f042d0b5d373141E759'; + +async function main() { + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + const wallet = new ethers.Wallet(privateKey, ethers.provider); + // const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); + const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); + const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + + if (true) { + // set Palette + console.log(`set Palette start`); + await localNounsDescriptor.addManyColorsToPalette(0, palette); + console.log(`set Palette end`); + + // set Accessories + console.log(`set Accessories start`); + const accessoryChunk = chunkArrayByPrefectureId(images.accessories); + for (const chunk of accessoryChunk) { + const prefectureId = chunk[0].filename.split('-')[0]; + await localNounsDescriptor.addManyAccessories(prefectureId, chunk.map(({ data }) => data)); + // console.log("chunk:", prefectureId, chunk); + } + console.log(`set Accessories end`); + + // set Heads + console.log(`set Heads start`); + const headChunk = chunkArrayByPrefectureId(images.heads); + for (const chunk of headChunk) { + const prefectureId = chunk[0].filename.split('-')[0]; + await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data)); + // console.log("chunk:", prefectureId, chunk); + } + console.log(`set Heads end`); + + } + + for (var i: number = 1; i <= 47; i++) { + try { + await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); + await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); + await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); + console.log(`mint [`, i, `]`); + } catch (error) { + console.error(error); + }; + } + + // console.log(`write file start`); + // const index = 0; + // const ret = await localToken.tokenURI(index); + // const json = Buffer.from(ret.split(",")[1], 'base64').toString(); + // const svgB = Buffer.from(JSON.parse(json)["image"].split(",")[1], 'base64').toString(); + // const svg = Buffer.from(svgB, 'base64').toString(); + // // fs.writeFileSync(`./svg/${index}.svg`, svg, { encoding: 'utf8' }); + // console.log(`write file end`); + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + +interface ImageData { + filename: string; + data: string; +} + +function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { + let map = new Map(); + + for (let i = 0; i < imagedata.length; i++) { + // dataが空っぽはスキップ + if (imagedata[i].data === undefined) { + console.error("not define data:", imagedata[i].filename); + continue; + } + + let id = imagedata[i].filename.split('-')[0]; + + if (!map.has(id)) { + map.set(id, []); + } + map.get(id)!.push(imagedata[i]); + } + return Array.from(map.values()); +} \ No newline at end of file diff --git a/contract/scripts/populate_nounsV1.ts b/contract/scripts/populate_nounsV1.ts new file mode 100644 index 00000000..6b0825eb --- /dev/null +++ b/contract/scripts/populate_nounsV1.ts @@ -0,0 +1,81 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; + +import { images, palette, bgcolors } from "../test/image-original-nouns-data"; +// import { abi as nounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as nounsDescriptorABI } from "../artifacts/contracts/external/nouns/NounsDescripter.sol/NounsDescriptor"; + +dotenv.config(); + +const nounsDescriptorAddress: string = '0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107'; + +async function main() { + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + const wallet = new ethers.Wallet(privateKey, ethers.provider); + // const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const nounsDescriptor = new ethers.Contract(nounsDescriptorAddress, nounsDescriptorABI, wallet); + + if (true) { + + console.log(`set Palette start`); + await nounsDescriptor.addManyColorsToPalette(0, palette); + console.log(`set Palette end`); + + console.log(`set Accessories start`); + const accessoryChunk = chunkArray(images.accessories, 10); + for (const chunk of accessoryChunk) { + await nounsDescriptor.addManyAccessories(chunk.map(({ data }) => data)); + } + console.log(`set Accessories end`); + + console.log(`set Bodies start`); + const bodiesChunk = chunkArray(images.bodies, 10); + for (const chunk of bodiesChunk) { + await nounsDescriptor.addManyBodies(chunk.map(({ data }) => data)); + } + console.log(`set Bodies end`); + + console.log(`set heads start`); + const headChunk = chunkArray(images.heads, 10); + for (const chunk of headChunk) { + await nounsDescriptor.addManyHeads(chunk.map(({ data }) => data)); + } + console.log(`set heads end`); + + console.log(`set glasses start`); + const glassesChunk = chunkArray(images.glasses, 10); + for (const chunk of glassesChunk) { + await nounsDescriptor.addManyGlasses(chunk.map(({ data }) => data)); + } + console.log(`set glasses end`); + + console.log(`set backgrounds start`); + await nounsDescriptor.addManyBackgrounds(bgcolors); + console.log(`set backgrounds end`); + + } + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + + +interface ImageData { + filename: string; + data: string; +} + +function chunkArray(imagedata: ImageData[], size: number): ImageData[][] { + + const chunk: ImageData[][] = []; + for (let i = 0; i < imagedata.length; i += size) { + chunk.push(imagedata.slice(i, i + size)); + } + + return chunk; +} \ No newline at end of file diff --git a/contract/test/image-local-data.json b/contract/test/image-local-data.json new file mode 100644 index 00000000..100d84ea --- /dev/null +++ b/contract/test/image-local-data.json @@ -0,0 +1,1447 @@ +{ + "bgcolors": [ + "d5d7e1", + "e1d7d5" + ], + "palette": [ + "", + "ffffff", + "c5b9a1", + "cfc2ab", + "63a0f9", + "807f7e", + "caeff9", + "5648ed", + "5a423f", + "b9185c", + "b87b11", + "fffdf2", + "4b4949", + "343235", + "1f1d29", + "068940", + "867c1d", + "ae3208", + "9f21a0", + "f98f30", + "fe500c", + "d26451", + "fd8b5b", + "5a65fa", + "d22209", + "e9265c", + "c54e38", + "80a72d", + "4bea69", + "34ac80", + "eed811", + "62616d", + "ff638d", + "8bc0c5", + "c4da53", + "000000", + "f3322c", + "ffae1a", + "ffc110", + "505a5c", + "ffef16", + "fff671", + "fff449", + "db8323", + "df2c39", + "f938d8", + "5c25fb", + "2a86fd", + "45faff", + "38dd56", + "ff3a0e", + "d32a09", + "903707", + "6e3206", + "552e05", + "e8705b", + "f38b7c", + "e4a499", + "667af9", + "648df9", + "7cc4f2", + "97f2fb", + "a3efd0", + "87e4d9", + "71bde4", + "ff1a0b", + "f78a18", + "2b83f6", + "d62149", + "834398", + "ffc925", + "d9391f", + "bd2d24", + "ff7216", + "254efb", + "e5e5de", + "00a556", + "c5030e", + "abf131", + "fb4694", + "e7a32c", + "fff0ee", + "009c59", + "0385eb", + "00499c", + "e11833", + "26b1f3", + "fff0be", + "d8dadf", + "d7d3cd", + "1929f4", + "eab118", + "0b5027", + "f9f5cb", + "cfc9b8", + "feb9d5", + "f8d689", + "5d6061", + "76858b", + "757576", + "ff0e0e", + "0adc4d", + "fdf8ff", + "70e890", + "f7913d", + "ff1ad2", + "ff82ad", + "535a15", + "fa6fe2", + "ffe939", + "ab36be", + "adc8cc", + "604666", + "f20422", + "abaaa8", + "4b65f7", + "a19c9a", + "58565c", + "da42cb", + "027c92", + "cec189", + "909b0e", + "74580d", + "027ee6", + "b2958d", + "efad81", + "7d635e", + "eff2fa", + "6f597a", + "d4b7b2", + "d18687", + "cd916d", + "6b3f39", + "4d271b", + "85634f", + "f9f4e6", + "f8ddb0", + "b92b3c", + "d08b11", + "257ced", + "a3baed", + "5fd4fb", + "c16710", + "a28ef4", + "3a085b", + "67b1e3", + "1e3445", + "ffd067", + "962236", + "769ca9", + "5a6b7b", + "7e5243", + "a86f60", + "8f785e", + "cc0595", + "42ffb0", + "d56333", + "b8ced2", + "b91b43", + "f39713", + "e8e8e2", + "ec5b43", + "235476", + "b2a8a5", + "d6c3be", + "49b38b", + "fccf25", + "f59b34", + "375dfc", + "99e6de", + "27a463", + "554543", + "b19e00", + "d4a015", + "9f4b27", + "f9e8dd", + "6b7212", + "9d8e6e", + "4243f8", + "fa5e20", + "f82905", + "555353", + "876f69", + "410d66", + "552d1d", + "f71248", + "fee3f3", + "c16923", + "2b2834", + "0079fc", + "d31e14", + "f83001", + "8dd122", + "fffdf4", + "ffa21e", + "e4afa3", + "fbc311", + "aa940c", + "eedc00", + "fff006", + "9cb4b8", + "a38654", + "ae6c0a", + "2bb26b", + "e2c8c0", + "f89865", + "f86100", + "dcd8d3", + "049d43", + "d0aea9", + "f39d44", + "eeb78c", + "f9f5e9", + "5d3500", + "c3a199", + "aaa6a4", + "caa26a", + "fde7f5", + "fdf008", + "fdcef2", + "f681e6", + "018146", + "d19a54", + "9eb5e1", + "f5fcff", + "3f9323", + "00fcff", + "4a5358", + "fbc800", + "d596a6", + "ffb913", + "e9ba12", + "767c0e", + "f9f6d1", + "d29607", + "f8ce47", + "395ed1", + "ffc5f0", + "cbc1bc", + "d4cfc0", + "fe6612", + "fe6412", + "fe6b14", + "fff5cb", + "544e4a", + "01499c", + "1f3445", + "282728", + "d3ad78", + "f9e1ba", + "d5d7e1" + ], + "images": { + "glasses": [ + { + "filename": "glasses-hip-rose", + "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" + }, + { + "filename": "glasses-square-black-eyes-red", + "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" + }, + { + "filename": "glasses-square-black-rgb", + "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-black", + "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" + }, + { + "filename": "glasses-square-blue-med-saturated", + "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" + }, + { + "filename": "glasses-square-blue", + "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" + }, + { + "filename": "glasses-square-frog-green", + "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" + }, + { + "filename": "glasses-square-fullblack", + "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-green-blue-multi", + "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" + }, + { + "filename": "glasses-square-grey-light", + "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" + }, + { + "filename": "glasses-square-guava", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-honey", + "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" + }, + { + "filename": "glasses-square-magenta", + "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" + }, + { + "filename": "glasses-square-orange", + "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" + }, + { + "filename": "glasses-square-pink-purple-multi", + "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" + }, + { + "filename": "glasses-square-red", + "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" + }, + { + "filename": "glasses-square-smoke", + "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" + }, + { + "filename": "glasses-square-teal", + "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" + }, + { + "filename": "glasses-square-watermelon", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-yellow-orange-multi", + "data": "0x000b17100703000626010006130300012602010223012601000113020102230113034201260201022301260142011302010223011301260200012602010223012601000113020102230113012602000126020102230126010001130201022301130300062601000613" + }, + { + "filename": "glasses-square-yellow-saturated", + "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" + } + ], + "accessories": [ + { + "filename": "01-hokkaido-crab", + "data": "0x0019161c0d0113010001130100011301000113010001130100011301000108011301080100011301000200051302000100011301000313010001130100" + }, + { + "filename": "01-hokkaido-melon", + "data": "0x0018131a0e014203000142012203420122010003220100" + }, + { + "filename": "01-hokkaido-sheep", + "data": "0x0018141d0e020001c1010e020003c10300010e0100010e0300040001c1010e020003c101000200010e0100010e0100" + }, + { + "filename": "02-aomori-jade", + "data": "0x0015141e090400010205000102050001020300010201000500017f0102011c01020101010004000101010001dd0102019b0100017f0700015203000b000b000b000b0002010900" + }, + { + "filename": "02-aomori-squid", + "data": "0x0018151d0f0300010802000100010102080101010002000208020001010100010801330200010001010123013301000101010101000101010001010100" + }, + { + "filename": "03-iwate-egg", + "data": "0x0018141b100100020101000101021e01010101021e0101010002010100" + }, + { + "filename": "03-iwate-fujiwara", + "data": "0x0017141c0f0100012303000200012302000200015d02000100026701cd0100046701310101013101670201" + }, + { + "filename": "04-miyagi-matsushima", + "data": "0x0016171f0c0600022901010100010104000301012903000b000b00025c0100025c01000129010003a205b106000300015c0100015c01290100025c0100030004b1010002b1010001a20a00020002a2010002290400" + }, + { + "filename": "04-miyagi-zunda", + "data": "0x0019131b10024e0100034e014e0101014e" + }, + { + "filename": "05-akita-fireworks", + "data": "0x0015171f0c060001c7010001c70200030001c101c7020001c1010001c10100050001c7010001c7020001c7020001c101c7050001c70100040001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c703000100014a010001c1010001c7020001c702000400014a010001c1020001c101000300014a0100014a05000400014a0600" + }, + { + "filename": "05-akita-hatahata", + "data": "0x0018141b0e011005000100015d021001230110011001000101025d01010300015d0200" + }, + { + "filename": "05-akita-raspberry", + "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e02b906b9020002b90200" + }, + { + "filename": "06-yamagata-lafrance", + "data": "0x0019131c10010001840100010001840122022201c601de0222" + }, + { + "filename": "06-yamagata-shogi", + "data": "0x0018131b10010001230100010002230123020001000223" + }, + { + "filename": "07-fukushima-akabeko", + "data": "0x0019141b0f01230133010101230100013301230133010101330133010001330200" + }, + { + "filename": "07-fukushima-train", + "data": "0x0018131b0f015802570158010e0285010e0485016a0258016a" + }, + { + "filename": "08-ibaraki-bellpepper", + "data": "0x0018121b0f01dd01e101dd01dd010f01dd01dd010f01dd0100010f0100" + }, + { + "filename": "08-ibaraki-natto", + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + }, + { + "filename": "08-ibaraki-rokkakudo", + "data": "0x0017171f09070001860400029107000186060004000161050001860300010001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d408000a0002910200050002910700" + }, + { + "filename": "09-tochigi-gyoza", + "data": "0x0018141b0e0100013401000134010001340134012501340125013401250188022501880225010001340100013401000134" + }, + { + "filename": "09-tochigi-lemon", + "data": "0x0018131c100152020103c701c7015201c7010101c701010352" + }, + { + "filename": "09-tochigi-shimotsukare", + "data": "0x0019131b0f016001930150014901500187019301600193014901ce0187" + }, + { + "filename": "10-gunma-akagiyama", + "data": "0x0019171b0c0100014901bf020002bf020001bf014901bf0149011b014901460149011b014901bf011b01460b06" + }, + { + "filename": "10-gunma-yakimanjyu", + "data": "0x0017161e0e04000236011101220300023401230101010003000136011101340136010002000134011101230101020001000134013601340101013602000100011101340123013403000100012201360134040001220700" + }, + { + "filename": "11-saitama-icicle", + "data": "0x0015171c090e0104000101010001010100010101000101010001010100040001e0010001010100010101000101010001010100060001010100010101000101010001e0010006000101010001e001000101030006000101030001e00300060001e0030001e00300060001e00700" + }, + { + "filename": "11-saitama-soka-senbei", + "data": "0x0018131b0f0100016001e6010002e601110160011103e60100011101e60100" + }, + { + "filename": "12-chiba-inubosaki", + "data": "0x0018171f0d0128010001280100042802000700010102000700010102000600040f04000154010104b105000254010102b103000354010102b101000354010103b10300" + }, + { + "filename": "12-chiba-peanuts", + "data": "0x0018131b100100016001d8010002600260010001d801600100" + }, + { + "filename": "13-tokyo-tower", + "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" + }, + { + "filename": "13-tokyo-yamanote", + "data": "0x0018141c0f010001c0010101c00100010103bc010101c003bc01c00101010001bc01000101010001c0010101c00100" + }, + { + "filename": "14-ibaraki-natto", + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + }, + { + "filename": "14-kanagawa-baybridge", + "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010001a201a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" + }, + { + "filename": "14-kanagawa-yacht", + "data": "0x0018141c100100015402000254014301000254024302000243037f0100" + }, + { + "filename": "15-nigata-edamame", + "data": "0x0019141b0e0200014e0200014e0100014e01c00100014e01c0011e01c00100011e01c00100" + }, + { + "filename": "15-niigata-riceear", + "data": "0x0018131d0f02000128010001000128020001c001280100012801c001000128010002c0020002c00200" + }, + { + "filename": "16-toyama-kutabe", + "data": "0x00031a17010d00060e06000b000a0e04000400010e04000e0e02000300010e04000f0e02000300020e0300100e01000300030e0200050e0501060e01000400070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e0401030e0a0e0701010e0401030e0a0e0501020e0501030e0a0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e01000500010e1300" + }, + { + "filename": "16-toyama-shiroebi", + "data": "0x0018131a0e0400010e010002ba010e01ba01ba0400" + }, + { + "filename": "16-toyama-tateyama", + "data": "0x0019171c090100017f020001a2017f0300027f01a20100017f027f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" + }, + { + "filename": "17-ishikawa-kotoji", + "data": "0x0018131c0e02000172020001000372010002000158020001000158010001580100015803000158" + }, + { + "filename": "17-ishikawa-kutani-kaga-gosai", + "data": "0x0018121a0f0118010f01c401a201e0018001c4010f0118" + }, + { + "filename": "17-ishikawa-oyster", + "data": "0x0017151c0e030001a0026b01a002000301016b01a0010001a0040101a001000401015d010001a00201015d01990200019901c301990400" + }, + { + "filename": "18-fukui-echizen-crab", + "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b80414020001000114010001b80214010001b80100" + }, + { + "filename": "18-fukui-yokan", + "data": "0x0018131b0e02000385020003850200038502570385" + }, + { + "filename": "19-yamanashi-fuji", + "data": "0x0017171e0c0600020b03000500020b01eb010b0200030007eb01000beb0b58010007580300020001e0015802e00500030002e0030002a90100" + }, + { + "filename": "19-yamanashi-grape", + "data": "0x0018121b0e0200019a01220100019a0112019a019a0112016e01120112016e01450100" + }, + { + "filename": "20-nagano-kappa", + "data": "0x0018131a0e020f0201010f0100013e0123013e01000100023e022a" + }, + { + "filename": "20-nagano-oyaki", + "data": "0x0018121b0e01b0011b02000157011b01b0011b0157028a0157010002570100" + }, + { + "filename": "21-gifu-gero", + "data": "0x0018141c0e020001010100010101000100010101000101020001c8013d0101013d010101c801c8043d01c8010004c80100" + }, + { + "filename": "21-gifu-gohei-mochi", + "data": "0x0019141b0d020004110100020101600111011a0111010102000260021a0100" + }, + { + "filename": "21-gifu-sarubobo", + "data": "0x0018131d0f010002230100012302440123017102440171010002230100010002230100017102000171" + }, + { + "filename": "21-gifu-ukaibody", + "data": "0x0015171f090592075402920592075402920592075402920592075402920292010002920754029202920100029207540292029201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" + }, + { + "filename": "22-shizuoka-fuji", + "data": "0x0017171d0c090002e0020003e0020001010300060002320101020003e0020005320100040001e10632020001dd04e1043204dd07e1" + }, + { + "filename": "23-aichi-oguratoast", + "data": "0x0018131c0e0293028401930193028401b80193019301b8028401930193018401b8018401930593" + }, + { + "filename": "23-aichi-tebasaki", + "data": "0x0017131a0e010001480300014804000548010003480100" + }, + { + "filename": "24-mie-iseebi", + "data": "0x0017151e0d02000132020001320200010001320100023201000132010001000132010002320100013201000132021802320218013201320100011802b40118010001320100011801000232010001180100030002b40300020001180132011801320200" + }, + { + "filename": "24-mie_mochi", + "data": "0x0019121a0f018401b80184018401b80184" + }, + { + "filename": "25-shiga-funazushi", + "data": "0x0018151a0e01420100013701000137020001420100014201000137010001370142010001420100014201000142" + }, + { + "filename": "25-shiga_hieizan", + "data": "0x0018171b090700020f05000500070f0200020f01000b0f028d01000b8d" + }, + { + "filename": "26-kyoto-daimonji", + "data": "0x0017161d0d0300011405000200011401490114040003140149031402000749020002000114014901140400021401490100014904140249030003490100" + }, + { + "filename": "26-kyoto-yatsuhashi", + "data": "0x0018131a0e02000157020001000157018601570100015702860257" + }, + { + "filename": "27-osaka-cheesecake", + "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b015707570100015701b7015701b701570100" + }, + { + "filename": "27-osaka-jinbezame", + "data": "0x0018161c0d010001a2020001a20400010601a2010002a20400020001a2010602a20106020002a2012302a20106012302a202000206025f01060200" + }, + { + "filename": "28-hyogo-akashiyaki", + "data": "0x0019141b0f02000260010001000160015d016001ae015d016002ae0160" + }, + { + "filename": "28-hyogo-tower-museum", + "data": "0x0017171e0c020001010800020001490200013f0500020001c20200026f0100013e0200020001490100013e016f023e0300020001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" + }, + { + "filename": "29-nara-kakinohasushi", + "data": "0x0019141c0f010001c0011b01c0011b0100011b02c0011b019501a2019501a2010002cc019701cc0100" + }, + { + "filename": "29-nara-narazuke", + "data": "0x0019121a0f03b801b8010001b8" + }, + { + "filename": "30-wakayama-mikan-kaki", + "data": "0x0018121a0f03c201c201e101c203c2" + }, + { + "filename": "30-wakayama-nankoume", + "data": "0x001a151b0d024e010002a60100029c024e010002a60100029c" + }, + { + "filename": "33-oakayama-mamakari", + "data": "0x0019151b0e01a2019d01a2019d01a201000157019d01a2019d01a2019d01060100050601000157" + }, + { + "filename": "33-okauama-muscat", + "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" + }, + { + "filename": "33-okayama-denim-jacket01", + "data": "0x0015171f090354049201000492025404540392010103920354055401920354019204540e540754010106540a54019201010192015402540100075403920154025401000454010102540392015402540100085401920254025401000b5402540100045401010654" + }, + { + "filename": "33-okayama-denim-jacket02", + "data": "0x0015171f0903540392040003920154045402920400029202540554019204000192035406540400045405540101040004540654040001540192010101920254010003540400015403920254010002540101040001540392025401000354040002540192015402540100035404000454025401000254010104000454" + }, + { + "filename": "33-okayama-denim-jacket03", + "data": "0x0015171f09035302540700025403530254070002540453025405000254015306530500035306530500010102530653050003530253010003530500010102530253010003530500035302530c0002530c0002530c00" + }, + { + "filename": "33-okayama-kibidango", + "data": "0x0018131b0f010002570100015703eb04eb010002eb0100" + }, + { + "filename": "33-okayama-momotaro", + "data": "0x00021914050200020c10000100030c1000040c1000030c0201040c0500040c020003000101060c0374060c010002000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c010012570100010012570100010012570100020001741057010003000557040c0757010003001057010004000e570200" + }, + { + "filename": "33-okayama-peach02", + "data": "0x0018151c0e0300015f03000200035f02000100055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" + }, + { + "filename": "33-okayama-retainer", + "data": "0x0015171f09054d010105040101024d054d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" + }, + { + "filename": "34-hiroshima-battleship", + "data": "0x0019171f09060001d70700030001d7010002d7070001d7020004d7010001d7010001d7020001d702d701000ad70100024801000b4802a201000ba202a201000ba2" + }, + { + "filename": "34-hiroshima-lemon", + "data": "0x0019131c0f0100022901220429042903290100" + }, + { + "filename": "34-hiroshima-oyster", + "data": "0x0018131c0e020001d901060101010001060288010101e9038801010106020c0101010003010200" + }, + { + "filename": "34-hiroshima-rice-scoop", + "data": "0x0018131c10036003600360010001600100010001600100" + }, + { + "filename": "34-hiroshima-shrine", + "data": "0x0018171f09040008770200050006bf0300060001bf020001bf0400050006bf0300060001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" + }, + { + "filename": "34-hiroshima-wani", + "data": "0x0017141d0d04560300015602000156030003000156030001000256040003000456070003000456" + }, + { + "filename": "35-yamaguchi-kintaikyo", + "data": "0x001b171f09010001ca020002ca010002ca010002ca010001ca01ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188013f023f01000b3f023f01000b3f" + }, + { + "filename": "35-yamaguchi-motonosumiinari", + "data": "0x0017171f090e53055303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" + }, + { + "filename": "35-yamaguchi-white -snake", + "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" + }, + { + "filename": "35-yamaguhchi-tsunoshima-big-bridge", + "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" + }, + { + "filename": "36-tokushima-awaodori", + "data": "0x0018131b0f0220015a01010100022301000100025f01000100025f0100" + }, + { + "filename": "36-tokushima-citrus-sudachi", + "data": "0x0018131c0e0100035c0100015c010101c70101015c015c01c7010101c7015c015c010101c70101015c0100035c0100" + }, + { + "filename": "36-tokushima-narutomaki", + "data": "0x0017141c0d02000301020001000101034f010101000101014f0301014f01010101014f0101014f0101014f01010101034f0101014f0101010005010100" + }, + { + "filename": "37-kagawa-oliveoil", + "data": "0x0017121c0f010001ac01000100015c0100035c015c01c6015c015c01c6015c035c" + }, + { + "filename": "38-ehime-dango", + "data": "0x0018131c0e0300021b020002a6011b0100027001a60100010001570170020001570400" + }, + { + "filename": "38-ehime-juice", + "data": "0x0018131f0c02000106018d01060200010602000140030001060140040601010106010003060100010606000142060001420600014206000142" + }, + { + "filename": "38-ehime-mandarin-orange", + "data": "0x00061a140604000c4204000200084201e1074202000100024201250f4201000242012511420142012512420142012512421442144214421442144214420100054203b30a42010002001042020003000e420300" + }, + { + "filename": "38-ehime-turt", + "data": "0x0018141c0e0100045701000157037002570157017001570270015701570270015701700157010004570100" + }, + { + "filename": "39-kochi-seared-bonito", + "data": "0x0019131b0f0378010001780294017801780394" + }, + { + "filename": "40-fukuoka-mentaiko", + "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf016a026a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" + }, + { + "filename": "40-fukuoka-umegaeda", + "data": "0x0018131c0e010003c1010002c1019702c101c1019701c1019701c101c1029702c1010003c10100" + }, + { + "filename": "41-saga-saga", + "data": "0x0017151d0e010002560200015601000100015602000156010001560256020001560100015607000156040001560100015601000156010001560100015603560100015601000156" + }, + { + "filename": "42-nagasaki-castella", + "data": "0x0018131b0f04ae0428042804ae" + }, + { + "filename": "42-nagasaki-gunkanto", + "data": "0x0016171f09020001010b000e00010001010c00050002620200016204000400036201000262040001000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" + }, + { + "filename": "43-kumamoto-hitomojiguruguru", + "data": "0x001913190e014e01e101c001e1014e" + }, + { + "filename": "43-kumamoto-ikinaridango", + "data": "0x0018131b0e01000351010001d401b8028401d401d40129012a012901d4010003d40100" + }, + { + "filename": "44-oita-yaseuma", + "data": "0x0018121a0e026002880288026002600288" + }, + { + "filename": "44-oita_toriten", + "data": "0x0019121b0f01000293039301930200" + }, + { + "filename": "45-miyazaki-mango", + "data": "0x0018131a0e0100014601e601460100014601e6014601e601460100014601e601460100" + }, + { + "filename": "45-miyazaki-takachihokyo", + "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e10127010501270106010101050127012701050201013d010501270127053d0127" + }, + { + "filename": "46-kagoshima-senganen", + "data": "0x0016171f0907000201050005000101019d0500020103000461070001000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" + }, + { + "filename": "46-kagoshima-shochu", + "data": "0x0017121c0f0100012301000100013401000334017f01b7017f01b7027f0334" + }, + { + "filename": "47-okinawa-fish", + "data": "0x0017171d0d012401000224060001000224010001240500012401000224010001280100022801000600022801000128019b0100029b010001280100022801000100029b0100019b0500019b0100029b0600" + }, + { + "filename": "47-okinawa-satokibi", + "data": "0x0018161c0d0100011e010001c00100011e0100011e0100010001c00100011e010001c00100011e01c001c0011e010001c00100011e010001c00100010001c0010001c0010001c00100011e01000100011e0100011e0100011e0100011e0100" + } + ], + "heads": [ + { + "filename": "01-head-01-hokkaido", + "data": "0x00021f1a0109000154140008000354130006000154010004541200090004541100090005541000090006540e000154090007540c000254090009540600015403000154010009000c540200025402000154020009000f540200015403000800105406000700125404000154070012540100025402000300025403001254040004000254010011540600040010540a00030010540b00020010540c000100035401000354020007540d000100025403000154040005540e00010002540a0003540e00020003540a0001540e0002000454180001000354010001541800010002541b00" + }, + { + "filename": "01-hokkaido-goryokaku", + "data": "0x00021b16040b0002540a000a00045409000900025401c001dd025408000800025401c001dd01c001dd025407000700035401dd02c001dd0254018706000500035402c001dd03c001dd0187035404000300035401c0015401c002dd03c0018702dd045402000100035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd025401000300025401c001dd02c00287029204c002dd01c00254010003000187015402c001dd03c0029203c001dd02c0025402000200015402870154018701dd08c001dd01c0025403000100015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c0025404000100025401c0025401c001dd02c004dd02c001dd01c0015404000300035401c001dd01c001dd04c001dd01c001dd01c0025403000400025401c002dd01c0045401c002dd01c0025403000400025401dd02c0065402c001dd025403000500055404000554040005000354080003540400" + }, + { + "filename": "01-hokkaido-ishikari", + "data": "0x00031c15040400067f0200017f0b000200037f0400017f0300027f0100017f07000100017f0200037f0200010d037f02e1010003a201e004000200027f0100017f020d06e103a203e004000400020d015702e101a2019501a201e103a2010d02e0019504000300020d015702a2019501ce029704a204e0010d03000200020d019501a201ce029703ce03a205e0020d02000100020d015704ce01cd02ce01cd02a206e00157020d01000100010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d010e010e010d01220957015d0657034e010d010e010e010d03010e570149024e010d010e0100010d0301015701f30c570249014e010d01000100010d01220101015701490d570149014e020d01000200020d034901570434025705010157020d02000300020d01490157023401af033405010157020d03000400030d033402af01340501020d04000600020d05340257030d060009000334030d0900" + }, + { + "filename": "01-hokkaido-tokeidai", + "data": "0x00011b14060a00010b0a00090002a101370900070002a1013701e9013701a10137070007000237030102370700080001e901010196010101e908000800015d01960201015d0800080002e9013702e90800080001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033702a102a1013702a10237010b01e903ca01e9010b01a1023702a10237023702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e901000100015d016f035d016f035d010b035d016f035d016f015d01000100080b013701a10137080b01000100035d010b035d02a10337035d010b035d0100010001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e901000100015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d0100010003e9010b04e9030b04e9010b03e90100" + }, + { + "filename": "02-aomori-apple", + "data": "0x00051915080800011b080004000455011b045504000200045502a6011b02a60455020001000655011e011b011e025501010355010001000a5501010455010011551155115511551155115511550100025501a60c55010001000f5501000200065502a60555020003000b550300050007550500" + }, + { + "filename": "02-aomori-dogu", + "data": "0x00021814080400080a04000400020a0236010a0236010a040004000136030a01ca020a013604000600020a0136010a06000500010a04ca010a05000500030a01ca020a0500010001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a01000500010a01ca030a01ca0500050001ca020a018a010a01ca05000500010a01ca010a01ca020a0500050006ca05000500060a0500050001ca040a01ca05000600010a02ca010a0600" + }, + { + "filename": "02-head-02-aomori", + "data": "0x00021b17040d00015409000c0003540400015403000c0005540100025403000c00085403000b00055401000254040005000154010001540300045402000254040004000554020001540500025404000500045407000354040006000454020001540300035404000500055402000254020003540400050005540200035401000354040005000f54030004001054030002001254030001001354030015540200010015540100010005540100055401000a5401000154060003540300085401000e0004540100015403000e00025407000e0001540800" + }, + { + "filename": "03-head-03-iwate", + "data": "0x00021717090900015404000600055403000200015401000754030002000a54020001000a54030001000b54020002000b5401000d54010001000c5401000d54010001000d5401000d540d5401000e540c54020001000c5401000c54020001000c54010001000a540300020006540600040004540600050001540800" + }, + { + "filename": "03-iwate-moriokamen", + "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" + }, + { + "filename": "03-iwate-nanbutekki", + "data": "0x00031b14060700050e09000400030e0500030e06000300010e0b00010e05000200010e0d00010e04000200010e0d00010e04000200010e0600010e0600010e04000300010e0100090e0100010e050003000d0e050002000f0e04000100110e03000100110e0100020e150e140e0100140e01000100130e01000100050e0163010e0163010e0163010e0163060e020002000f0e040003000d0e0500" + }, + { + "filename": "04-head-04-miyagi", + "data": "0x00031c1808060001540a00025401000500045408000254010003000954040002540100015404000754030001540100025402000500085401000454020004000d54030003000f54020004000d54030003000f54020004000d54030004000d54010001540100030008540100015403000254020003000954050001540200020009540900020008540a00020008540a00010008540b0009540b0009540b00020007540b00050003540c00060002540c00" + }, + { + "filename": "04-miyagi-datemasamune", + "data": "0x00011d150517000128150002280100120002010128030008000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e080003000528030103280192010e019207000100020e01000192010e0192020103280192010e0192010e0192010e0100020e03000100010e0100010e0192010e0b92020e0100010e03000200020e0292030e0192010e0192010e0192030e0192020e04000200030e0192020e0192020e0192020e0192020e0192020e04000300010e01920188010e0192030e0192030e0192020e019205000300010e01920c880192010e05000300010e01540c880154010e05000300012801540c8801540128050002000128010e01540788016004880154010e012804000200020e01540788016004880154020e040001000128020e01540788016004880154020e012803000100030e01540588026004880154040e03000200030e01540388042303880154030e04000400020e025406880254020e0600080006540a00" + }, + { + "filename": "04-miyagi-tanabata", + "data": "0x00041c160406000de1010001bf0300050001e1010001010400010104000101010002e1010001560100040001e1020001010400010104000101020001c701e10200030001e102000356020003bf020003c7030001bf0100020001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c7020001560100010001e10300055605bf05c70400010001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" + }, + { + "filename": "05-akita-akitainu", + "data": "0x00031a14021100012b06001000022b010105001000032b020103000f00042b01010123020101800e00042b06010c00062b0301025f01000b00072b0501015f0a00092b0201030009000b2b010103000200040103000b2b0101030001000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b050001000201032b0101052b020102000101022b05000200040101000101042b010103000201012b05000800032b0301030003010400" + }, + { + "filename": "05-akita-magewappa", + "data": "0x00041a15040200108e0400010012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de0200010001de0788016001880184068801de0300020007de01d801de018406de04001600030012c90100020014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de018803000888016001880184078801000400018e01de018e02de018e04de018e02de018e01de018e0200" + }, + { + "filename": "05-akita-namahage", + "data": "0x00021a16040700014109000141040007000241070002410400080002410500024105000600062301000523040005000123060e0123050e0123030004000123010e0623010e0523010e0123020003000123010e0123010e0123040e0123040e0223010e0123010003000123010e0123010e022307410323010e0123010003000123010e0123010e014103230318032301410123010e0123010003000123010e0123010e034102230141022303410123010e0123010002000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e0123010001000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e0123010001000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e0123010001000123010e0123010e012301410101012301cf041801cf0123010101410123010e0123010001000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" + }, + { + "filename": "05-head-05-akita", + "data": "0x00031617090300055403000254040009540400095403000a5403000954010002000a540100015401000a5401000d5403000854020004000854010004000754020004000754020004000754020004000654030003000754030003000754030002000954020002000a540100040007540200050007540100070003540300" + }, + { + "filename": "06-head-06-yamagata", + "data": "0x000318180a05000254070005000454050004000754030004000854020004000954010003000b5402000c5401000d5401000c5401000e5402000c5402000c5404000954010004000854020004000854020002000a540200020009540300020008540400020007540500020007540500030006540500060003540500" + }, + { + "filename": "06-yamagata-hanagasa", + "data": "0x00021b170508000641080006000241065702410600040002410a5702410400030001410a5701320141025701410300020001410157013201410132025701c603570132024101320257014102000200014101570441025701dd025703410132014101570141020001000141015701320341025701dd045701410132014103570141010001000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd085701410141035701c6035702dd0341085701410141075701dd024101320241035701410132025701410141035701410357024101320141013201410257044101570141014102570132024102570332024101320141015702410132014101570141014102570141013201410132025702410232014102570132024101320157014101000141015701320241013203570341015701280257023201570141010001000141025701410132075701280123012804570141010002000141035701c6075701280123012802570141020002000141065701320341013201570128012301280157014102000300014105570141013201410132035701280157014103000400024104570141013204570241040006000241065702410600080006410800" + }, + { + "filename": "06-yamagata-zaookama", + "data": "0x00041d14040a00072702010227040007000b2703010127030005000e27024c0101012702000400022701010c2704010127010003000127020103270a010127024c0101012701000200020102270301073004010127030101270100010102270201019b0b3002010127024c01010127022703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f3003010127020001000201014c01010e3003010127020002000101014c03010a300201014c01010127030003000201014c0b01014c0101014c0101040005000401014c0101014c0101014c0301014c01010600" + }, + { + "filename": "07-fukushima-peach", + "data": "0x00041d16040500020f12000300030f0197010f0100030f0d000100060f0297030f0100020f0a000100030f05b90297030f0197010f09000100020f04b9011902b9020f0297030f0100020f05000100020f04b9011903b9040f0197010f0100030f04000100010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297020f040f05b9040f05b9011902b9040f0d0f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f01000600020f0100050f03b9021903b903000a00030f04b9011903b904000a00010f020003b9011904b90400100003b90600" + }, + { + "filename": "07-fukushima-tsurugacastle", + "data": "0x00011a140309000162050001620700080001620700016206000900078907000900078907000800098906000900020103080201070007000b89050006000d89040007000201017f0108010101890101017f0108020105000600068901010689040005000689010101a301010689030006000101017f010107890101017f01010400050005890201017f0201058903000300019406890501068901940100020002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" + }, + { + "filename": "07-head-07-fukushima", + "data": "0x00051b17030e00035407000e0006540200015401000800035403000654020002540700055402000a5406001254050013540500135403001554185401001754010017541854020016540200075402000d540100065406000a540100010003540a00095401000e00095401000f000354010002540300100001540700" + }, + { + "filename": "08-head-08-ibaraki", + "data": "0x0003191807090001540300015404000900025401000554010009000754020009000754020008000854020008000754030008000754030008000654040008000654040007000754040004000a54040002000b54050002000b5405000e5404000e54040002000c54040003000c54030003000c54030004000c5402000700045403000254020010000154010011000154" + }, + { + "filename": "08-ibaraki-anglerfish", + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + }, + { + "filename": "08-ibaraki-hananuki-ravine", + "data": "0x00041c1502040001c006000136019701c601d80197013602bf0700020001c0060001bf01000136019701d801bf01970136060001bf0200060001bf010001bf0100029704d802970800040002c604000136019701d8019702d801970136020002bf0400070001c601000197013601d80188019701bf018801d8013601bf030001c0030009000136019702d8029702d801970136010001c0020002c00100010002c0020001c0010001bf01000136019701bf018802970288019701360700030001c0010002bf01000197013603d8029703d8013601970600080002970388029703880297020001c6010001bf010007000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf0300010002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d802970400010002bf02000136029705d8029705d802970136030005000136019701d802bf02d802bf019701d802bf03d801c60136010001bf01000400019701360197038802bf0188019702bf048801c60197013602bf0100040001970136019706d8029706d8019704bf170002bf0100" + }, + { + "filename": "08-ibaraki-rocket", + "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a26010101000500057f0b2601000400057f0b2602000300057f0b26030002000155047f0b260400024201000155027f020109260500040001550100030107260600030001420100020d0301032601290126017f060002000142010001730100020d03010326017f0700050001420100010d0100027f0201017f08000600017301000155027f0101017f0900030001730200024201000155027f0a000a0001550b00" + }, + { + "filename": "09-head-09-tochigi", + "data": "0x000418160709000454040007000854020005000b54010003000d54010002000e54010001000f54010002000e54010001000f54010001001054105401001054010003000d54010002000e54010002000e54010002000d54020001000e54020002000954010001540400030006540800060003540800" + }, + { + "filename": "09-tochigi-sanzaru", + "data": "0x00041e1401050003340500043404000434040003000634030006340200063403000300023401af013401af02340100023401af013401af063401af013401af013403000200013401b805af033405af043405af013402000200013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af01340200020002b805af01b8023404af01b801af01340135013405b803000300023401af020e01af01b8023401af04b80135033402b8010e02b8013402000200033403af0434013504b801340135033402af04340100010001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af013403000100063402af0100023405af0135033403af01340400010003340235013401af0234020005af0135043401af013405000200013401350734010005af053401350234040002000b3403af013506340135023403000100063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" + }, + { + "filename": "09-tochigi-strawberry", + "data": "0x000416150602000122020001c0010001c008000300012204c003710500020001c0022204c004710300010005c00571010102710200020002c006710101017101010171020002c0017101c0077101010371010001000e71010001000f7101000f7101000f7101000f7102000e7102000d71010003000c710100040004710146027101460371010005000471024603710200070007710200090004710300" + }, + { + "filename": "09-tochigi-toshogu", + "data": "0x00031f1402060001c70f0001c70600070003c7022901c7012908c70700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30700060002c702e3012701e3012701e3012701e3012701e3012702e302c706000500012902e301c7012901c701e302c7015402c701e303c702e301c705000600016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0600050001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290500090001c7027f01c7037f01c7027f01c70900070002c70154014101c70154014101c70141015401c70141015402c70700010001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014102c701c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" + }, + { + "filename": "10-gunma-kusatsu", + "data": "0x00041d15030600020d0200020d0200020d0200020d06000400013201da028802da028802da028802da028801da013204000400013201da023202da023202da023202da023201da01320400050001da025702da025702da025702da025701da0500060002570200025702000257020002570600060002570200025702000257020002570600030003e6025702e6025702e6025702e6025703e6030003000193013e018d0257023e0257023e0257023e02570101013e0193030003000193013e0101033e018d023e018d033e018d033e018d013e0193030003000193013e028d053e018d043e028d023e018d0193030003000193023e018d013e018d013e018d023e018d013e028d013e018d033e0193030003000193018d053e018d023e018d053e018d013e018d0193030003000193013e018d033e018d063e018d013e018d023e010101930300030001930101033e018d033e018d023e018d023e018d013e018d013e0193030003000193033e018d033e047f018d013e018d043e019303000100027f0193033e018d033e017f023e018d033e027f023e027f0100017f017f0200017f03e6017f0ce6027f01e603000100027f0100027f1400" + }, + { + "filename": "10-gunma-negi", + "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030001dd03dd0100034c03dd0100034c010003dd04dd034c04dd034c03dd0100010003dd034c04dd024c04dd0100010003dd034c04dd024c03dd0200010004dd024c03dd024c04dd0200020003dd024c03dd024c03dd0300030002dd024c03dd024c02dd0400050001dd014c02dd024c01dd06000500074e06000600054e0700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c103ca01c10700060001c1010101c1010101c107000700010101c101010800" + }, + { + "filename": "10-head-10-gunma", + "data": "0x00021c17060c00015409000a00035409000a000454080009000854050009000754060007000a54050005000b54060002000e54060001000f5406000100105405001254040011540500115405000100025401000d54050004000c54060004000e5404000300095401000754020004000754070003540100030008540a000154040005540d00040003540f00040002541000" + }, + { + "filename": "11-head-11-saitama", + "data": "0x00071c1403080002540f00080005540c000700095401000254060007000e54040005001154030003001354030001001654020017540200185401001854010001000554010012540300025405000f540d000c540e000254020002540500" + }, + { + "filename": "11-saitama-tokinokane", + "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" + }, + { + "filename": "11-saitama-whitetiger", + "data": "0x00031a1406020002010b00020103000100040109000401020001000101015f020109000201015f010102000201025f020107000201025f01010200090103e3060102000100030101e3050101e3050101e3010102000200010101e3040101e3030101e3040101e302000200040101e3020101e3010101e3020101e303010200020010010200020001e30e0101e30200020010010200020010010200020001e30e0101e30200020010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" + }, + { + "filename": "12-chiba-loquat", + "data": "0x0003181508070002c9070006000426060004000826040003000a26030002000c26020001000e26010001000e260100102610261026102610261026102601000f26010006260186012601860526010002000626018605260200040008260400050006260500" + }, + { + "filename": "12-chiba-nanohana", + "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a02000300012a0100012a0100022a0100022a0100012a0100022a0100022a06000200012a0100122a0100012a02000200172a01000100062a0122112a01000100152a0122022a01000100032a0122152a1a2a042a01c0102a01c0042a032a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a02000100012a020001c0102a01c0012a0100012a0100" + }, + { + "filename": "12-head-12-chiba", + "data": "0x000219170801541000010001540f00010002540e000200035404000354050002000c54030001000e5402000100105402000b540400020001540100085405000500065406000400065407000300075407000200085407000100095407000a540700020008540700010009540700010008540800010004540c00020002540d0004540d00010002540e00" + }, + { + "filename": "13-head-13-tokyo", + "data": "0x00091c140301000254160007541200010009540f0001000a540300025402000654010002001654010003001654040015540600135407000f54010001540100080006540300055403000c0003540400045402000d000154070002540200" + }, + { + "filename": "13-tokyo-station", + "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" + }, + { + "filename": "13-tokyo-tower" + }, + { + "filename": "14-head-14-kanagawa", + "data": "0x00041d160306000254120007000254110007000354060004540600070007540300055404000600095402000754020006000a54010009540400155401000200145404000100165403001654040002001454040002001454040003000c5401000654040003000754090004540300020006540c0005540100020005540d0004540200020005540e0004540100030005540c000254040004000254010001540d0002540300" + }, + { + "filename": "14-ibaraki-anglerfish", + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + }, + { + "filename": "14-kanagawa-curry", + "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d4043502010100030102000400020105d40535020106000300030105d40635020105000300020106d40635020105000300020106d40635020105000300030105d40635020105000400020104d40635020106000400030103d40635020106000500030101d401860142016003350201070006000401033503010800070008010900090004010b00" + }, + { + "filename": "14-kanagawa-king", + "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" + }, + { + "filename": "15-head-15-niigata", + "data": "0x00021b170413000254020013000254020009000154090004540800015409000554070002540900035402000700035407000454020008000254050006540200070002540400095401000c00095402000c00095402000c00085403000b00095403000a000854050009000754070008000954060007000954070004000d54060002000f540600085402000554010001540600010002540100035403000454090001000154090002540a000b0001540b00" + }, + { + "filename": "15-niigata-sasadango", + "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" + }, + { + "filename": "15-niigata-tulip", + "data": "0x00041a1506090002b90900080004b90800010002b9040006b9040002b9010004b9030006b9030004b905b9010008b9010005b914b914b914b914b914b914b914b9010012b90100010012b90100020010b90200020009b9016a06b90200040006b9016a05b90400060008b90600" + }, + { + "filename": "16-head-16-toyama", + "data": "0x00051b17050300045409000454020002000454090006540100020003540a00065401000100055408000854010007540600085401001554165401001554165401001554010014540100010014540100010013540200145402000b54010001540100065402000854080003540300010006540f0001000154030002540f00050001541000" + }, + { + "filename": "16-toyama-blackramen", + "data": "0x00041b150508000633080006000a33060004000e3304000300053306850533030002000433038502d3058504330200010003330385018803d303e4048503330100010002330285018803d302010222010103e402850233010003330285018802d3070103e40185033302330285018803d3082202e40285023302330285018802d3092203e4018502330233028503d3080104e4018502330333018504d3062204e40185033301000233028504d3040104e4028502330100010003330185018805d3078503330100020003330185018803d3028503e402850333020003000333048503e40385033303000400043306850433040006000a330600" + }, + { + "filename": "16-toyama-kutabe" + }, + { + "filename": "16-toyama-raicho", + "data": "0x00031d15021200047f05001100077f03001100047f020e017f010e02000600010f0a00077f020e0100050001dd010f01dd0800077f0400050001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f04000100010e017f0200010f01dd017e107f03000100017f020e157f02000200177f02000200177f02000300167f02000300157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e0300010002dd017e010f0300027f0400027f0500010f017e02dd02000300010f037e0100027f010e0300027f010e0300027e010f0400" + }, + { + "filename": "17-head-17-ishikawa", + "data": "0x00031517080a0003540700055401000600065401000600045403000500035405000500035401000154030006000454030006000454030007000154050006000254050006000154060005000354050005000254060004000454050003000454060002000554060001000754050007540600010007540500020005540600050002540600" + }, + { + "filename": "17-ishikawa-curry", + "data": "0x00071c1504060001010172020108720600040003720ab8037204000300027201b80225013403250234022502b8022201720300020002720325013401250134012502340125013402250422017202000100027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b80172017201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b80172027201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b802720100020003720fb8027202000300037204b8036406b8027203000500037208b80372050007000a720700" + }, + { + "filename": "17-ishikawa-jibuni", + "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b8032302000300032301de0123038301b8012301de032303000400032301de052301880223040006000223018801de022301de01230600" + }, + { + "filename": "17-ishikawa-kinpaku", + "data": "0x000518150705a6076d05ea03a60b6d03a60aa6066d01ea09a6086d07a60a6d10a6016d11a611a604ea0da611a6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" + }, + { + "filename": "18-fukui-dinosaur", + "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b02000b0001e8011b01e8011b01e8011b01e80200071b011b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a03000100011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a04000200021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a04000300041b01e8011b01e8051b01e8061b05000400022a071b01e8081b05000600022a051b01e8081b05000800012a091b022a0100041b02000900032a021b01e8032a09000c00031b0c000d00021b0c000e00011b0c000e00021b0b00" + }, + { + "filename": "18-fukui-sabae-glasses", + "data": "0x00091c1206030004710800047103000100027102060201027104000271020602010271010001000171020603010106017104000171020603010106017101000171020603010306047102060301030601710171010603010406017102000171010603010406017101710301050601710200017103010506017101710201060601710200017102010606017101000171060601710400017106060171010001000271040602710400027104060271010003000471080004710300" + }, + { + "filename": "18-head-18-fukui", + "data": "0x00041a18020c0001540b000b0003540a000c00035409000b0005540100025405000a000a5404000a000d54010009000d54020009000d5402000a000d5401000a000e540b000d540c00035401000254060009000154010004540900090001540100015401000254090006000154020003540c00070005540c000100015401000154010006540d00025401000554010001540e0008541000010007541000020004541200" + }, + { + "filename": "19-head-19-yamanashi", + "data": "0x00051a1806040002540e00030003540e00010001540100065401000354070001000f5404001054040001001054030012540200145401001254010001001354020012540200115401000100105403000200055401000754050001000654030005540500010006540d00030003540e00040002540e00040003540d00050002540d00" + }, + { + "filename": "19-yamanashi-shingen", + "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" + }, + { + "filename": "19-yamanashi-wine", + "data": "0x0001161409050003e705000500035b0500050003e70500050003e705000500037905000200011b082202000100011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" + }, + { + "filename": "20-head-20-nagano", + "data": "0x000319170b0b000254010006000154020005540500095405000754020005000754020004000754030003000854030003000a54010003000954020002000b54010002000a54020003000a5401000200085401000354095404000154010008540500020006540600020007540500030005540600030005540600020006540600020004540800" + }, + { + "filename": "20-nagano-matumotocastle", + "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" + }, + { + "filename": "20-nagano-wasabi", + "data": "0x0003161505040002220100024e08000100024e01000222034e08000122024e0222034e09000122034e0122014e0222090001000122034e032201c90122070002000622014e022206000200013f022201c9014e042206000200013f014e0622014e01c90500030001c90922040003000a22040003000422014e062203000400013f014e0522014e0322020005000922014e020005000b22010006000122014e082201000700042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" + }, + { + "filename": "21-gifu-gassho-summer", + "data": "0x00021d14040b0003d80b000b0003d80b000a0002d8018402d80a00090002d8038402d80900080002d80184037c018402d80800070002d8028402010123028404d80500070001d8028401ca0201012301ca028401d80700060001d8028407ca028401d80600050001d80184057c01ca057c018401d80500040002d8018401ca030103ca030101ca018402d80400030002d8028401ca030103ca030101ca028402d80300030001d802840dca028401d80300020002d8018402ca020101ca020101ca020101ca020102ca018402d80200010002d8018403ca020101ca020101ca020101ca020103ca018402d80100010001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + }, + { + "filename": "21-gifu-gassho-winter", + "data": "0x00021d14040900070109000800030103d8030108000800030101d8018401d8030108000700030101d8038401d8050105000600030101d80184037c018401d8040105000500030101d8028402010123028401d8010102d805000400030101d8028401ca0201012301ca028401d80200010104000300030101d80184030103ca0301018401d8030103000200030101d80184050101ca0501018401d8030102000200030101d801840bca018401d8030102000100030101d802840bca028401d8030101000100020101d802840dca028401d802010100030101d801840fca018401d80301020101d8018411ca018401d80201010101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + }, + { + "filename": "21-gifu-keichan", + "data": "0x00021d1a03040002061400060004060500050606000a000106090003060300040006060100017d029c0900010602000300010605000322017d029c0200060603000400090601d2019c010001060900030003ca0123022203e901220106017d029c0106022303ca0300020002ca0223022201e9037d01220106027d019c017d0106010c022302ca0200010002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012302ca02ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c0123012301ca0123010c0322047d029c0322027d029c017d0122010c012301ca01230123010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012302ca02ca0123010c0422017d029c037d0422027d0222010c012302ca03ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca0100020004ca0e2304ca0200030014ca03001a001a001a000c00013d0101013d01010a000d00013d0100013d0a00" + }, + { + "filename": "21-gifu-ukai", + "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f5407000300105407000300105407000200115407000200045401920c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c020101f406000100030c0601010c07a6010101f406000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" + }, + { + "filename": "21-head-21-gifu", + "data": "0x00031817060c0001540100025402000b000754070002540100085407000a54010007000a54010006000a54020006000b54010006000a5402000700085403000800065404000100025401000b54030001000f5402001054020001001054010002001054020010540300055402000754010003000454040006540100020004540600015401000254020002000154010002540c00050001540c00" + }, + { + "filename": "22-head-22-shizuoka", + "data": "0x00031d14050a0001540d00090002540d000a0001540d00090002540400015408000a000154040003540200035401000800035401000154020008540100060007540200075402000500095401000754020005000c540200055404000c5404000354010003000c540600035403000d5402000554010002000c54040006540c54070005540d540500055401000c5407000454010004000254020003540700045402000a000154080002540300" + }, + { + "filename": "22-shizuoka-oden", + "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" + }, + { + "filename": "23-aichi-hitsumabushi", + "data": "0x00071a15060800040e08000500050e0134040e05000300040e0234012b013401350134040e03000200010e010b033401350234012b023401350334010e02000100010e010b0134012b03340135053401350234010b010e01000100010e01350234012b0634012b033401350134010e0100020e0834013506340135020e020e023401350234012b033401350334012b0234020e020e010b023401350b34012b020e030e010b093401350334030e050e023401350234012b03340135050e0100080e0234080e01000100120e01000200100e020004000c0e0400" + }, + { + "filename": "23-aichi-tenmusu", + "data": "0x00011b1406090001ce010001ce0900090003ce0900090003ce0900090003e70900070001bc05e701bc0700060001bc010105e7010101bc0600050001bc010107e7010101bc0500050001bc020101e7030101e7020101bc0500040003bc070103bc0400040005bc030105bc0400030007bc010107bc030003000fbc0300020010bc0300020011bc0200020011bc0200020011bc0200010013bc0100010007bc010101bc010101bc010107bc010015bc15bc" + }, + { + "filename": "23-head-23-aichi", + "data": "0x00041c170505000154110001000154010004541000010007540f0001000854020002540300015406000e54010002540200025402001754175401001554010001000354010011540100020001540100115402000400105403000300115403000300035401000d540300020001540100015401000d5404000400015402000a540600030002540500015402000354070004000254060001540100025407000b000554070007000154010005540900060005540c00" + }, + { + "filename": "24-head-24-mie", + "data": "0x000318170b06000254050007000254040007000354030006000354040005000454040002000654050001000654060002000554060002000754040002000854030004000854010002000b540200075401000254010003000554050002000354080002000254090003000254080001000354090003540a0002540b00010001540b00" + }, + { + "filename": "24-mie-ninja", + "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" + }, + { + "filename": "24-mie_jingu", + "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" + }, + { + "filename": "25-head-25-shiga", + "data": "0x000316160807000254050007000354040006000554030003000154010007540200030003540100015401000354020003000354030004540100010004540500035401000654040003540100010005540300035402000100045403000454020001000354020007540100010003540300075402000154020009540100025401000a540100025401000954010001000c54010002000a540200020009540300040003540700050002540700" + }, + { + "filename": "25-shiga-blackbass", + "data": "0x00021d18021700018d0100018d01001700038d01001600058d1700048d0a00016b0c00038d01000900036b010003c50157012303c50100038d02000800036b02c5011e02c5025702c50100028d04000500026b0100016b02c5031e06c50100038d03000500036b01c5041e01c5011e05c5028d05000400036b01c5031e01c5041e02c5010101c5030104000400026b01c5031e01c5031e0101016b060105000400016b01c5061e0201016b0201011e03010600050001c5031e01c5011e0201016b0201031e02010600050001c5041e0201016b0201031e02010700050001c5021e01c50201016b0701011e0700040001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010e000100066b0300031e0e000300046b0300021e0f000300046b14000400036b1400" + }, + { + "filename": "25-shiga_hikonecastle", + "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" + }, + { + "filename": "26-head-26-kyoto", + "data": "0x0005171507030003540a000154010004540a0005540b0006540100025407000300045401000154070003000654070001000a54050002000b54030003000154010008540300050008540300080005540300080005540300070007540200090001540100035402000b00045401000c0004540c00025401000154" + }, + { + "filename": "26-kyoto-kinkaku", + "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" + }, + { + "filename": "26-kyoto-kiyomizu", + "data": "0x00061a14051584010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100" + }, + { + "filename": "27-head-27-osaka", + "data": "0x000616150b05000254010001540200060004540100060005540600055406000554060005540500065405000554010006000454010006000354020005000554010005000654020001540100075403000754010001000554050003540800" + }, + { + "filename": "27-osaka-takoyaki", + "data": "0x00021e15020b0001af010001af020001af027d0900090001af027d01af0100017d01af010002af09000600017d010001af017d03af017d01af020b017d010003af060003000157020001af017d02af017d01af020b01af0134017d013401af027d0700040001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0600050001570100010b02af01dd01af013402af017d0134010b03af010001af05000600015701af023401af010b02af010b023402af020b01dd01af050006000134010b02af010b0234010b0234020b0111010b0234010b050005000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f0100050001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f010005000334010b0134020b0b60050005000234020b0134010b01110260039303600393050005000134010b0234010b013401110b6005000600040b0111046002930560060006000134010b0234011101930134019305600293016006000200037f0200023402110160053404600700017f0300017f0300013401110260013403600293026008000100037f03000234011101930134076009000b00036003930b00" + }, + { + "filename": "27-osaka-tower", + "data": "0x000216150b05000195050004000395040002000195063c020003000195043c0300040003c604000100016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f01000300019501c6019501c6019503000300019501c6019501c6019503000300019501c6019501c6019503000200029501c6019501c6029502000200029501c6019501c6029502000200029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f010001000195016f019503000195016f019501000100016f019505000195016f010001000195070001950100" + }, + { + "filename": "28-head-28-hyogo", + "data": "0x0004181d07040005540800020007540800030007540100015405000300095405000300095405000400065407000400065407000400085401000154030002000c54030003000e5402000f5401000f5401001054010011541154010010540100025405000754010001540a000454030011000a0001540600090001540700080002540700070003540700060005540600070003540700070001540900" + }, + { + "filename": "28-hyogo-himejicastle", + "data": "0x00021a15010b00017f0700017f05000c0007e006000c0001e0019d01e0019d01e0019d01e006000b0002e0019d0301019d02e005000c00070106000c00010101920101019d01010192010106000800017f020001e0019d01e0019d0101019d01e0019d01e00200017f0200090001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e003000700017f02000101029d01010192010101920101029d01010200017f01000800017f01e0019d0201019d03e0019d0201019d01e0017f02000300017f040002e005010192050102e0020003e00500017f01e0010101920101019201e0010101e00192010101920101027f020001e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d01000192010101920300037f040105920501020001e0019d01e0019d01e00100037f010101920101079201010192020102000101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d019d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f01000192010101920101019201010192100102000401019d01e0019d01e0012b0250012b0350012b0250012b0350012b0200012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" + }, + { + "filename": "28-hyogo-tajimaushi", + "data": "0x0004191504010002b50f0002b5010002b5110002b502b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b01000300010b0d0d010b0300150d150d150d0100130d01000300100d020004000c0d05000400060d0ab501000400050d0bb501000400050d05b5020d01b5020d01b501000400050d0bb501000400050d02b5070d02b5010009000ab50200" + }, + { + "filename": "29-head-29-nara", + "data": "0x000316140b02000154080002000254010002540100015402000200075402000100075403000100075403000200085401000200095401000854020001000854020002000754020003000654020001000854020001000854020008540300095402000100065404000100055405000100015401000154010001540500" + }, + { + "filename": "29-nara-ashura", + "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" + }, + { + "filename": "29-nara-deer", + "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" + }, + { + "filename": "30-head-30-wakayama", + "data": "0x0004161606080002540600015402000754060001000a5405000200085406000100085407000100085407000200065408000100085407000a54060009540700020007540100015401000154030003000a54030005000954020006000954010005000b54060009540100070009540900055402000c0001540300" + }, + { + "filename": "30-wakayama-danjogarandaito", + "data": "0x00011914080800019508000800012108000800019508000800012108000700012701e301270700060001e3012701e3012701e30600040001e3012701e3012701e3012701e3012701e30400020001e3012701e3012701e3012701e3012701e3012701e3012701e3020002000db40200050001b4010101b4010101b4010101b40500050007b405000500012801dd01b401dd01b401dd012805000400090104000100012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b40300030001b401dd01b401dd01b401dd01b401dd01b401dd01b4030003000bb40300030001b4010101b4010e01b4010e01b4010e01b4010101b403000100047f07e0047f0100" + }, + { + "filename": "30-wakayama-nachifall", + "data": "0x000216150a0100036102e001610101046101610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e00301026202000400010101e0010101e004000400020101e001010400040001e0030104000500010101e001010400050001e0020104000500030104000500020101e00400050001e0010101e004000500010101e001010400050003010400050003010400050003010400030001010100016201010162010102000101050001010162020103000500020101000101010001010100020001010100010101000101010001010300" + }, + { + "filename": "31-head-31-tottori", + "data": "0x00091c13061200025402000100015404000254040002540200045402000200015401001054020003001254010002001354010002000554010004540200085402000554030001540400075406540a00035401000254010005540a00015405000454120002541400" + }, + { + "filename": "32-head-32-shimane", + "data": "0x000319190710000254100002540e000154030012001200120012000e00035401000b00055402000a00075401000b0006540100090008540100080007540300070008540300050007540600040006540800030008540700020004540c0005540d00010004540d0004540e00010003540e00010002540f00" + }, + { + "filename": "33-head-33-okayama", + "data": "0x00031b1606050002540400025408000500045401000554060004000c540400015404000c540100035401000200125401000100125402001354020001001154030012540300125403001254030001001154030001001254020001001054040001001154030002000f54040002000a5402000254050003000b5407000300035402000554080004000154040001540b00" + }, + { + "filename": "33-okayama-denim01", + "data": "0x00061815090a54042b01540799010c0299042b01990754019907540154059901540199015405990154015401f5035401f501540199015401f5035401f501540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" + }, + { + "filename": "33-okayama-denim02", + "data": "0x00061815090a92042b01920799010c0299042b01990792019907920192050c019201990192050c0192079201990792079201990792079201990792079201990792079201000792079201000792079201000792079201000792079201000792079901000799079d0100059d010101f6079d0100059d010101f6" + }, + { + "filename": "33-okayama-denim03", + "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca07920192050c019201ca0192050c0192079201ca0792079201ca0792079201ca0792079201ca079207920100079207920100079207920100079207920100079207920100079207ca010007ca079d0100059d014d01f6079d0100059d010101f6" + }, + { + "filename": "33-okayama-dog", + "data": "0x00031a1506010003260c00022602000100015703260a000226015702000100025703260800022602570200010003570c2602570200010002570e2601570200010003260601016a05010226020001000801036a0601020001000801010f016a010f06010200010003010d26010102000100112602000100052603570326035703260200010011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db018801001000025f0200" + }, + { + "filename": "33-okayama-horseshoe-crab", + "data": "0x00051815010a00088e0500090003d5098e02000800028e02ca01d5068e0101028e0100060001ca048e01ca01d5028e04c3018e0101018e01000700048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0100090003d5098e02000a00088e0500" + }, + { + "filename": "33-okayama-momotaro" + }, + { + "filename": "33-okayama-monkey", + "data": "0x00051a140605000aca050003000eca0300020010ca0200010003ca0601016a050102ca020001000801036a0601020001000801010f016a010f060102000100030106db01ca06db01010200010003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb0100020003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" + }, + { + "filename": "33-okayama-peach", + "data": "0x00041e15030d00015f0d000a00075f0a0007000d5f070006000f5f06000500025f01570e5f05000500015f0157065f01e5085f05000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400095f01e5095f04000400095f01e5095f04000400095f01e5095f040002000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f0322010002000322055f0382095f02220300040002220f5f02220400060002220b5f02220600" + }, + { + "filename": "33-okayama-pheasant", + "data": "0x0003191506019212000292110005920a540400010002920d54030002000f540200020002540601016a05010154020002000701036a0501020002000701010f016a010f05010200020002010cb901010200020001540eb90200020001540eb90200020001540eb90200020001540eb90200020001540eb902000200025407b9036d03b9020003000754096d03000854086d03000e540100016d03000e1d0200" + }, + { + "filename": "34-head-34-hiroshima", + "data": "0x00041c19020f000254010001540100035403000f00095402000e000a5402000d000b5402000c000c5402000d000b54020004000154010001540100015401000f540100020017540100030015540200020017540100020017540100010019541a54010019540100155401000354010005540100025401000954010002540200015401000200035404000a540200015401000154020002000254010001540300055405000354040003000154060002540300025409000a000154010002540c00090001541000080002541000" + }, + { + "filename": "34-hiroshima-manju-choco", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad02880385028802ad0400010005ad01880585028804ad0100010001ad05880585058801ad0100010001ad01880d85018801ad0100010001ad02880b85028801ad0100020001ad01880b85018801ad0200020001ad02880985028801ad0200020001ad01880b85018801ad0200010002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad0100020002ad02880785028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-custard", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288016d028802ad0500040002ad0288036d028802ad0400010005ad0188056d028804ad0100010001ad0588056d058801ad0100010001ad01880d6d018801ad0100010001ad02880b6d028801ad0100020001ad01880b6d018801ad0200020001ad0288096d028801ad0200020001ad01880b6d018801ad0200010002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad0100020002ad0288076d028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-koshi", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880180028802ad0500040002ad02880380028802ad0400010005ad01880580028804ad0100010001ad05880580058801ad0100010001ad01880d80018801ad0100010001ad02880b80028801ad0100020001ad01880b80018801ad0200020001ad02880980028801ad0200020001ad01880b80018801ad0200010002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad0100020002ad02880780028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-maccha", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288010f028802ad0500040002ad0288030f028802ad0400010005ad0188050f028804ad0100010001ad0588050f058801ad0100010001ad01880d0f018801ad0100010001ad02880b0f028801ad0100020001ad01880b0f018801ad0200020001ad0288090f028801ad0200020001ad01880b0f018801ad0200010002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad0100020002ad0288070f028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-tsubu", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad028802850180028802ad0400010005ad01880145028501450185028804ad0100010001ad0588024501800285058801ad0100010001ad018802800245018502800385018001450185018801ad0100010001ad02880180018501450480018501800285028801ad0100020001ad018802850380018501450480018801ad0200020001ad0288018501450280024502800145028801ad0200020001ad018801850345028502800345018801ad0200010002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad0100020002ad02880180014502800385028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-okonomiyaki", + "data": "0x00051b14050500015d0300045f0100019307000600025d01d9015f026a0122015d08000600012201d90101026a0122010101220800030001930101010001d90101015f016a015d0101015d01010122015f010105000500010101d90101015f016a0122015d010101220101025f010104000500012201d90101015f016a015d022201010122015d015f01d9010103000400015f015d01d90101015f016a0422015d0122015f02d9010102000300015f015d012201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101016a0722015f02d9010102000200016a015f0c22015f02d9010102000200026a015f0f22020002000560012501600125016001250160012501600125046002001623" + }, + { + "filename": "34-hiroshima-shrine01", + "data": "0x00051c15050277130002770100157701000200131a020002001341020004000441020003230200044104000500021a03000123019301230300021a0500040004410200032302000441040002001341020002001341020005000241090002410500040003b3090003b30400050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b305000400018d01b30141038d0306038d014101b305000400078d0106068d0500" + }, + { + "filename": "35-head-35-yamaguchi", + "data": "0x00051e17030d0001540d000c0002540d000b0003540d00090004540e000a0004540600015406000100035401000254020007540300025406000300015401000154010008540500015406000f540200015401000254060001001554050017540400010017540300010017540300175404000e54020008540300010002540100045401000154010001540300015401000654040001000154030002540b00045401000254010001540154130002540100015401000154010015000154050014000154020001540300" + }, + { + "filename": "35-yamaguchi-anglerfish", + "data": "0x00091f15020c0005830c000900048301660683090008000a830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + }, + { + "filename": "35-yamaguchi-fuku", + "data": "0x00051b14030400026212000400036211000400046203610495016105950300050001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed02610301016103950161015903610159016105950201010002610401059501590161015904950501010001610300130101000200026212010200020003621101020002000262010011010200060008010259050103000600080101590601030007000d010400" + }, + { + "filename": "35-yamaguchi-kawarasoba", + "data": "0x00051e1504030001061600010002060700019e0300019e08000106020001060900019e0300019e0900010601000106080001da010101da010001da010101da05000306020001000306040001d0012301d0012301d0012301d0012301d00900040001060200011501230115012301150123011501230115012301150200010605000400010601000d1503000206020001000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb05000106010604000fe80300020601000100010603000fe802000106030002000106010011e8010001060300040002e80d2302e80200010602000300010c02230d0c0223010c04000200040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" + }, + { + "filename": "35-yamaguchi-shoin", + "data": "0x00031715070100030c0c000200050c09000400060c060002000d23010001000f2301000223048805230388012302230e8802230e8802230388032304880323018801230f880588032304880323018806880123028801ca0288012303880a8801ca05880a8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c880100050009880200" + }, + { + "filename": "35-yamagudhi-footballfish", + "data": "0x00031f15020900023402eb100008000134040001eb01da0e0007000134050001da015d01da0d0007000134040001da015d0101015d01da0c0008000134040001da015d01da0d000900023401eb020001da0e000c0002eb03830c0009000483016601eb0583090008000683013403830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + }, + { + "filename": "36-head-36-tokushima", + "data": "0x00031b15031500015402001200035403001100055402000b0005540100055402000400035402000c54030003001254030002001254040001001554020001001654010001001654010016540200020016540500025402000d54020009000b54040009000a5405000c00065406000c00045408000b00055408000c0003540900" + }, + { + "filename": "36-tokushima-awa-odori01", + "data": "0x000118140d010002f80800010004f8030001f90200010006f8010001f90200010007f801060200020005f80106020001f90200012303f90106030001f9030003f9030001010100010003010267030102000401026701010400030103670500039e0367050002e2019e0367050004e2014f060002e2044f05000200044f050001000144044f050001000344014f06000300010107000200010108000200012301440700" + }, + { + "filename": "36-tokushima-naruto-wakame", + "data": "0x00021a15070b000194035c04940b000348035c02480b00035c0100025c02000b00035c0200015c020004000748035c01480400020002480723035c012302480200010001480923025c0423014801000148042306de015c02de042301480148022302e90bde022301480148012304e905de015c05de01230148014807de045c06de0148014805de055c07de0148014806de035c03de02e903de014801480bde04e902de0148014811de014802480fde0248034801de055c07de034801001148010002000f48020004000b480400" + }, + { + "filename": "36-tokusima-whirlpools", + "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" + }, + { + "filename": "37-head-37-kagawa", + "data": "0x00041c15041200045402001000055403000d0001540200055403001200015401000154030018000400015404000254010001540100025408000800085401000154060007000c54050005000e5405000154010001540100115403000100165401000200165402000f540500025402000d54090002000554030002540c00020003541300010003541400020001541500" + }, + { + "filename": "37-kagawa-bonsai", + "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" + }, + { + "filename": "38-ehime-iyokan", + "data": "0x00051a140604000c4204000200084201e1074202000100024201250f42010002420125114201420125124201420125124214421442144214421442144214420100054203b30a42010002001042020003000e420300" + }, + { + "filename": "38-ehime-jakoten", + "data": "0x0006191406020010d20100010001d203d102d2018e0bd201d204d10ed201d204d101d2018e0ad2018e01d201d204d106d2018e07d201d204d10ed201d204d10ed201d204d10ed201d204d10ed201d204d10dd2018e01d204d10ed201d204d105d2018e01d2018e06d201d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" + }, + { + "filename": "38-ehime-mandarin-orange" + }, + { + "filename": "38-ehime-onsen01", + "data": "0x00031b15050700015504000155040001550400060002550300025503000255040005000255030002550300025505000400025503000255030002550600040002550300025503000255060004000255030002550300025506000400025503000255030002550600050002550300025503000255050006000255030002550300025504000200025502000255030002550300025501000155020001000255030002550300025503000255010002550100025503000255030002550300025503000255025502000255030002550300025504000255025502000155040001550400015505000255025512000255035510000355010003550e000355010002001255020004000e550400" + }, + { + "filename": "38-ehime-onsen02", + "data": "0x00031b150507000101040001010400010104000600020103000201030002010400050002010300020103000201050004000201030002010300020106000400020103000201030002010600040002010300020103000201060004000201030002010300020106000500020103000201030002010500060002010300020103000201040002000374013f0201033f0201033f02010274020001000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f02740274023f0201033f0201033f0201043f02740274023f0101043f0101043f0101053f02740274123f02740374103f0374010003740e3f0374010002001274020004000e740400" + }, + { + "filename": "38-ehime-onsen03", + "data": "0x00031c14050b00010c0b000900050c09000800016101740161017401610174016108000700017407de01740700020001610300016101de01ae05de01ae01de0161030001610200030001740161017401de04ae01de04ae01de0174016101740300030003de03ae053f03ae03de0300060003ae013f02e70126013f03ae0600060003ae053f03ae060006000bae060006000b3f0600013f03000f3f0300013f0100153f010002001321020004000f01040002000157010004ae015702ae015702ae015704ae0100015702000200010c010001ae0306015701ae033601ae0157030601ae0100010c02000200010c010001ae030602ae033602ae037401ae0100010c0200" + }, + { + "filename": "38-ehime-tai-somen", + "data": "0x00031c18010d000189020001890a000b0001890100015f01890100015f0189090008000357015f01890157015f01890157015f018902570600070003570b20015705000600025701890e200400050002570189102003000500015701890320018d0220018d0220018d0220018d0520020001200300025714200100010001200200015715200100010001890120010001571220028d01200100020001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a20010603200306012003000257018907060401080601000400035712060200040004570f06040004000157010002570400068904000157040004000157010001570f000157040004000157110001570400040001571600" + }, + { + "filename": "38-ehime-taimeshi", + "data": "0x00041a16060600082306000300030f0848022304000200050f01e90182020101e9015f01010248012303000100060f02e9018202e90182010101e901010148012302000100030f0282015f02e9015f02e9015f02e9015f01010148012301000100020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f02010148012301230148030f03e9044202e9028202e901480123012301480201025f0182044201010142015f04e90148012301230148015f028202e9044201e4014204e9015f0148012301230148018203e9015f064202e9015f01820101014801230123014803e9015f018201e9044201e9015f02820201014801230123014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e901010148012301000100012301480101018201e90101015f03e90182015f018202e9010101480123010002000123014803010182015f03e901010282010101480123020003000123024802010182015f02e9020102480123030004000223084802230400060008230600" + }, + { + "filename": "38-head-38-ehime", + "data": "0x00021b1a020f00015409000f00015409001000015408000e0001540a000d00035409000900015402000454080001540c00055402000354010002540b000e540a000f540a00095406000a000754080009000854080007000954090006000a54090005000b5409000300025401000a54090001000254030006540d000154040008540c00070007540b00080004540d00060005540e0007000254010001540e00060004540f0005000154010003540f0007000154010001540f00" + }, + { + "filename": "39-head-39-kochi", + "data": "0x00041a15030d0002540400015403000900085401000254030008000c54030007000e54020007000e54020006000854020007540300095406000454010004000754080003540100050005540a0002540100040006540b000154010001000154010006540e00020006540f00020006540f0002000454110003000454100002000454110001000154010001540100015411000154050001541000" + }, + { + "filename": "39-kochi-bonito", + "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" + }, + { + "filename": "40-fukuoka-mojiko", + "data": "0x00031e14030d0001960d0009000196030001960300019609000600019602000196072701960100019607000600019602000927010001960700060002610b27026106000500046102270106016b010101270106022704610500050001a501e0010601a5032701a501aa01a5032701a501e0010601a50500040009aa015709aa0400050001c1025701c1025701e9035701e9025701c1025701c105000200032701c1015701e001c102e001e903e001e902e001c1015701e001c1032702000100042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c1042701000100042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e001060157015702060157010601c10157010601c1010301460197034601970146010301c10157010601c101060157020601570557017f0257017f0103019701460397014601970103017f0257017f0557" + }, + { + "filename": "40-fukuoka-tenmangu", + "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" + }, + { + "filename": "40-head-40-fukuoka", + "data": "0x00021b18051200015403000b00045402000154040009000954040007000a54050008000a54040008000a5404000500015401000c5403000300015402000d5403000200035402000f54010014540100020014541154050004000c5406000600015402000754060009000654070008000854060007000954060006000954070005000b5406000500075401000354060006000454040002540600070002540d00070002540d00" + }, + { + "filename": "41-head-41-saga", + "data": "0x00031c19040300015414000200045412000200045412000300045406000354080001000154020003540100095407000200115403000254040010540100035403001554030015540100015401001354020002540100135402001454040001001254050001001254050002000d5401000254060004000a5403000154060006000554010001540b00050007540c00060006540c00070006540b00080006540a00090005540a000c0002540a00" + }, + { + "filename": "41-saga-mudskipper-fiddlercrab", + "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" + }, + { + "filename": "42-head-42-nagasaki", + "data": "0x00011a1908080001540900070002540900070002540900070001540a00070001540a00060001540b00060001540b00120012000b00015406000b0001540600120012000900015408001200080004540600050001540200015401000254060008000154020002540500050001540400015401000254040004000354040001540100025403000400025404000254020002540200030001540100015405000754010002540a000154020002540100035408000254010002540100015401000154080001540600" + }, + { + "filename": "42-nagasaki-meganebashi", + "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e04080208017e0400017e0408017e0400017e020802080600017e0208017e060002080108017e060004080600017e0108017e080002080800017e019108000291080001910191080002910800019102910700039107000191010003910300029102000391030002910100030004910600049103000700019101000191010001910800" + }, + { + "filename": "42-nagasaki-saseboburger", + "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" + }, + { + "filename": "43-head-43-kumamoto", + "data": "0x00031816040e00035403000a0002540300035402000800065401000354020007000c54010007000c54010008000b54010009000b5409000a5401000a000854020007000a540300060001540300075403000154010001540600075404000100025402000354010006540500035401000354020006540500035403000154010009540300010002540100015402000a5403000254050009540400010001540100015402000b54030003000154020003540100065404000a0004540600" + }, + { + "filename": "43-kumamoto-karashirenkon", + "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" + }, + { + "filename": "43-kumamoto-kumamotocastle", + "data": "0x00021d15020800019d12000700019d0101019d11000600059d10000600050e1000040002c80206019d020602c80e00040002c8029d0101029d02c80e00030002c8029d0323029d02c80d0003000501019d05010800019d04000300010e0223010e019d0101019d010e0223010e0700019d0101019d0300020001c8036f019d0323019d036f01c8060003060300020001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c802000100019d0101019d0c01026f020101c80192019d019202c8010001000392010e0623010e0223020e029201230192019d0301019d01010100010003920c0e0492052301920100059d0100010101000101010001010100010101fa010101fa0a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" + }, + { + "filename": "44-head-44-oita", + "data": "0x00041915040b0003540700060002540200055406000600095406000200025401000a54060001000c5401000154060001000a540100015408000b540a0001000a54020001540100035403001154040010540100015403000100025402000c5404000100035402000e5401000200025402000c54030007000c540100015407000d54010007000c54020008000254010004540200035401000b000254040001540300" + }, + { + "filename": "44-oita-beppujigoku", + "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" + }, + { + "filename": "44-oita_usajingu", + "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" + }, + { + "filename": "45-head-45-miyazaki", + "data": "0x0004161708070001540100015402000254060008540500085401000500075402000400095401000400085402000500075402000400075403000500065403000400075403000a540400010009540400020008540400030007540400030008540300050005540400050005540400070002540500060003540500080001540500" + }, + { + "filename": "45-miyazaki-aoshima", + "data": "0x00061d14030500109205000600027f0192047f0192047f0192017f0600080001bf040001bf040001bf0700010001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf0700010004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf01920600030005e102bf080002bf0600030003e1011b019202bf010006af019202bf0600020002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d60100010001e1011b02e1019d01e1019209af019201af01990221039901000100011b03e1019d0caf01d6026001d6016001d60200" + }, + { + "filename": "45-miyazaki-chickennanban", + "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" + }, + { + "filename": "46-head-46-kagoshima", + "data": "0x0003181f03070001540100015402000254070007000754070006000a54050007000954050007000a5404000200015403000b54040007000b54030001000154060005540200045402000154080003540300065409000354010008540900025403000754080003540400055401000600065403000454020007000554040004540100070006540300045401000c0001540200045402000f00035403000e0002540500150015001500030001540f0001540100130001540100120002540100120002540100120001540200060002540300015405000254020009000154010002540400025402000a0004540700" + }, + { + "filename": "46-kagoshima-goromon", + "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" + }, + { + "filename": "46-kagoshima-shirokuma", + "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" + }, + { + "filename": "47-head-47-okinawa", + "data": "0x00011c15050f00015407000e000154070001541700170017001300015403001300025402001200035402000b0001540500045402000d00025402000354030001540c00075403000e00045405000d00035407000b00045408000a0002540b000a0003540a000b0003540900090003540b0003000154040003540c00090003540b00090002540c00" + }, + { + "filename": "47-okinawa-goya-chanpuru", + "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" + }, + { + "filename": "47-okinawa-siisa", + "data": "0x00041d14030200033706000437060003370200030004370200033702000337020004370300040008370200083704000300023703460137034602370246023702460337030003000237026602370266043701230337012303370300020001460237016601230237016601230337012301370123013701230137012302370146020001000246143702460100020001460337042307370423023701460200010003460837024606370123013702460200030002460637014602000146063702460300030002370746020007460237030001000146010003370246023701460137020001370146023702460337010001460100024601000937020009370100024601460b3702000b37014601000a370123020001230a3701000200013701460837022308370146013702000400023701660200023701660200016602370200016602370400" + } + ] + } + } \ No newline at end of file diff --git a/contract/test/image-original-nouns-data.json b/contract/test/image-original-nouns-data.json new file mode 100644 index 00000000..98f8e212 --- /dev/null +++ b/contract/test/image-original-nouns-data.json @@ -0,0 +1,1943 @@ +{ + "bgcolors": ["d5d7e1", "e1d7d5"], + "palette": [ + "", + "ffffff", + "c5b9a1", + "cfc2ab", + "63a0f9", + "807f7e", + "caeff9", + "5648ed", + "5a423f", + "b9185c", + "b87b11", + "fffdf2", + "4b4949", + "343235", + "1f1d29", + "068940", + "867c1d", + "ae3208", + "9f21a0", + "f98f30", + "fe500c", + "d26451", + "fd8b5b", + "5a65fa", + "d22209", + "e9265c", + "c54e38", + "80a72d", + "4bea69", + "34ac80", + "eed811", + "62616d", + "ff638d", + "8bc0c5", + "c4da53", + "000000", + "f3322c", + "ffae1a", + "ffc110", + "505a5c", + "ffef16", + "fff671", + "fff449", + "db8323", + "df2c39", + "f938d8", + "5c25fb", + "2a86fd", + "45faff", + "38dd56", + "ff3a0e", + "d32a09", + "903707", + "6e3206", + "552e05", + "e8705b", + "f38b7c", + "e4a499", + "667af9", + "648df9", + "7cc4f2", + "97f2fb", + "a3efd0", + "87e4d9", + "71bde4", + "ff1a0b", + "f78a18", + "2b83f6", + "d62149", + "834398", + "ffc925", + "d9391f", + "bd2d24", + "ff7216", + "254efb", + "e5e5de", + "00a556", + "c5030e", + "abf131", + "fb4694", + "e7a32c", + "fff0ee", + "009c59", + "0385eb", + "00499c", + "e11833", + "26b1f3", + "fff0be", + "d8dadf", + "d7d3cd", + "1929f4", + "eab118", + "0b5027", + "f9f5cb", + "cfc9b8", + "feb9d5", + "f8d689", + "5d6061", + "76858b", + "757576", + "ff0e0e", + "0adc4d", + "fdf8ff", + "70e890", + "f7913d", + "ff1ad2", + "ff82ad", + "535a15", + "fa6fe2", + "ffe939", + "ab36be", + "adc8cc", + "604666", + "f20422", + "abaaa8", + "4b65f7", + "a19c9a", + "58565c", + "da42cb", + "027c92", + "cec189", + "909b0e", + "74580d", + "027ee6", + "b2958d", + "efad81", + "7d635e", + "eff2fa", + "6f597a", + "d4b7b2", + "d18687", + "cd916d", + "6b3f39", + "4d271b", + "85634f", + "f9f4e6", + "f8ddb0", + "b92b3c", + "d08b11", + "257ced", + "a3baed", + "5fd4fb", + "c16710", + "a28ef4", + "3a085b", + "67b1e3", + "1e3445", + "ffd067", + "962236", + "769ca9", + "5a6b7b", + "7e5243", + "a86f60", + "8f785e", + "cc0595", + "42ffb0", + "d56333", + "b8ced2", + "b91b43", + "f39713", + "e8e8e2", + "ec5b43", + "235476", + "b2a8a5", + "d6c3be", + "49b38b", + "fccf25", + "f59b34", + "375dfc", + "99e6de", + "27a463", + "554543", + "b19e00", + "d4a015", + "9f4b27", + "f9e8dd", + "6b7212", + "9d8e6e", + "4243f8", + "fa5e20", + "f82905", + "555353", + "876f69", + "410d66", + "552d1d", + "f71248", + "fee3f3", + "c16923", + "2b2834", + "0079fc", + "d31e14", + "f83001", + "8dd122", + "fffdf4", + "ffa21e", + "e4afa3", + "fbc311", + "aa940c", + "eedc00", + "fff006", + "9cb4b8", + "a38654", + "ae6c0a", + "2bb26b", + "e2c8c0", + "f89865", + "f86100", + "dcd8d3", + "049d43", + "d0aea9", + "f39d44", + "eeb78c", + "f9f5e9", + "5d3500", + "c3a199", + "aaa6a4", + "caa26a", + "fde7f5", + "fdf008", + "fdcef2", + "f681e6", + "018146", + "d19a54", + "9eb5e1", + "f5fcff", + "3f9323", + "00fcff", + "4a5358", + "fbc800", + "d596a6", + "ffb913", + "e9ba12", + "767c0e", + "f9f6d1", + "d29607", + "f8ce47", + "395ed1", + "ffc5f0", + "cbc1bc", + "d4cfc0" + ], + "images": { + "bodies": [ + { + "filename": "body-bege-bsod", + "data": "0x0015171f090e020e020e020e02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02" + }, + { + "filename": "body-bege-crt", + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + }, + { + "filename": "body-blue-sky", + "data": "0x0015171f090e040e040e040e04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04" + }, + { + "filename": "body-bluegrey", + "data": "0x0015171f090e050e050e050e05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05" + }, + { + "filename": "body-cold", + "data": "0x0015171f090e060e060e060e06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06" + }, + { + "filename": "body-computerblue", + "data": "0x0015171f090e070e070e070e07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07" + }, + { + "filename": "body-darkbrown", + "data": "0x0015171f090e080e080e080e08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08" + }, + { + "filename": "body-darkpink", + "data": "0x0015171f090e090e090e090e09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09" + }, + { + "filename": "body-foggrey", + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + }, + { + "filename": "body-gold", + "data": "0x0015171f090e0a0e0a0e0a0e0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a" + }, + { + "filename": "body-grayscale-1", + "data": "0x0015171f090e0b0e0b0e0b0e0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b" + }, + { + "filename": "body-grayscale-7", + "data": "0x0015171f090e0c0e0c0e0c0e0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c" + }, + { + "filename": "body-grayscale-8", + "data": "0x0015171f090e0d0e0d0e0d0e0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d" + }, + { + "filename": "body-grayscale-9", + "data": "0x0015171f090e0e0e0e0e0e0e0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e" + }, + { + "filename": "body-green", + "data": "0x0015171f090e0f0e0f0e0f0e0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f" + }, + { + "filename": "body-gunk", + "data": "0x0015171f090e100e100e100e10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10" + }, + { + "filename": "body-hotbrown", + "data": "0x0015171f090e110e110e110e11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11" + }, + { + "filename": "body-magenta", + "data": "0x0015171f090e120e120e120e12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12" + }, + { + "filename": "body-orange-yellow", + "data": "0x0015171f090e130e130e130e13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13" + }, + { + "filename": "body-orange", + "data": "0x0015171f090e140e140e140e14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14" + }, + { + "filename": "body-peachy-B", + "data": "0x0015171f090e150e150e150e15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15" + }, + { + "filename": "body-peachy-a", + "data": "0x0015171f090e160e160e160e16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16" + }, + { + "filename": "body-purple", + "data": "0x0015171f090e170e170e170e17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17" + }, + { + "filename": "body-red", + "data": "0x0015171f090e180e180e180e18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18" + }, + { + "filename": "body-redpinkish", + "data": "0x0015171f090e190e190e190e19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19" + }, + { + "filename": "body-rust", + "data": "0x0015171f090e1a0e1a0e1a0e1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a" + }, + { + "filename": "body-slimegreen", + "data": "0x0015171f090e1b0e1b0e1b0e1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b" + }, + { + "filename": "body-teal-light", + "data": "0x0015171f090e1c0e1c0e1c0e1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c" + }, + { + "filename": "body-teal", + "data": "0x0015171f090e1d0e1d0e1d0e1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d" + }, + { + "filename": "body-yellow", + "data": "0x0015171f090e1e0e1e0e1e0e1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e" + } + ], + "accessories": [ + { + "filename": "accessory-1n", + "data": "0x0017141e0d0100011f0500021f05000100011f0300011f01000100011f0200011f02000300011f03000200011f0200021f0100011f0200011f0100011f0400011f0100011f" + }, + { + "filename": "accessory-aardvark", + "data": "0x0018151a0d020003200100012001000100052002000120010001200100012001000220" + }, + { + "filename": "accessory-axe", + "data": "0x0017141d0e01010521010104210100010103210200010101210100012102000101020001210200030001210200030001210200" + }, + { + "filename": "accessory-belly-chameleon", + "data": "0x0017121e0d010001220100012201000500022201000222050002220100022205000222010001220100010001220300" + }, + { + "filename": "accessory-bird-flying", + "data": "0x0018151a0d0100022302000223010001230200022302000123030002230300" + }, + { + "filename": "accessory-bird-side", + "data": "0x0017131c0d040001240100030002240100042401230125010004240100020003240100010001240400" + }, + { + "filename": "accessory-bling-anchor", + "data": "0x0015141d0d01260500012601000126030001260100020001260100012602000300012603000300012603000200032602000300012603000100012601000126010001260100020003260200" + }, + { + "filename": "accessory-bling-anvil", + "data": "0x0015161e0b0127090001270100012707000127010002000127050001270200030001270300012703000400032704000500010d05000200020d052702000300020d032703000400030d04000300020d03270300" + }, + { + "filename": "accessory-bling-arrow", + "data": "0x0018141e0d0400032605000226040001260100012603000126030001000226040003260400010001260500" + }, + { + "filename": "accessory-bling-cheese", + "data": "0x0015141e0c012606000126010001260400012601000200012602000126020003000226030002000126020001260200010006260100020001260128012601280126010003000426010004000126012801260100050002260100" + }, + { + "filename": "accessory-bling-gold-ingot", + "data": "0x0015141b0c012606000126010001260400012601000200012602000126020003000226030001000629010001000426022901000100042602290100" + }, + { + "filename": "accessory-bling-love", + "data": "0x0015141d0c01260600012601000126040001260100020001260200012602000300022603000200012602000126020001000126012804260100010006260100020004260200030002260300" + }, + { + "filename": "accessory-bling-mask", + "data": "0x0015141e0c01260600012601000126040001260100020001260200012602000300022603000100062601000100012601000226010001260100010006260100020004260200010001260100022601000126010001000126040001260100" + }, + { + "filename": "accessory-bling-rings", + "data": "0x0017141d0d0300032a01000200012a0300012a0100032a0200012a012a0100012a0100012a0100012a012a0200032a0100012a0300012a02000100032a0300" + }, + { + "filename": "accessory-bling-scissors", + "data": "0x0016131c0e012b0300012b012b0300012b0100012b0100012b01000100012b0100012b01000200012b0200022b0100022b022b0100022b" + }, + { + "filename": "accessory-bling-sparkles", + "data": "0x0016141d0c010001260600032601000126020001260100012602000126030003000326020001000726030003260200040001260300040001260300" + }, + { + "filename": "accessory-body-gradient-checkerdisco", + "data": "0x0015171f09022c0223022c0223022c0223022c022c0223022c0223022c0223022c0223022d0223022d0223022d02230223022d0223022d0223022d0223022e01000123022e0223022e0223022e022e01000123022e0223022e0223022e02230100012f0223022f0223022f022302230100012f0223022f0223022f0223023001000123023002230230022302300230010001230230022302300223023002230100013102230231022302310223" + }, + { + "filename": "accessory-body-gradient-dawn", + "data": "0x0015171f090e320e320e330e33021101000b11021101000b11023401000b34023401000b34023501000b35023501000b35023601000b36" + }, + { + "filename": "accessory-body-gradient-dusk", + "data": "0x0015171f090e320e320e240e24023701000b37023701000b37023701000b37023701000b37023801000b38023801000b38023901000b39" + }, + { + "filename": "accessory-body-gradient-glacier", + "data": "0x0015171f090e3a013a013b013a013b013a013b013a013b013a013b013a013b013a013b0e3b013b0104013b0104013b0104013b0104013b0104013b0104013b0104020401000b04020401000b04020401000b040104013c0100013c0104013c0104013c0104013c0104013c0104013c023c01000b3c013c013d0100013d013c013d013c013d013c013d013c013d013c013d023d01000b3d" + }, + { + "filename": "accessory-body-gradient-ice", + "data": "0x0015171f090e3e0e3e0e3f0e3f023f01000b3f023f01000b3f023c01000b3c023c01000b3c023c01000b3c023c01000b3c024001000b40" + }, + { + "filename": "accessory-body-gradient-pride", + "data": "0x0015171f090e410e410e420e42022a01000b2a022a01000b2a020f01000b0f020f01000b0f024301000b43024301000b43021201000b12" + }, + { + "filename": "accessory-body-gradient-redpink", + "data": "0x0015171f090e440e440e440e09020901000b09020901000b09020901000b09020901000b09020901000b09024501000b45024501000b45" + }, + { + "filename": "accessory-body-gradient-sunset", + "data": "0x0015171f090e460e460e460e25024201000b42021401000b14024701000b47024701000b47024801000b48024801000b48024801000b48" + }, + { + "filename": "accessory-carrot", + "data": "0x0018131d0e0200011d0100011d0300011d010002000249010001000249020001000149030001490400" + }, + { + "filename": "accessory-chain-logo", + "data": "0x0018171c09012601000326010003260100032601000100012603000126030001260300012602260200032601000326010002260100012603000126030001260300012601260200022601000326010003260100" + }, + { + "filename": "accessory-checker-RGB", + "data": "0x0015171f090224021c024a0224021c024a02240224021c024a0224021c024a0224024a0224021c024a0224021c024a024a0224021c024a0224021c024a021c0100014a0224021c024a0224021c021c0100014a0224021c024a0224021c02240100011c024a0224021c024a022402240100011c024a0224021c024a0224024a01000124021c024a0224021c024a024a01000124021c024a0224021c024a021c0100014a0224021c024a0224021c" + }, + { + "filename": "accessory-checker-bigwalk-blue-prime", + "data": "0x0015171f09040003070100030701000207030701000307010003070300030701000307070003070700030701000600030701000307010003000207010003070100030701000107020002070100030705000107020002070700020701070700030701000207040003070100030701000207020702000307010003070300" + }, + { + "filename": "accessory-checker-bigwalk-greylight", + "data": "0x0015171f090400034b0100034b0100024b034b0100034b0100034b0300034b0100034b0700034b0700034b01000600034b0100034b01000300024b0100034b0100034b0100014b0200024b0100034b0500014b0200024b0700024b014b0700034b0100024b0400034b0100034b0100024b024b0200034b0100034b0300" + }, + { + "filename": "accessory-checker-bigwalk-rainbow", + "data": "0x0015171f090400034c010003460100021403120100034c01000346030003120100034c0400031203120400034d01000312030003140100034d010003120246010003140100034d040002460100031404000346010002460400034c010003460100030002120100034c010003460100014d020002120100034c04000112014d020002120400034d01000112" + }, + { + "filename": "accessory-checker-spaced-black", + "data": "0x0015171f0903000223040002230300030002230400022303000e0002230400022304000223022304000223040002230e0003000223040002230300030002230400022303000e000223040002230400022302230400022304000223" + }, + { + "filename": "accessory-checker-spaced-white", + "data": "0x0015171f0903000201040002010300030002010400020103000e0002010400020104000201020104000201040002010e0003000201040002010300030002010400020103000e000201040002010400020102010400020104000201" + }, + { + "filename": "accessory-checker-vibrant", + "data": "0x0015171f09024e0243024f024e0243024f024e024e0243024f024e0243024f024e024f024e0243024f024e0243024f024f024e0243024f024e0243024f02430100014f024e0243024f024e024302430100014f024e0243024f024e0243024e01000143024f024e0243024f024e024e01000143024f024e0243024f024e024f0100014e0243024f024e0243024f024f0100014e0243024f024e0243024f02430100014f024e0243024f024e0243" + }, + { + "filename": "accessory-checkers-big-green", + "data": "0x0015171f09030f0300030f0300020f030f0300030f0300020f030f0300030f0300020f0300030f0300030f02000300030f0300030f02000300030f0300030f0200020f0400030f0300020f020f0400030f0300020f020f0400030f0300020f0300030f0300030f02000300030f0300030f0200" + }, + { + "filename": "accessory-checkers-big-red-cold", + "data": "0x0015171f090319030003190300021903190300031903000219031903000319030002190300031903000319020003000319030003190200030003190300031902000219040003190300021902190400031903000219021904000319030002190300031903000319020003000319030003190200" + }, + { + "filename": "accessory-checkers-black", + "data": "0x0015171f0902000223020002230200022302000200022302000223020002230200022302000223020002230200022302230200022302000223020002230300012302000223020002230200030001230200022302000223020002230200022302000223020002230223020002230200022302000223030001230200022302000223020003000123020002230200022302000223020002230200022302000223" + }, + { + "filename": "accessory-checkers-blue", + "data": "0x0015171f09024a0200024a0200024a0200024a024a0200024a0200024a0200024a0200024a0200024a0200024a02000200024a0200024a0200024a0200024a0200024a0200024a0200024a024a0200024a0200024a0200024a0300014a0200024a0200024a02000300014a0200024a0200024a0200024a0200024a0200024a0200024a024a0200024a0200024a0200024a0300014a0200024a0200024a0200" + }, + { + "filename": "accessory-checkers-magenta-80", + "data": "0x0015171f0902000220020002200200022002000200022002000220020002200200022002000220020002200200022002200200022002000220020002200300012002000220020002200200030001200200022002000220020002200200022002000220020002200220020002200200022002000220030001200200022002000220020003000120020002200200022002000220020002200200022002000220" + }, + { + "filename": "accessory-chicken", + "data": "0x0018131d0d0300024701000201020001010150010004010100020002010200020001010300020001500300" + }, + { + "filename": "accessory-cloud", + "data": "0x0018131a0d020003010100010005010601" + }, + { + "filename": "accessory-clover", + "data": "0x0017151e0d0200021d04000200031d03000100011d0100011d0100021d0100031d0100031d0100021d0100011d0100011d02000200031d03000200021d0100011d02000600021d" + }, + { + "filename": "accessory-collar-sunset", + "data": "0x00151717090e190e260e42" + }, + { + "filename": "accessory-cow", + "data": "0x0018141c0d0500015101000100035101230151013801510100015101230251010001510100015102380151010002000151020001510100" + }, + { + "filename": "accessory-decay-gray-dark", + "data": "0x0015171f090e27020006270300032702000b270100010009270100022701000227010001270100032702000427022701000827030001270200012702000327050003000827030003000127040002270100022701000100012701000b2703000b27" + }, + { + "filename": "accessory-decay-pride", + "data": "0x0015171f090e27024106270341032702420b27014201420927014202270142022701000127012a0327022a0427022701000827032a0127010f01000127020f0327050f020f01000827030f024301000127044302270143022701430143012701000b27021201000b27" + }, + { + "filename": "accessory-dinosaur", + "data": "0x0017131d0d020003520100020001520100015201000200045202000352010001520100035201000652030001520200" + }, + { + "filename": "accessory-dollar-bling", + "data": "0x0015141e0c01260600012601260600012601000126040001260100020004260200030002260300020004260200020002260400040002260200020004260200030002260300" + }, + { + "filename": "accessory-dragon", + "data": "0x0017141e0d020f0100030f01000100030f0100020f020f0300010f01000300030f01000100020f0400010f0300020f01000100030f0200010f0200010f0400" + }, + { + "filename": "accessory-ducky", + "data": "0x0018131a0e0128010002280100010003280114010003280100" + }, + { + "filename": "accessory-eth", + "data": "0x0018131d0e020001530200020001530200010001530154015301000554010003530100020001530200" + }, + { + "filename": "accessory-eye", + "data": "0x0018151c0d02000454020001000154010002540100015401000154020002540200015401000154040001540100020004540200" + }, + { + "filename": "accessory-flash", + "data": "0x0017151d0d0100010106000200020104000300030102000801020003010300040002010200060001010100" + }, + { + "filename": "accessory-fries", + "data": "0x0017131d0e0126010a0126010a01260126010a0126010a012605550155032601550155022602550155012603550555" + }, + { + "filename": "accessory-glasses-logo-sun", + "data": "0x0018161a0d0723020003230100052303230100032301000123" + }, + { + "filename": "accessory-glasses-logo", + "data": "0x0018161a0d07560200015601000156010001560100035603560100035601000156" + }, + { + "filename": "accessory-glasses", + "data": "0x0017141d0d07560156010002560100025602000256010002560700071d011d0100021d0100021d0200021d0100021d" + }, + { + "filename": "accessory-grid-simple-bege", + "data": "0x0016171e09015701000157010001570100015701000157010001570100015701000e00010001570100015701000157010001570100015701000157010001570e000157030001570100015701000157010001570100015701000e00010001570100015701000157010001570100015701000157010001570e00015703000157010001570100015701000157010001570100" + }, + { + "filename": "accessory-heart", + "data": "0x0018141d0d0100025801000258010007580758010005580100020003580200030001580300" + }, + { + "filename": "accessory-hoodiestrings-uneven", + "data": "0x0016121b0f0101010001010101010001010101010001010101010001590101020001590200" + }, + { + "filename": "accessory-id", + "data": "0x0017151a10020001010200052605010501" + }, + { + "filename": "accessory-infinity", + "data": "0x0017141e0d0100020b0400010b0200010b0300010b06000100030b03000300030b01000600010b0300010b0200010b0400020b0100" + }, + { + "filename": "accessory-insignia", + "data": "0x0016131d0e0200015b02000100015b012b015b01000200015b02000100035b0100015b032b015b025b022b015b015b032b015b0100035b0100" + }, + { + "filename": "accessory-leaf", + "data": "0x0018141d0d0300045c0200055c0200055c0200055c0200045c0100025c0500" + }, + { + "filename": "accessory-lightbulb", + "data": "0x0017121c0e045d045d045d0100025d01000100025e01000100025e0100" + }, + { + "filename": "accessory-lines-45-greens", + "data": "0x0015171f090200010f0200010f0200010f0200010f0200015c0200015c0200015c0200015c0200015c01000100010f0200010f0200010f0200010f0200010f0200015c0200015c0200015c0200015c0200010f0200010f0200010f0200010f0200010f01000100015c0200015c0200015c0200015c0200015c0500010f0200010f0200010f0200015c0200015c0200015c0200015c0200015c01000100010f0200010f0200010f0200010f0200010f0500015c0200015c0200015c0200010f0200010f0200010f0200010f0200010f0100" + }, + { + "filename": "accessory-lines-45-rose", + "data": "0x0015171f090200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f01000100015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f01000100015f0200015f0200015f0200015f0200015f0500015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f01000100015f0200015f0200015f0200015f0200015f0500015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0100" + }, + { + "filename": "accessory-lp", + "data": "0x0016161e0d03000323030001000723010001000723010003230301032303230101010001010323032303010323010007230100010007230100030003230300" + }, + { + "filename": "accessory-marsface", + "data": "0x0018131d0e040001230223010002230300022302000323030002230523" + }, + { + "filename": "accessory-matrix-white", + "data": "0x0018131c0e010b0100010b0100010b0500010b0100010b0100010b0500010b0100010b0100010b" + }, + { + "filename": "accessory-moon-block", + "data": "0x0017131d0e056001600100016001000160010001600100016001000160010001600100016001000160010001600100036001000160016001000360" + }, + { + "filename": "accessory-none", + "data": "0x0000000000" + }, + { + "filename": "accessory-oldshirt", + "data": "0x0015171f090e610e610461075803610e6102620100026103580261015803610261010001610158036102580461026201000361015807610261010001610258016104580361026201000b6102610100016107580361026201000b61" + }, + { + "filename": "accessory-pizza-bling", + "data": "0x0015141d0c0126060001260100012604000126010002000126020001260200030002260300030002260300020004260200020004260200010006260100010006260100" + }, + { + "filename": "accessory-pocket-pencil", + "data": "0x00171519100100013703000100010103000563" + }, + { + "filename": "accessory-rain", + "data": "0x0018131d0e040001430100014302000143010001430300030001430100014302000143010001430400" + }, + { + "filename": "accessory-rainbow-steps", + "data": "0x0017171c090b000312070004180312030004140418031202460100041404180300024601000414070002460c00" + }, + { + "filename": "accessory-rgb", + "data": "0x0018151e0d030002640300020004640200020004640200010002650264025a01000465045a0465045a010002650200025a0100" + }, + { + "filename": "accessory-robot", + "data": "0x0019171b0901230200012302000123020001230200012301000e00022301000b23" + }, + { + "filename": "accessory-safety-vest", + "data": "0x0015171f0b0413030005130413030005130413030005130413030005130100036603000566010003660300056601000366030005660100036603000566010003130300051301000313030005130100031303000513" + }, + { + "filename": "accessory-scarf-clown", + "data": "0x0015151f0c031c0300031c031c0300031c031c0300031c032303000323032303000323032303000323031c0300031c031c0300031c031c0300031c032303000323032303000323" + }, + { + "filename": "accessory-secret-x", + "data": "0x0018121b0e016702000167010002670100010002670100016702000167" + }, + { + "filename": "accessory-shirt-black", + "data": "0x0015151f0c0923052301000323022301000223020002230123020001230168030001230300022304000300022304000300022304000300022304000300012301680400030002230400030002230400" + }, + { + "filename": "accessory-shrimp", + "data": "0x0018121c0e0100025f0100035f0100025f02000100015f0220020001200100" + }, + { + "filename": "accessory-slimesplat", + "data": "0x0017121d0d0200014e0100014e014e0100024e01000100034e01000100024e0100014e014e0100014e02000300014e01000100014e0300" + }, + { + "filename": "accessory-small-bling", + "data": "0x001514170d01260500012601000126030001260100020003260200" + }, + { + "filename": "accessory-snowflake", + "data": "0x0017141d0d01000101030001010100020101000101010002010200030102000100050101000200030102000201010001010100020101000101030001010100" + }, + { + "filename": "accessory-stains-blood", + "data": "0x0016151d0d05000219010002000119010004190400041905000219010001190100021904000200021904000800010001190600" + }, + { + "filename": "accessory-stains-zombie", + "data": "0x0017151e0d0100010f060008000200020f0400010f0100020f04000500020f01000400040f0200010f0100040f0500020f0100" + }, + { + "filename": "accessory-stripes-and-checks", + "data": "0x0015171f090e690e430e280e1c02010100012302010223020102230201020101000123020102230201022302010223010001010223020102230201022302230100010102230201022302010223026901000b69024301000b43022801000b28" + }, + { + "filename": "accessory-stripes-big-red", + "data": "0x0015171d090e240e240e240e000e000e00022401000b24022401000b24022401000b24" + }, + { + "filename": "accessory-stripes-blit", + "data": "0x0015171b090e5a0e5a0e5a0e00026a01000b6a0e00022a01000b2a" + }, + { + "filename": "accessory-stripes-blue-med", + "data": "0x0015171f090e430e000e430e00024301000b430e00024301000b430e00024301000b430e00024301000b43" + }, + { + "filename": "accessory-stripes-brown", + "data": "0x0015171f090e350e000e350e00023501000b350e00023501000b350e00023501000b350e00023501000b35" + }, + { + "filename": "accessory-stripes-olive", + "data": "0x0015171f090e6b0e000e6b0e00026b01000b6b0e00026b01000b6b0e00026b01000b6b0e00026b01000b6b" + }, + { + "filename": "accessory-stripes-red-cold", + "data": "0x0015171f090e190e000e190e00021901000b190e00021901000b190e00021901000b190e00021901000b19" + }, + { + "filename": "accessory-sunset", + "data": "0x0017141a0d0300012603000100012603000126010002000326020001260100032601000126" + }, + { + "filename": "accessory-taxi-checkers", + "data": "0x0017171a090266020d0266020d0266020d02660266020d0266020d0266020d0266020d01000166020d0266020d0266020d020d01000166020d0266020d0266020d" + }, + { + "filename": "accessory-tee-yo", + "data": "0x0015171f0902280200012804000128030001280228030004280400012803280900022803280900022802280200012801000128030001280100022802280300012801000228010001280100022802280300012801000228030002280228080001280100022802280a00022802280a00022802280a000228" + }, + { + "filename": "accessory-text-yolo", + "data": "0x0017131d0d014e0100014e010002570100014e020002570100014e02000257060001570200024e010001570200024e010002570100024e0100" + }, + { + "filename": "accessory-think", + "data": "0x0018131c0e0301020003010200050002000101020004000101" + }, + { + "filename": "accessory-tie-black-on-white", + "data": "0x0015121f0e0423014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b" + }, + { + "filename": "accessory-tie-dye", + "data": "0x0016151f0b0200023b0100016c0200016c0100013b0100033b0200016c02000100013b0300013b0200026c0300026d0100013b0100026c0200016d0100011c016d013b0100016c01000100016d0100011c016c013b0100016c0100011c0100016d0100011c0100026c03000100016d0200011c0300011c01000200016d0200031c0100011c0100016d0200016d0100021c0200" + }, + { + "filename": "accessory-tie-purple-on-white", + "data": "0x0015121f0e046e014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b" + }, + { + "filename": "accessory-tie-red", + "data": "0x0016111e0f024102410200024102410241024102410241" + }, + { + "filename": "accessory-txt-a2+b2", + "data": "0x0017151d0d0200016f0500026f0600026f0100016f04000200036f03000300016f0100016f0100016f0500026f01000500026f0100" + }, + { + "filename": "accessory-txt-cc", + "data": "0x0017151d0c010007700100017007000170017001000270010002700100017001700100017002000170020001700170010002700100027001000170017007000170010007700100" + }, + { + "filename": "accessory-txt-cc2", + "data": "0x0017141c0d0371010003710171030001710200017103000171020001710300017102000171030001710200037101000371" + }, + { + "filename": "accessory-txt-copy", + "data": "0x0017131d0d02720100027201000172020002720100027201000272010006000272010001720100017202720100027201000172020001720200" + }, + { + "filename": "accessory-txt-dao-black", + "data": "0x0018151b0c02230200012302000123010001230100022301000223010001230123010005230100012302230100012301000123010001230100" + }, + { + "filename": "accessory-txt-doom", + "data": "0x0016161d0b0200012308000323080001230100032306000100022301000323040003000223010003230200050002230100032308000123010001230a000123" + }, + { + "filename": "accessory-txt-dope-text", + "data": "0x0017131d0d01000173020001730100027301000173010001730273020001730100060002730100017302000273010002730100017302000373" + }, + { + "filename": "accessory-txt-foo-black", + "data": "0x0019151b0d0523010002230223010002230100022301230200022301000223" + }, + { + "filename": "accessory-txt-ico", + "data": "0x0019171d09027401000b74027401000b74027401000b74027401000b74027401000b74" + }, + { + "filename": "accessory-txt-io", + "data": "0x0018131c0d01560300015601000156020001560200015601000156010002560100015602000256015603000256" + }, + { + "filename": "accessory-txt-lmao", + "data": "0x0017131d0d013e0300023e013e0200023e0100023e0100013e020006000100013e0200023e013e0100013e0100023e013e0100013e0100023e" + }, + { + "filename": "accessory-txt-lol", + "data": "0x001715190d01010200020101000101010001010200020101000101010002010100020101000201" + }, + { + "filename": "accessory-txt-mint", + "data": "0x0016141c0d0600011407000214010001140200011401140100011401000114010001140700021402000314011401000114020001140100" + }, + { + "filename": "accessory-txt-nil-grey-dark", + "data": "0x0018151a0d037501000175010001750100017501000175010001750100017501000175010001750100017501000275" + }, + { + "filename": "accessory-txt-noun-f0f", + "data": "0x0017131e0d010002690100016901000100016901000269010006000269010001690100016902690100036906000100026901000169010001000169010002690100" + }, + { + "filename": "accessory-txt-noun-green", + "data": "0x0017131e0d0100023e0100013e01000100013e0100023e01000600023e0100013e0100013e023e0100033e06000100023e0100013e01000100013e0100023e0100" + }, + { + "filename": "accessory-txt-noun-multicolor", + "data": "0x0017131e0d010002170100011701000100011701000217010006000276010001140100011402760100031406000100020f0100010f01000100010f0100020f0100" + }, + { + "filename": "accessory-txt-noun", + "data": "0x0016131d0d0100026c0100016c01000100016c0100026c01000600026c0100016c0100016c026c0100036c06000100026c0100016c01000100016c0100026c0100" + }, + { + "filename": "accessory-txt-pi", + "data": "0x0018131b0d0100051f011f0100011f0100011f01000200011f0100011f01000200011f0200011f" + }, + { + "filename": "accessory-txt-pop", + "data": "0x0017131d0d022804000228040001280100022802000200022802000400022804000228040001280100" + }, + { + "filename": "accessory-txt-rofl", + "data": "0x0017131d0d02010200027702010200027701010100010101000277060003370100012601000237020001260100013703000226" + }, + { + "filename": "accessory-txt-we", + "data": "0x0018151d0c0700011c0100040001560100011c0100011c02000156010001560100031c015601000156010001560100011c0200015601000156010001560200011c010001000156010001560500" + }, + { + "filename": "accessory-txt-yay", + "data": "0x0018151a0c0143010001430100011c0100014301000143010001430100031c010001430100010001430100011c0100011c010001430100" + }, + { + "filename": "accessory-wall", + "data": "0x0015171f090a00016203000a0001620300026201000b62040001620900040001620900026201000462010006620a00016203000a0001620300026201000b62040001620900040001620900" + }, + { + "filename": "accessory-wave", + "data": "0x0017151b0d0100035604000256020001560300020001560200015602000200015603000256010001560600" + }, + { + "filename": "accessory-wet-money", + "data": "0x0018141e0d017802790178037902790178017a0178027902790178017a0178027903790178027901780100010401000104010001040100010001040500050001040100" + }, + { + "filename": "accessory-woolweave-bicolor", + "data": "0x0015171f09037b010003140100037b0100027b0e00017b010003140100037b010003140100010001140300017b030001140300017b01140200027b010003140100037b01000e00027b020003140100037b01000214030001140300017b030001140200017b01140200037b010003140100027b0e00017b0200027b010003140100037b0100" + }, + { + "filename": "accessory-woolweave-dirt", + "data": "0x0015171f09037c0100037c0100037c0100027c0e00017c0100037c0100037c0100037c01000100017c0300017c0300017c0300017c017c0200027c0100037c0100037c01000e00027c0200037c0100037c0100027c0300017c0300017c0300017c0200027c0200037c0100037c0100027c0e00017c0200027c0100037c0100037c0100" + }, + { + "filename": "accessory-yingyang", + "data": "0x0018121b0e040d020d024b020d024b044b" + }, + { + "filename": "body-bege", + "data": "0x0015171f090e020e020e020e02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02" + }, + { + "filename": "body-gray-scale-1", + "data": "0x0015171f090e0b0e0b0e0b0e0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b" + }, + { + "filename": "body-gray-scale-9", + "data": "0x0015171f090e0e0e0e0e0e0e0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e" + }, + { + "filename": "body-ice-cold", + "data": "0x0015171f090e060e060e060e06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06" + } + ], + "heads": [ + { + "filename": "head-aardvark", + "data": "0x00021e140605000137020001370f0004000237020002370e0003000337020003370d0002000437020004370c0003000337020003370d0004000237020002370e0005000137020001370f000d370b000d370b000d370b000d370b000d370b000d370b000d370600057d0d370600017d017e017d017e017d0b37097d017e017d017e017d0b370d7d0a370523097d0b370d7d" + }, + { + "filename": "head-abstract", + "data": "0x00041a1405045c01000447010004470100017f01000114010001140100045c01230447012304470123017f01230114012301140123045c01230447012304470123017f01230114012301140123045c01230447012304470123017f01230114012301140123045c01230447012304470123017f012301140123011401230100142301230158012301580123017f012304460123047f0123044601230158012301580123017f012304460123047f0123044601230158012301580123017f012304460123047f0123044601230158012301580123017f012304460123047f0123044601230158012301580123017f012304460123047f012304460100132301000123015401230154012301540123040701230455012304550123015401230154012301540123040701230455012304550123015401230154012301540123010703540123045501230455012301540123015401230154012304070123045501230455012301540123015401230154012304070123045501230455" + }, + { + "filename": "head-ape", + "data": "0x0005191406030004800c0002000980080001000e80040002000f80020001001080020002000f80020002000f800200020001800e810200020001800e810200020001800e810200020001800e81020003800e8102000180018101800f8101000180018103800d82018005800d81018002001180" + }, + { + "filename": "head-bag", + "data": "0x00031c140306000e3a050006000e3a05000400023a0e00023a03000400023a0e00023a03000400023a0e00023a030002000207023a0e07023a02070100020001070126023a040706260407023a01260107010001000126010702260607042606070226010701000100012608070626080701000100013a16070100013a0100013a15070100013a0100013a15070100013a0107013a1607013a0107013a1607010018070100070703760e0701001807020016070100" + }, + { + "filename": "head-bagpipe", + "data": "0x00011d19050a0001830d000a00030f0b000a0001830200010f0100018308000a00020f0300010f017a07000a000108010f017a020f0108017a010f06000a00020f017a020f0183017a020f050001000183080001830100017a010f010001080100020f018304000200010807000108040001080200010f017a010f030003000108060001080300010803000183017a010f0300040001080500010803000108020001080100017a010f0200010f0200017a030f017a030f010803000108020001080200020f017a01000100010f017a030f017a030f017a03000108010001080400010f017a010f0100010f017a030f017a030f017a010f01000108020001080400010f02000100010f017a030f017a030f017a020f01080100010808000100010f017a030f017a030f017a030f017a020f07000100010f017a030f017a030f017a030f017a030f017a050001000108017a030f017a030f017a030f017a030f017a010f0400010001080200020f017a030f0211020f017a030f017a010f0400010001080400017a030f017a030f017a030f017a010f0400010001080400017a030f017a030f017a030f017a0500010001080500030f017a030f017a030f017a0500010001080700010f017a030f017a020f070001000108160001000183160003831500" + }, + { + "filename": "head-banana", + "data": "0x00041d140304000523047903260a0005000323047905260900060001230479072608000700037909260700070002790226012b07260700070001790326012b0326022b0226070007000226012b0526022b02260700012606000826022b022606000126022605000826022b022605000226032604000c26040003260126012b022602000e26020004260226012b022601000e26010005260326012b1226012b032601001426012b0326010002000a26032b0926020003000626015706260157062603000400042603570526025704260400" + }, + { + "filename": "head-bank", + "data": "0x00031c15040b00021f0b000900061f09000700031f0472031f07000500021f020c011f0472011f020c021f05000300021f020c031f0472031f020c021f03000100161f01000100167201000200031f0272041f0272041f0272031f02000200011f010c011f0272041f0272041f0272011f010c011f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200011f1272011f02000100161f0100021f1472021f" + }, + { + "filename": "head-baseball-gameball", + "data": "0x00041a17060800040b08000600080b0600040001240b0b04000300020b01240a0b0124010b02000200030b01240a0b0124010b02000200030b01240a0b0124010b02000100040b01240a0b0124020b01000100030b01240c0b0124010b0100040b01240c0b0124020b030b01240e0b0124010b030b01240e0b0124010b030b01240e0b0124010b0100030b01240c0b0124010b01000100030b01240c0b0124010b01000200030b01240a0b0124010b02000200040b0224060b0224020b02000300050b0624030b030004000c0b04000600080b06000800040b0800" + }, + { + "filename": "head-basketball", + "data": "0x00031a160607000542011a070005000442011a0242011a0242050003000242021a0542011a0442030002000542011a0442011a0442011a020002000142011a0442011a0342011a0342011a0142020001000842011a0242011a0242011a0342010001000142011a0742051a044201000c42011a07420c42011a07420c42011a0742141a0c42011a07420c42011a074201000b42011a0642010001000942051a04420100020004420166010e0166010e0166010e011a0242011a0242020002000642011a0342011a0342011a0142020003000442011a0442011a044203000500021a0542011a0242050007000542011a0700" + }, + { + "filename": "head-bat", + "data": "0x00031e14020900018408000184090009000184080001840900080003840600038408000400018402000284018501840600018401850284020001840400040005840185028404000284018505840400030001840185038401850a84018503840185018403000300058401850a8401850584030002000184018514840185018402000200018401851484018501840200010001840185168401850184010001000184018516840185018401000100018401851684018501840100010001840185168401850184010001840185188401850184018401851884018501840784018504840223016201230162022301840185078402840300028401850384032301010123010101230284018502840300028401840500108405000184" + }, + { + "filename": "head-bear", + "data": "0x0005181508058606000586018602370286060002860237018610861086108610861086108610861086108610860208028602080223018701230187022301080286020802860208072301080286020802860208028602080286020802860208028602080286020802860208028601000e080100" + }, + { + "filename": "head-beer", + "data": "0x00021914060500028702000387070004000b87040003000f87010003000f870100020011870200018701420c87016d02870300024201680287016802470587016d018701000388024201680247016802470168014702870168016d0187010003880342024701680247016802470268016d0200028801000342024701680247016802470268016d0200028801000342024701680247016802470268016d0200028801000342024701680247016802470268016d0200028801000342024701420247016802470268016d0200028801000342024701420247016802470268016d020003880342024701420247016802470268016d0200010002880342024701420247014202470268016d020003000c420168016d02000300058807850288020003000e880200" + }, + { + "filename": "head-beet", + "data": "0x00021a14060400031d0200028009000400011d0119021d0280010c018008000400021d0119011d0180010c028008000500021d0119010c028009000600011d0119010c01800a00070002850b000200108902000100091901890119018901190189011903890100148903191089011914891489128902191489148902190f89031901000a8902200689010002000419018901190789011901890119020003000e890300" + }, + { + "filename": "head-bell", + "data": "0x00011c14040b0002260b000b0002260b0008000826080007000226010107260700060002260101092606000500022601010b26050005000e26050005000e2605000400102604000400102604000400102604000400102604000400102604000400108a04000400108a0400020014260200020001260101122602000c26033709261826010016260100" + }, + { + "filename": "head-bigfoot-yeti", + "data": "0x00021d14020d00047f0a000d00067f08000c00037f0156017f0156017f08000c00027f0156015a0156015a017f08000c00027f028b0156018b017f08000900057f018b0156015a0156017f080008000b7f080007000b7f090006000d7f080005000e7f018c07000400047f01000a7f038c05000300047f02000a7f058c03000200047f02000b7f078c0100047f03000c7f0300058c037f04000c7f0400018c0100018c010007000b7f09000700087f028d027f08000800028c0a7f07000700068c087f0600" + }, + { + "filename": "head-bigfoot", + "data": "0x00021d14020d0004340a000d00063408000c000334012b0134012b013408000c000234012b0136012b0136013408000c000234028e012b018e0134080009000534018e012b0136012b0134080008000b34080007000b34090006000d34080005000e34013607000400043401000a34033605000300043402000a34053603000200043402000b3407360100043403000c3403000536033404000c340400013601000136010007000b34090007000834021602340800080002360a3407000700063608340600" + }, + { + "filename": "head-blackhole", + "data": "0x00011d17030e00018f0b000d00018f0c000400018f15000300018f0600015f0600015f0400018f03000300018f0500015f0600015f0600018f02000800015f0300045f0300015f06000800015f01190120015f0320031908000400015f0200015f01190220045f0220025f07000400015f0100015f01190120025f0490025f01200119015f06000400015f0100015f0120015f029004230290015f01200119015f0100015f03000200015f0200025f0120015f019006230190015f022001190300018f010005000119025f019008230190025f01190400018f018f0500025f019008230190015f0120015f01190300018f018f0400015f0120015f019008230190015f0120015f05000100018f0300015f0120015f019008230190015f0120015f05000500015f01190120015f019006230190015f02200119015f04000300015f0200035f029004230290025f02190100015f03000400025f02190120025f0490025f0220015f01190100015f03000700015f01190220045f0120015f01200119015f060006000219055f0320015f02190200015f04000200018f0700015f01000319015f0a000300018f0900015f0900018f02001600018f0300" + }, + { + "filename": "head-blueberry", + "data": "0x00041a1706070006430700050005430691040003000143019101560591035403910300020002430691015403770154039102000200014306910254047701540291020001000243079101540477015403910100010001430156089104540491010002431291034311910343119102431291024312910243129101000143039106770891010001000143049102920991014301910100020002430e910200020004430c9102000400024309910143040004000543069101430400070006430700" + }, + { + "filename": "head-bomb", + "data": "0x00041c16070f00010d05000600060d0200030d028302000400040d0172090d0100018301000300020d02720a0d030001830200030d0272090d040001830100100d030001830100100d03000193120d02000141120d0300120d0300120d0300120d0300120d03000100100d04000100100d04000200060d0572030d050003000c0d060004000a0d07000600060d0900" + }, + { + "filename": "head-bonsai", + "data": "0x00021e15030c00070f08000a00030f031c040f07000800050f031c010f021c020f06000600040f011c020f031c010f021c020f06000500100f060006000e0f0200030f02000a00080f0300020f011c020f01000100070f0600027c0300080f020f021c060f0400037c060f021c020f020f021c010f011c050f0400017c070f021c020f0b0f0400037c080f01000b0f0300097c04000100080f087c0a000200030f047c0300047c0b000a00067c0b000900087c0a00040012940500040005940d0e050004001294050006000e940700" + }, + { + "filename": "head-boombox", + "data": "0x00041b1f06040002580f00060002580d00080002580b00020008950258079502000200019509000258040001950200020001950b0002580200019502000296136f0296016f011c016f0195016f090e016f0195016f0124016f0296136f0296036f030e026f0195016f0195026f030e036f0296026f050e056f050e026f0296016f070e016f0195016f070e016f0296016f070e036f070e016f0296016f070e016f0195016f070e016f0296026f050e056f050e026f0296036f030e026f0195016f0195026f030e036f0296136f1200020e01001300010e01001300010e01001300010e01001300010e01001300010e01001300010e01001300010e01001300010e01001300010e01001300010e0100" + }, + { + "filename": "head-boot", + "data": "0x00061c140701000697030002970900010006970208010001970198090001000797020801970198090001000897010801970198090001000b97090001000b97090001000b9709000d9708000e9707001497010015971597049703260e971597010013830100" + }, + { + "filename": "head-box", + "data": "0x00061c1403040003970f9901080200030004970f99010802000200049701080f99020801000200049701080f99020801000100049702080f9902080100059702080f990308040003080f990308040003080f990300040003080f9903000400029901080f9903000400029901080f99030004000299010805990a0203000400030805990a0203000400030805990a020300040003080f990300" + }, + { + "filename": "head-boxingglove", + "data": "0x000418140504000d55020002000a55043802550100010012551355135513550255018901550607095502550189015506070955025501890155060709550255018901550607095502550189015506070955030001550607095503000f550100040003550b26010004000355012605010123010103260100040003550b26010004000e550100" + }, + { + "filename": "head-brain", + "data": "0x00051a14060600086a06000300036a0320016a0420036a03000200016a0320036a0120046a0320016a02000100016a0120026a0120016a0120016a0120016a0120026a0120026a0120016a01000100016a0120016a0120026a0120026a0120026a0120056a0100066a0120036a0120026a0120026a0120016a0120016a016a0120046a0120066a0120046a0120016a016a0120026a0120026a0120036a0120066a0120016a046a0120026a0120046a0120016a0220026a0120016a016a0120026a0120036a0120096a0120016a016a0120036a0120056a0120066a0120016a066a0120056a0220046a0120016a0100126a01000100016a0120036a0220026a0120056a0220016a01000200016a0120016a0120026a0220046a0220026a020003000e6a0300" + }, + { + "filename": "head-bubble-speech", + "data": "0x00041b160504000e010400020012010200010014010100010014010100160116011601160116011601160101001401010001001401010002001201020004000f0103000f00030104000f00020105000e00020106000e0001010700" + }, + { + "filename": "head-bubblegum", + "data": "0x00021b170508000669080006000369029a0569060004000269029a046902010469040003000269019a056904010469030002000269019a066904010569020002000a690201026902010269020001000f690201036901000100026901011169010016691669166916691669166901001469010001001469010002000a69019a0769020002000b69019a0669020003000169019a0769019a0469019a0169030004000169039a0669039a0169040006000a9a06000800069a0800" + }, + { + "filename": "head-burger-dollarmenu", + "data": "0x00071a14060600080a06000400060a0125050a04000300040a0125050a0125030a03000200020a01250d0a020002000e0a0125010a02000100120a01000100120a0100010012260100082601970626029701260197012601970226019704260c97029701260c97012604970100129701000200100a02000200100a0200" + }, + { + "filename": "head-cake", + "data": "0x00021a140605000137040001370300013705000400013701290137020001370129013701000137012901370400040001370129012602000137012901260100013701290126040005000126040001260300012605000400033c0200033c0100033c040004000156023c02000156023c01000156023c0400020010200200010005200601072001000100042008010620010001000420080105200101010001000101032009010320020101000100020102200e0101000100020102200e0101000100020101200f01010001001201010001001201010001000120010102200201052002010220020101200100012001010120020102200501022002010220010101201420" + }, + { + "filename": "head-calculator", + "data": "0x00051a16060200120302001203020001030488010303880103070701030200060303880103070701030200010304880d03020006030388010303880103038801030200010304880d03020006030388010303880103038801030200010304180d0302000103041801030388010303880103038801030200120302000103105c010302080103015c019b035c019b035c019b015c019b015c029b015c010302080103015c039b015c029b025c019b015c019b015c029b015c010302080103015c019b015c019b015c039b015c019b015c019b015c029b015c010302080103105c010302000103109c010302001203" + }, + { + "filename": "head-calendar", + "data": "0x00041a14050100029d0200029d0200029d0200029d0200029d02000201019d0301019d0301019d0301019d0301019d02011501010101230101012301010123010101230101012301010123010101230101059f01010f01029f0101029f010101010da00101019f0101019f0101019f0101020101a0010101a0010101a0010101a0010101a0010101a00201059f010101010da00101059f0101020101a0010101a0010101a0010101a0010101a0010101a00201059f010101010da00101059f0101020101a0010101a0010101a0010101a0010101a0010101a00201059f010101010da00101059f0101020101a0010101a0010101a0010101a0010101a0010101a00201059f010101010da00101059f0101020101a0010101a0010101a0062301a00101059f010101010da00101059f01011501" + }, + { + "filename": "head-camcorder", + "data": "0x00091c14050400047e0500047e060001230100117c030001230123017e017c01240f7c020002230123017e117c027e022301230100117c027e02230200117c027e02230200117c027e022302001123027e022302001123027e022302000e23027e0123027e0223020001230b7c0223027e0123020002230200112303000123" + }, + { + "filename": "head-cannedham", + "data": "0x00041a14060f00017a04000c000383017a04000e00027a04000b00047a05000700067a030002390200097a0500053901001483148c148c148c148c14a2140714070507010e0151010e0151010e0151010e0151070714071483" + }, + { + "filename": "head-car", + "data": "0x00091c140605000855090004000155080401550800030003550804015507000200055508040155060001000755060401a30104015505000e5502a304550200145501570100145501570155035501230227095502270123045502a30155012702a30127015502230455012702a30127025502a302a30100012702a3012707a3012702a30127010002a3010004000227090002270500" + }, + { + "filename": "head-cash-register", + "data": "0x00021a1408010004580d0001000158026201580d000100045802000a2701000161015801620258026101270843012701610161045802610127014306540143012701610161016f0262016f026101270843012701610161046f0261012701430354044301270161016104270261012708430127016112611261126112611261126112610f61022a0161016102870161028701610287016102870161042a0161016102870161028701610287016102870161042a01611261" + }, + { + "filename": "head-cassettetape", + "data": "0x00071b14050100140e0100020e1201020e020e0101010e1001020e010e0101010e0101010e1001010e010e05a4010103a4020103a4010105a4010e010e04a4030103a4010102a4030104a4010e010e04a4030103a4010102a4030104a4010e010e05a4010103a4020103a4010105a4010e010e14a4010e010e1426010e010e1426010e060c0a1f060c050c021f0100061f0100021f050c040c0e1f040c" + }, + { + "filename": "head-cat", + "data": "0x00031a14060100020e0d00020e02000100040e0900040e02000100010e0106040e0500040e0106010e02000100010e0306020e0500020e0306010e02000100010e0406070e0406010e02000100010e0306090e0306010e02000100010e01060d0e0106010e02000100110e02000200100e02000200100e02000200100e02000200100e02000200100e02000200100e0200053c0506026c0406043c02000806019607060200053c030604960406043c020010060200" + }, + { + "filename": "head-cd", + "data": "0x00031b1805080006a40800060002a4066702a40600040002a40a6702a40400030001a40e6701a40300020001a401220f6701a40200020001a402220e6701a40200010001a405220b67024301a40100010001a40622016704080367044301a4010001a404200322010804a40108074301a401a40620010806a40108064301a401a40620010802a4020002a40108064301a401a40620010802a4020002a40108069a01a401a40626010806a40108069a01a401a40726010804a40108026e059a01a4010001a40426036704080167046e029a01a40100010001a402260b67056e01a40100020001a40d67036e01a40200020001a40f67016e01a40200030001a40e6701a40300040002a40a6702a40400060002a4066702a40600080006a40800" + }, + { + "filename": "head-chain", + "data": "0x00051e160203000484010006840100068401000384030003000493018406930184069301840393030003000484010a0684010a0684010a0384030004000184010a0184010a018402000184010a0184010a018402000184010a0184010a018405000200038401930684019306840193068402000200039301840101059301840101059301840101059302000200038401000684010006840100068402001c001c001c001c000300068401000684010006840100048402000184010105930184010105930184010105930184010103930100018401930684010a0684010a06840193048401000184010a0184010a018402000184010a0184010a018402000184010a0184010a018402000184010a0184010a01840100048401930684019306840193068401930184010004930184069301840693018406930184020004840100068401000684010006840300" + }, + { + "filename": "head-chainsaw", + "data": "0x00051d1604030003631300020001630300016312000200016303000163120008630200010d0200010d0200010d0200010d05000863010d0100020d0100020d0100020d0100020d04000863020d0263010d0263010d0263010d0263020d02000100010d06630e0d0163020d08630e0d0163010d01000100010d06630f0d020008630e0d0163020d0100010d06630e0d0163010d010008630f0d020008630e0d0163020d03630101010d0101010d01630e0d0163010d010001000263010d0101010d010101630f0d020002000863010d0263010d0263010d0263010d0263010d020003000563020d0100020d0100020d0100020d0100020d0300040004630100010d0200010d0200010d0200010d0200010d0300" + }, + { + "filename": "head-chameleon", + "data": "0x00021c16040b00021d0b000b00021d0b000a00041d0a000900061d090005000184031d0184041d0184031d018405000300030f0184031d0484031d0184030f03000200010f0222020f0184011d0184041d0184011d0184050f02000100010f0423010f0184021d0484021d0184060f01000100010f012202230122020f0184061d0184050f022201000100020f0222030f0184061d0184040f032301000100070f0184061d0184040f0122022301000100070f0184061d0184050f022201000200040f0284081d0284040f0200030003840c1d038403000200141d02000100161d01000100041d048406230484041d0100021d03840e220384021d011d01840522010f0122060f0122010f05220184011d010016220100020003220e0003220200" + }, + { + "filename": "head-chart-bars", + "data": "0x00041a1406100004730800041c040004730800041c040004730800041c0469047304000428041c0469047304000428041c0469047304000428041c0469047304190428041c0469047304190428041c0469047304190428041c0469047304190428041c0469047304190428041c0469047304190428041c0469047304190428041c0469047304190428011c06230169047304190428041c0469047304190428041c04690473" + }, + { + "filename": "head-cheese", + "data": "0x00031a140605000226012b0226022908000500052602290800050005260329070004000226012902260229012b01290700040001260129022b01260129012b03290600040001260129022b01260129012603290600030005260329022602290500030005260729050003000526082904000200052609290400020005260a290300020005260a290300010005260c290200010005260c29020001000126012903260d29010001260129012b02260429012b012903230529010001260129012b02260229022607290126032905260f29" + }, + { + "filename": "head-chefhat", + "data": "0x00051c1404050006010d0003000b010a000200090103a4080102000100060104a40c0101000100030103a41001010018010d0101a4060101a4030101000b0101a4050102a4030101000200030101a4060101a4030102a4040102000300030101a4050101a4020101a40501030005000e7c050005000ea4050005000ea40500050001010c550101050005000e01050005000e010500" + }, + { + "filename": "head-cherry", + "data": "0x00011b15050900030f0a000400010f0200070f080005000b0f06000500010f0100070f08000600010f0200030f0a000600010f0300010f0b000700010f0300010f0a000700010f0400010f090004000318010f01180400010f044104000200091809410200010009180b41010001000918094101010141010009180d4109180d4109180d4109180d4109180d410100091806410318024101000100091805410118020103410100020009180941020004000518040005410400" + }, + { + "filename": "head-chicken", + "data": "0x00031814080500015501000355060004000755050003000855050002000287075503870200010006870455048701000100098701550487010010871087108710871087108710871087088704130487088706130287088704550487088704550487" + }, + { + "filename": "head-chilli", + "data": "0x00041c16050600081c090004000a1c09000200081c0d0001000a1c0c000100071c0224011c0c00041c07240c00011c0a240c0001000a240c0001000a240c0001000b240b0001000b240b0002000b240900012402000c240700022403000d2404000324040005240523092405001124010006000f24020007000c2404000a0007240600" + }, + { + "filename": "head-chipboard", + "data": "0x00061c140513a5040001a501a603a502a701a508a801a501a601a5040005a502a706a501a906a5030001a503aa01a502a701a50aab02a5030001a501aa01ab01aa02a501a906a501a907a501ac01a601a503aa01a501a904a501a903a501a905a501a902a605a501a903a501a905a501a903a501a901a501ac01a605a501a903a501a905a501a902a501a902a502a602a510a903a501ac01a601a501a903a501a90fa5020001a501a902a510a901a501ac01a601a501a901a501a910a501a902a603a501a901a502ab01a502ab01a502ab01a502ab01a502ab02a501ac01a601a501a601a501a901a502ab01a502ab01a502ab01a502ab01a502ab02a502a615a501ac01a6" + }, + { + "filename": "head-chips", + "data": "0x00021c19040d0001230a000c000107022309000b000307022308000a000207010102070223070009000287050702230600080004870507022305000700028701010387050703420300060002870101058705070242030005000a87050701420123020004000c8705070223010003000e8705070223020001070f8705070123010003070f870407010005070f870207020006070f870300010006070d870200014201000200060703870214068702000242010003000607098702000342010004000607078707001800180015000342150002420100150001420200" + }, + { + "filename": "head-chocolate", + "data": "0x000319140701000185010e039701850397080001000185010e028501970385019708000100020e0985060001000185010e03970185039701850197060001000185010e028501970385019703850197018503000100020e0c85030001000185010e03970185039701850397018502970100038c0f06128c128c128c128c128c010002890e190100010010190100010010190100010003190c8901190100010010190100" + }, + { + "filename": "head-cloud", + "data": "0x00041c14040b000501080009000901060008000b01050007000d01040006000f0103000400110103000200140102000100150102000100150102001601020017010100180118010100170101001701020015010100040012010200" + }, + { + "filename": "head-clover", + "data": "0x00041d16070400031d0500031c07000300051d0300051c06000300051d0300051c06000100031c051d0100061c021d0400041c061d041c051d0300051c051d031c061d0300061c010f021d031c010f061d03000100061c010f011d021c010f061d04000300051c010f011c010f051d06000400021d031c010f031c021d07000300051d010f011c010f051c06000100061d010f021c011d010f061c0400061d010f031c021d010f061c0300061d031c051d051c0300051d041c011d055c041c0100020f0100021d061c010f051d031c040f0300051c030f051d050f01000300051c0300051d06000400031c0500031d0700" + }, + { + "filename": "head-clutch", + "data": "0x00071b14030b0004120900020009760412097602000876015b0412015b087602000876065b087602000812015b04ad015b0812010001120876015b0412015b087601000112097604120976015b0100097604120976015b0100097604120976020009760412097602000976041209760200097601010123010101230101087602000976041209760200097604120976" + }, + { + "filename": "head-coffeebean", + "data": "0x0005191608040004ae010004ae0400020005ae01340135013405ae0200010002ae013403ae01340123013406ae010002ae013404ae01340123013407ae01ae013405ae01340123013407ae01ae013405ae01340123013407ae01ae013405ae01340123013407ae07ae01340123013407ae07ae01340123013407ae07ae01340123013407ae07ae01340123013407ae07ae01340123013407ae07ae01340123013407ae04ae032301340123013407ae07ae01340123013407ae010006ae01340123013406ae0100020005ae01340135013405ae0200040004ae010004ae0400" + }, + { + "filename": "head-cone", + "data": "0x0003191407080002240800080002240800070004240700070004240700070004240700060006240600060006af0600060006af0600050008af050005000824050005000824050004000a24040004000aaf040004000aaf040003000caf030003000c24030004240c4802241224" + }, + { + "filename": "head-console-handheld", + "data": "0x00031914071203010310100103010301100f79010301030110077901b0077901030103011005790510017901b0011001b00179010301030110067903b00279011001b0011001790103010301100179021001790110017901b0017901b0027901b0011001b001790103010301100f790103010301100f790103010301100f790103010301100f790103010301100f790103010301100f7901031203020301b10f03010303b1020301b1010301b1010303b2010303240103020301b1020301b1010301b1020303b20103032401031203" + }, + { + "filename": "head-cookie", + "data": "0x00031a160607000698070005000a98050003000e9803000200079801850898020002000d98018502980200010012980100010012980100149814981498149814980f980285039801000e98028502980100010003980285029801850a980100020002980285029805850598020002000698018509980200030004980185049801850498030005000a980500070006980700" + }, + { + "filename": "head-cordlessphone", + "data": "0x000a1d1402020009030db10303020005030389010301b1028801b1028801b1028802b1018901b103030200020301b102030389010301b1028801b1028801b1028802b1018901b1030302000503038901030db1010301230103020005030389010301b1028801b1028801b1028804b10103012301030200010301b1010301b101030389010301b1028801b1028801b1028804b1010301230103020005030389010301b1028801b1028801b1028804b101030123010302230503038901030db10103012301030223020301b102030389010301b1028801b1028801b1028802b1018801b1010301230103020005030389010301b1028801b1028801b1028802b1018801b10303020009030db10303" + }, + { + "filename": "head-cottonball", + "data": "0x00021c16040a0001010d0009000301014b02010200010106000400010102000201014b0701070005000501014b0401014b030102000101020004000101014b0401014b0501014b0401030004000201014b0a01014b0201040003000301014b0601014b0301014b0301030003000101014b0201014b0601014b0401014b0101030001000201014b0301014b0601014b0701020002000501014b0d01014b020002000401014b0f01020002001101014b02010100010101001201014b03010100010101000301014b0d01014b0201020003000101014b0d01014b0201030003000401014b0201014b0201014b0301014b0301030004000301014b0301024b070101000101020003000301014b0301014b0201014b0401014b010104000500014b0d01050007000801014b0101070009000101014b0301014b0900" + }, + { + "filename": "head-cow", + "data": "0x00061914060300017f0323057f052302000300017f0323057f052302000100037f0323057f0523017f01000c7f0523027f137f047f02230d7f030003230b7f020003000323047f0323047f02000300077f0323047f02000300077f0323047f02000300027f0e5f03000123017f045f0208035f0208035f030002230e5f03000223035f0908025f030002230e5f" + }, + { + "filename": "head-crab", + "data": "0x00021b1405040004130600041304000200071304000713020001000913020009130100031302b30c0002b303130a1302000a130913040009130213010005130600051301000213021307000123020001230700021302130100101301000213021301001013010002131613161316130300101303000300101303000300101303000300061304b306130300030010130300030010130300" + }, + { + "filename": "head-crane", + "data": "0x00061f1405060005b40f0004000ab40c0003000cb40b00020003b4050106230a00010002b406010823090001b40801092308000901072304b606000a01052308b60300060109230bb6050107230e00040108230e00010002010a230d00020002010323040105230a00030002010d230800040002010c230800" + }, + { + "filename": "head-croc-hat", + "data": "0x00061e150801000e23070001000e2307001023060001000e1d070001000e1d070001000e1d070001000e1d070001000e1d070001000e1d070001000e1d07000100151d0100151d0100031d0323021d0423021d0423031d0100051d0123021d0123021d0123021d0123021d0123031d0100051d0423021d0423021d0323011d0100151d" + }, + { + "filename": "head-crown", + "data": "0x00041a14060100015b0700025b0700015b01000100015b0700025b0700015b01000100025b0500045b0500025b0100028b012b015b0300015b041d015b0300015b012b0241018b0154012b025b0100025b011d029b010f025b0100025b012b011801410254012b055b021d020f055b012b02180100125b01000100125b01000100125b01000100125b01000100125b01000100125b01000100125b01000100125b010002000135052b0435052b013502000100125b01000100125b0100" + }, + { + "filename": "head-crt-bsod", + "data": "0x00051a15040400120204001202020004020166025a01660a5a02020602025a01660b5a020206020166025a01660a5a020206020e5a020206020e5a020206020e5a020206020e5a020202b104020e5a020206020e5a020202b104020e5a020206020e5a020202b104020e5a02020d02012301020123060202000a0201230102012301020123050204001202" + }, + { + "filename": "head-crystalball", + "data": "0x00021a14060700062d07000500022d06b7022d05000400012d0ab7012d04000300012d07b7012d04b7012d03000200012d03b7012d0ab7012d02000100012d03b7012d01b7012d05b7012d04b7012d01000100012d04b7012d05b7032d03b7012d0100012d0cb7012d05b7012d012d07b7012d0ab7012d012d12b7012d012d12b7012d012d12b7012d012d12b7012d0100012d10b7012d01000100012d10b7012d01000200012d0eb7012d0200020010b80200020005b8072304b80200020010b80200" + }, + { + "filename": "head-diamond-blue", + "data": "0x00051a18060500024a0104044a0104024a05000400034a0104044a0104034a04000300034a0104064a0104034a03000200044a0104064a0104044a02000100044a0101084a0104044a01000204010101040301010401010b04054a0101084a0104054a054a0104084a0104054a054a0104084a0104054a054a0104084a0104054a14040100054a0104064a0104054a01000200044a0104064a0104044a02000300044a0104044a0104044a03000400034a0104044a0104034a04000500024a0104044a0104024a05000600024a0104024a0104024a06000700014a0104024a0104014a070008000104024a010408000900024a0900" + }, + { + "filename": "head-diamond-red", + "data": "0x00051a1806050002b9014204b9014202b90500040003b9014204b9014203b90400030003b9014206b9014203b90300020004b9014206b9014204b90200010004b9010108b9014204b901000242010101420301014201010b4205b9010108b9014205b905b9014208b9014205b905b9014208b9014205b905b9014208b9014205b91442010005b9014206b9014205b90100020004b9014206b9014204b90200030004b9014204b9014204b90300040003b9014204b9014203b90400050002b9014204b9014202b90500060002b9014202b9014202b90600070001b9014202b9014201b907000800014202b901420800090002b90900" + }, + { + "filename": "head-dictionary", + "data": "0x00051b150501000801040008010100014a01010372010103720101020001010372010103720101014a014a1401014a014a010103720101037204010372010103720101014a014a1401014a014a010103720101037204010372010103720101014a014a1401014a014a010103720d0102720101014a014a1401014a014a010103720d0102720101014a014a1401014a014a010103720d0102720101014a014a070106410701014a014a1401014a014a1401014a0a4a02010a4a0900044a0900" + }, + { + "filename": "head-dino", + "data": "0x00071d15080300061d0c000300061d0c00151d151d151d151d151d151d151d151d151d0100051d0301011d0301011d0301011d03010100051d0301011d0301011d0301011d03010100141d0100141d" + }, + { + "filename": "head-dna", + "data": "0x00091d160304431200045501000126010004430c00045501000151010001000126010001550100044308000355014301000126010001510100010001260100015501000143010001510243060002550143010001430100012601000151010001000126010001550100014301000151010002430400025501000143010001430100012601000151010001000126010001550100014301000151010003430200025501430100014301000143010001260100015101000100012601000155010001430100015101000143010002430255010001430100014301000143010001260100015101000100014301000151010001260100015501000143020002550200014301000143010001550100014301000155010001000143010001510100012601000155010001430100025502430100014301000143010001550100014301000155010001000143010001510100012601000155010001430255020003430100014301000155010001430100015501000100014301000151010001260100015501000255040002430100014301000155010001430100015501000100014301000151010001260100035506000343010001550100014301000155010001000143010005550a000543010001550100055510000543" + }, + { + "filename": "head-dog", + "data": "0x00061a140603000e970300010004850d970185010005850d97028504850e97028504850e97028504850e97028504850e97028504850e9702850485049706380497028504850497063804970285048503970838039702850485019708380223020d013802850200039708380423013802000200039704380223010103230101012301380200020003970d380200" + }, + { + "filename": "head-doughnut", + "data": "0x00031a160607000156056c07000500026c0156046c01ba026c050003000a6c01ba036c03000200086c016d056c021902000200026c02ba016c0119036c016d066c02000100076c0119016c0138056c0156026c01000100076c0538026c0156036c0100046c016d026c013804000138066c011c016c021c016c016d016c013806000138026d036c011c066c013806000138066c066c013806000138066c026c0156036c013806000138036c02ba016c026c0156036c023804000138026c0156046c0100076c0538036c0156026c01000100046c01ba066c0219056c01000200026c01ba046c0156086c02000200076c0156040e016d036c02000300026c0119096c016d016c030005000119096c05000700016c021c036c0700" + }, + { + "filename": "head-drill", + "data": "0x00071c140502000e1401a4060001000f1401a4017e050001000f1401a4017e017c017e017c017e017c101401a4027e017c017e017c017e101401a4017e050001000f1401a4060001000f1401a4060002000e1401a406000500057e01a40c000500057e02a40b000500057e03a40a000500077e0b0004000114012301260123012601230814050004000e140500" + }, + { + "filename": "head-duck", + "data": "0x00041d1407070006010900050005010c001001060011010500110105001101050011010500110105001101050011010500110105001101050011010500050110460100050104460142014601420a4605011146010005011046" + }, + { + "filename": "head-ducky", + "data": "0x00031c14040c00082604000a000526045102260300090005260251022302510126030009000526025102230251012601140200090006260451022603140100022607000a26031401000100052605000a260300162602001726010018261826182601001726010017260200162602000b26018a0926010003000726038a09260200050010260300" + }, + { + "filename": "head-earth", + "data": "0x00031a160607000643070005000a43050003000343011c0543011c0243021c030002000243031c0543061c020002000243021c0543071c02000100011c0243031c0343091c01000100021c0243011c0443091c0100031c0843091c031c0d43041c041c0743091c051c0543091c0143061c0443081c0243061c0443071c03430100031c0643071c024301000100021c0843041c044301000200011c0943041c024302000200011c0443081c0343020003000e43030005000a430500070006430700" + }, + { + "filename": "head-egg", + "data": "0x00011915070700040107000500020102af040105000400010101af010102af020102af0101040003000c0103000200010101af020101af020101af060102000200010101af060102af020101af010102000100010101af020101af040102af030101af010101000100010101af0c0101af010101000100010101af0b0101af02010100100101af0101050101af0a0101af0101020101af0a0101af020101af0101020101af0a0101af020101af0101120112010e0102af02010100100101000100030101af080101af0301010002000501021e0701020003000c0103000500050101af02010500" + }, + { + "filename": "head-faberge", + "data": "0x000119140608000326080005000126020701260107012602070126050005000207012603070126020705000400010f0407010f0407010f040003000d07030003000107012604070126040701260107030002000107012601890126020701260189012602070126018901260107020002000207012604070126040701260207020001001107010001001126010013260100118a010001001107010001001107010002000f07020002000f07020002000f07020003000d070300030006260323032604000500098a0500" + }, + { + "filename": "head-factory-dark", + "data": "0x00031a14080300057c0a000100010e0300087c05000100020e0b00047c010002240f000100020e0400010e0300010e0300010e02000100020e0300020e0200020e0200020e0200040e0100030e0100030e0100030e0200100e0200100e0200100e0200100e0200100e0200100e0200100e0200100e0200020e0172010e026d010e026d010e0172050e0200100e0200100e0200" + }, + { + "filename": "head-fan", + "data": "0x00031a160607000651070005000351010001510200035105000300035102000151020001510200035103000200035102000151027e0151027e01510200025102000200025102000151027e0151027e0151027e015101000151020001000251020001510100017e0151027e0151027e0151017e010002510100010001510200015102000151027e0151027e0151017e01000151010001510100025101000151020001510100017e0262017e0151017e0100015102000251015101000151027e0151020004620200015102000151010001510251027e0151027e06620151027e01510200015101510100017e0151027e01510662027e0151017e01000251015101000151027e0151027e0462027e0151027e01510100015102510100017e0151027e0151017e0262027e0151027e0151017e02510100015101000151027e0151027e01510100017e0151027e0151027e01510100010002510100017e0151027e01510100017e0151027e0151027e025101000200015101000151027e015102000151027e0151017e010002510200020002510200015102000151027e01510200035102000300035102000151020001510200035103000500035102000151010003510500070006510700" + }, + { + "filename": "head-fence", + "data": "0x00041d1403020001bb060001bb060001bb060001340200010003bb0400013402bb040003bb040001bb013401bb010005bb020001bb013403bb020005bb020002bb013402bb05bb020001bb013403bb020003bb013401bb020002bb013402bb03bb013401bb020001bb013403bb020003bb013401bb020005bb03bb013401bb023401bb013403bb023403bb013401bb023402bb013402bb03bb013401bb023401bb013403bb023405bb023405bb03bb013401bb023401bb013403bb023405bb023405bb03bb013401bb020005bb020005bb020005bb013404bb020005bb020001bb013403bb020003bb013401bb013404bb020005bb020001bb013403bb020003bb013401bb013402bb013401bb023405bb023401bb013403bb023403bb013401bb013404bb023405bb023401bb013403bb023401bb013401bb013401bb013404bb023405bb023401bb013403bb023403bb013401bb013404bb020005bb02000585020003bb013401bb05bb020003bb013401bb02000585020003bb013401bb05bb020003bb013401bb020001bb013403bb020005bb" + }, + { + "filename": "head-film-35mm", + "data": "0x00031814050800062305000800062305000300102303420726078702260100014201000726078702260342072607870226034207260787022603420726078702260342072607870226034207260787022603420726078702260342072607870226034207260787022603420726078702260342072607870226010001420100022603ae022607870226034207260787022603001023" + }, + { + "filename": "head-film-strip", + "data": "0x00051b140516bc010002bc010002bc010002bc010002bc010002bc010002bc010002bc010016bc02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd01bd017b01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd16bc010002bc010002bc010002bc010002bc010002bc010002bc010002bc010016bc" + }, + { + "filename": "head-fir", + "data": "0x00011f18010e00020f0e000d00040f0d000c00060f0c000b00030f015c040f0b000a00030f015c060f0a000900030f015c040f015c030f090008000a0f015c030f080007000c0f015c030f07000600120f06000500140f05000400160f04000300180f030002001a0f020001001c0f01001e0f0600120f06000500140f05000400160f04000300060f065c0c0f030002001a0f02001e000700010f0e00010f07000600020f0e00020f06000500030f0e00030f0500" + }, + { + "filename": "head-firehydrant", + "data": "0x00021c14040b0002be0b00090006be0900080002bf01be02bf01be02bf0800070003bf01be02bf01be03bf0700060003bf01be04bf01be03bf0600060003bf01be04bf01be03bf0600050003bf01be06bf01be03bf0500050003bf01be06bf01be03bf0500030012be0300030012be030005000ebf050005000ebf0500010002bf012310be012302bf0100010002bf012310be012302bf010001be02bf012310be012302bf01be01be02bf012310be012302bf01be010002bf012303be0b2302be012302bf0100010002bf012310be012302bf010005000ebf0500" + }, + { + "filename": "head-flamingo", + "data": "0x00031b14050c00042003ba03000a00062001ba012301ba012002000900072003ba022001000800042005000320025f070004200800035f070004200800025f010e070005200800020e080006200600020e090008200300010e01000a00092003000b00092002000d00082001000f00062001000100156a166a0b20060905201620010014200100" + }, + { + "filename": "head-flower", + "data": "0x00031b18050a00024f0a000900044f0900040002ba0200019a044f019a020002ba0400030005ba019a044f019a05ba0300020007ba019a024f019a07ba0200020007ba041307ba0200030004ba0213046d021304ba0300030003ba0113086d011303ba03000200029a02ba0113086d011302ba029a02000100034f019a01130a6d0113019a034f0100054f01130a6d0113054f054f01130a6d0113054f0100034f019a01130a6d0113019a034f01000200029a02ba0113086d011302ba029a0200030003ba0113086d011303ba0300030004ba0213016d0385021304ba0300020007ba041307ba0200020007ba019a024f019a07ba0200030005ba019a044f019a05ba0300040002ba0200019a044f019a020002ba04000900044f09000a00024f0a00" + }, + { + "filename": "head-fox", + "data": "0x00031c1904050003011000040005010f000300014205010800022301000223020002000242050108000242010002420200010004420301090006420100074204000223064201110142011102420542070006010642044209000b01054209000a010100054209000901020004420a00080104000f4205010400104204010400114203010400124202010400054207010742010104000542062302010642010004000542090104420200040001420e0002420300010004420e00014204000100014211000242030001000123120002420223010001231600" + }, + { + "filename": "head-frog", + "data": "0x00061914070300051c0300041c03000200071c0100061c02000100041c020f0a1c01000100041c020f0a1c010001000d1c020f011c010001000d1c020f011c01000100101c01000100101c01000100020f0e1c0100011c020f0f1c121c121c126702670e5c0267010010670100" + }, + { + "filename": "head-garlic", + "data": "0x00051914070700010b0100010b0100010b06000800030b07000800030b070007000157030b0157060003000157030b0157030b0157030b03000200010b0157030b0157030b0157030b015702000100020b0157030b0157030b0157030b0157010b0100030b0157030b0157030b0157030b0157020b030b0157030b0157030b0157030b0157020b030b0157030b0157030b0157030b0157020b030b0157030b0157030b0157030b0157020b030b0157030b0157030b0157030b0157020b030b0157010b01c0010b0157030b0157030b0157020b030b0157020b04c0010b0157030b0157020b0100020b0157030b0157030b0157030b0157010b01000200010b0157030b0157030b0157030b01570200" + }, + { + "filename": "head-gavel", + "data": "0x000419140108000f34010008000f34010009000d23020009000d26020009000126015d0b26020009000126015d0b260200013401000234010004340d26020002000134020004340d26020001000234010005340d26020009000d26020009000d26020009000d26020008000f34010008000f2301000700118e0700118e07001123" + }, + { + "filename": "head-ghost-B", + "data": "0x00051b16030c00028c0a000b00048c09000200028c0700058c0600028c0200048c0400028c0104018c0104018c0400048c0200068c0200068c0200068c0300148c01000300148c01000300148c01000300148c01000400128c02000400128c02000400118c03000400118c030005000f8c040003000f8c0600118c07000400028c12000200048c1200" + }, + { + "filename": "head-glasses-big", + "data": "0x00091c120204000a8002000a80040001800501048002000180050104800400018005010480020001800501048005800501078005010480058005010780050104800180030001800501048002000180050104800180030001800501048002000180050104800180030001800501048002000180050104800400018005010480020001800501048004000a8002000a80" + }, + { + "filename": "head-gnome", + "data": "0x00011a140609000241090009000241090008000441080007000641070007000641070006000841060006000841060005000a41050003000ec1030001c2010001c10ec201c1010001c202c201c10ec201c102c202c201c10ec201c102c202c201c10ec201c102c20200104c02000200104c02000200104c02000200104c0200020003c20123010101230101012301010123010101230101012302c20200020003c20b4102c202000300088a018e078a0100" + }, + { + "filename": "head-goat", + "data": "0x00051d1805030001b10c00040d0400020002b10e0004b10200010002b10e0002b1017e022301b10100010002b10e0002b1017e04b101000fb1017e02b1017e02b1029802000eb1017e02b1017e01b1017e02b103000eb1027e02b1010002b1030010b1030001b10100030010b10500030010b10500030011b10400030011b10400020005b1017e0cb10400020005b1017e01230101012301010123010107b10300020004b1017e0ab1010003b10300020003b101000ab1040001b10300010002b1110001b1030003b1100002b1030001b1120001b1040001b1120001b10400" + }, + { + "filename": "head-goldcoin", + "data": "0x00031a160607000626070005000326042b0326050003000326022b0426022b0326030002000226022b0826022b0226020002000126012b0c26012b0126020001000226012b0c26012b0226010001000126012b092603290226012b012601000226012b032603290826012b02260126012b1026012b01260126012b1026012b01260126012b1026012b01260126012b1026012b01260226012b112601000126012b1026010001000226012b0f26010002000126012b02260129012604290426012b0126020002000226022b0826022b0226020003000326022b0426022b0326030005000326042b03260500070006260700" + }, + { + "filename": "head-goldfish", + "data": "0x00051b1405020012210200030010950300010014210100162113210151022101211207015101070121012114070121012112070151010701210121140701210121140701210121140701210221080703250707022101000121070701140125012302250607012101000100022107070325060702210100020003210c070321020004000e210400" + }, + { + "filename": "head-grouper", + "data": "0x00061d16020900010801000108010001080100010801000108090007000c08080006000f08060001000208020004080e7a040004080200137a020001000408157a01000508157a010001000408117a0108047a02000308107a02c5047a010004080e7a02c5047a0282020003080d7a01c5047a02820200010004080c7a01c5047a018204000508057a0208047a010801c5037a018205c501000408047a0108057a020801c5027a018201c5047a010004080200077a040801c5077a0200010002080600027a0508027a01c5047a04000c0003080c00" + }, + { + "filename": "head-hair", + "data": "0x00031e15020800068e0100058e08000700018e0626018e0526018e07000600018e0126068e0126058e0126018e06000300018e0100018e0126018e0626018e0526018e0126018e0100018e03000400018e0126018e0126068e0126058e0126018e0126018e04000400018e0126018e0126018e0500018e0400018e0126018e0126018e04000400018e0126018e0126018e0a00018e0126018e0126018e04000400018e0126018e0126018e0a00018e0126018e0126018e04000200018e0100018e0126018e0126018e0a00018e0126018e0126018e0100018e02000300018e0126018e0126018e0c00018e0126018e0126018e03000300018e0126018e0126018e0c00018e0126018e0126018e03000300018e0126018e0126018e0c00018e0126018e0126018e03000300018e0126018e0126018e0c00018e0126018e0126018e03000100018e0100018e0126018e0126018e0c00018e0126018e0126018e0100018e01000200018e0126018e0126018e0e00018e0126018e0126018e02000200018e0126018e0126018e0e00018e0126018e0126018e02000200018e0126018e0126018e0e00018e0126018e0126018e02000200018e0126018e0126018e0e00018e0126018e0126018e0200028e0100018e0100018e1000018e0100018e0100028e" + }, + { + "filename": "head-hardhat", + "data": "0x00041d1405050005c605c70900040006c701c605c70800030006c602c701c605c70700020007c701c602c701c605c70600020008c701c601c701c605c70600010009c701c602c705c601c70500010009c701c608c70500010009c701c608c70500010009c701c608c70500010009c701c608c70500010009c701c608c70500010009c701c608c70500010009c701c608c70500010003c70fc6050004c701c60d2301c605c704c701c60dc701c605c718c7" + }, + { + "filename": "head-heart", + "data": "0x00041c1704050005240400052405000300092401000824030002000624020106240201042402000100092401010524020101240101032401000100132401010224010014240101032418241824182401001624010001001624010002001424020002001424020003001224030004000724020101230624040005000e24050006000c24060007000a2407000900062409000b0002240b00" + }, + { + "filename": "head-helicopter", + "data": "0x00031d14020d0002230c000400016104620261062302610462016103000d0002230c000d0002230c000a000720075603000100022006000220019a0120019a0120019a0120085602000100032004000320019a0120019a0120019a012009560100010002620e200556030102560162022301620d200556030102560162022301620d200556030102560100026202000c200a5606000b2008560101015607000a2008560101015608000920065602010156010009000820085602000a000e2003000c000123020001230b0007000e230600" + }, + { + "filename": "head-highheel", + "data": "0x00061b1405020003181100010005181000010006180f0008180e0008180e0008180e0008180e0009180d000b180b0001000c18090002000418020008180600030002180400091804000300021805000a1802000300021806000318042304180300025b07000a5b" + }, + { + "filename": "head-hockeypuck", + "data": "0x00051b150507000805070004000305081f03050400020002050e1f0205020001000105121f010501000105141f01050105141f01050105141f0105010d0105121f0105011f020d02050e1f0205010c011f040d0305081f0305020c021f070d0805060c011f040d030c020d010c010d090c021f070d0e0c011f0100030d030c020d0b0c011f01000200050d030c0105010d0205010d050c02000400030c020d090c04000700080c0700" + }, + { + "filename": "head-horse-deepfried", + "data": "0x00061b15050900018e0100028e0900040003ad0100068e010003ad04000200028e03ad068e020003ad04000200028e07ad018e06ad04000100038e06ad036d05ad04000200028e07ad016d06ad04000200028e07ad016d06ad04000100038e07ad016d06ad04000200028e07ad016d06ad04000200028e07ad016d06ad04000100038e128a0200028e0e8a0123018a0123018a0100038e028a016d0123016d0123016d0123016d098a048e128a0100038e128a0100018e0100018e0e8a0400" + }, + { + "filename": "head-hotdog", + "data": "0x000317140905000489050002000183013906890139018302000100028301390689013902830100028301390289016d0219038901390283028301390389026d0119028901390283028301390589016d0119018901390283028301390389026d0119028901390283028301390289016d0219038901390283028301390389026d0119028901390283028301390589016d0119018901390283028301390389026d0119028901390283028301390289016d0219038901390283028301390389026d0119028901390283028301390589016d0119018901390283028301390389026d0119028901390283028301390289016d0219038901390283028301390389026d0119028901390283028301390589016d0119018901390283" + }, + { + "filename": "head-house", + "data": "0x00031c1505080001830e000100027c04000183015101830d000100021103000183035101830c00010002110200018302510183025101830b0001000211010001830251018301c8018302510183071103000100021101830351038303510183071102000100011101830b51018307110100010001830d510183071101830f51078317510351051103510b8301510351051103510183031103c80311018301510351051103510183021105c80211018301510351051103510183011107c801110183015103510311012601110351018306c8017c02c801830151035105110351018305c8027c02c80183015103510111032301110351018304c8037c02c8018301510351051103510b8301510251077c0e51" + }, + { + "filename": "head-icepop-b", + "data": "0x00071c19020500061c0893051902000400021c059b08010316031901000400011c019b051c08930319020102190400011c019b051c08930319020102190400071c089305190116011904c9071c089305190116011904c9071c0893071904c9071c089305190116011904c9071c0893071904c9071c089307190400071c089307190400011c029b041c089307190400011c029b041c01930201019301010393061901000500061c0893051902000800021c0c00021902000800011c0d00011903001600011903001a00160001190300" + }, + { + "filename": "head-igloo", + "data": "0x00051e1405080006010b0005000401013c0201023c0301080004000101033c0301013c0301023c0101070003000101013c0601013c0501013c0101060002000101033c0101043c0101013c0101053c0101050002000601013c0601013c0401050001000101013c1001013c0101040001000501053c0101063c030104000100140104001201013c0101013c020102000101023c0901063c0101013c040101000301013c0401013c0501013c0201013c0101013c0201013c010101000301013c0401013c0501013c0301013c0201023a013c01010101023c0101053c0101033c0201043c0201023a013c01010101013c0301013c0501013c0401013c0101013c0201033c010101000401013c0501013c0401013c0101013c05010100" + }, + { + "filename": "head-island", + "data": "0x00021b14060400040f0d000300060f0100061c05000700020f091c03000500080f031c01ca031c01000400040f01ca030f031c01ca0200031c0400020f020002ca0100010f021c02ca0300021c0400010f040002ca0100021c01ca0400021c090002ca0200011c01ca0500011c0400060f01ca020002ca06000300080f01ca010002ca06000300080f01ca010002ca06000300080f01ca010002ca06000300080f01ca010002ca060003000e26040002001026030001000d2601460426020002260146012602290226022902260146032601460326010006260229062601460526010014260100" + }, + { + "filename": "head-jellyfish", + "data": "0x00031c1b050700055f016a035f07000400016a0e5f04000200065f016a0c5f02000200135f02000100085f0576055f016a025f01000100015f016a045f0976065f0100055f0d76055f015f016a025f0f76025f016a015f045f0f76045f035f1176035f035f1176035f0100015f1376015f01000100015f1376015f01000100015f1376015f01000100015f036e0176036e0176036e0176036e0176036e015f01000100156e01000100016a086e0690066e01000100016a0200016a0e6e016a0100016a01000100016a0200016a0e00016a0100016a01000100016a0200016a0e00016a0100016a0100016a0200016a0f00016a0200016a016a0200016a1000016a0100016a016a1300016a0100016a016a1500016a016a1500016a" + }, + { + "filename": "head-jupiter", + "data": "0x00011d1a0309000882090007000c82070007000982037d07000400107d023704000300057d0f37030003000b3709380300010005370a3809370100010006380a37087d0100010009370f7d01000637147d0437167d1a7d1a7d1a7d187d0237167d0437147d0637010001370b7d0c37010001000e37042503370382010003000b370225022302250382030003000482083704250482030003001482030004001282040007000c820700090008820900090008820900" + }, + { + "filename": "head-kangaroo", + "data": "0x00051a1406037e0a00037e0400017e0238017e0800017e0238017e0400017e0338017e0600017e0338017e04000100017e0338017e0400017e0338017e05000200017e0238027e0200027e0238017e060003000a7e07000300087e09000300087e09000300087e09000300087e09000300067e088103230300067e088103230300067e0b810300067e022309810300067e0b810300067e0b81" + }, + { + "filename": "head-ketchup", + "data": "0x000218140807000224070007000224070006000424060006000424060005000689050005000623050001000224028902240289022402890224010001000e23010010241024102410241024102410241024022403890224038906240424048908241024" + }, + { + "filename": "head-laptop", + "data": "0x00061b1605161f011f010b013c120b011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f031f010e011f010e011f010e011f010e011f010e011f010e011f010e011f010e011f010e021f021f130e011f021f010e011f010e011f010e011f010e011f010e011f010e011f010e011f010e011f010e031f011f130e021f161f" + }, + { + "filename": "head-lightning-bolt", + "data": "0x00021e19050800031e0e000700081e0a0007000c1e060006000c1e070006000b1e080005000b1e090005000a1e0a0004000a1e0b000400091e0c000300091e0d000300081e0e000200171e0200161e01000100151e03000100131e0500121e070005000b1e090004000a1e0b000400081e0d000300071e0f000300051e11000200041e13000200021e15000100011e1700" + }, + { + "filename": "head-lint", + "data": "0x00021b16050a00018c0b000900018c0c00030001910600018c040001400600020001910300018c0200038c0140010002400600030002910200028c0191028c034004000291010005000340028c0191018c014001910240018c0200019102000100018c0200014001910340018c0191018c024001910240028c0300038c034001910340038c024001910140018c04000100018c0100018c024001910340018c0191028c014001910140028c03000300018c0191024001910240028c0191028c02400191028c010001910100028c0191018c024001910240028c0191028c0240038c010001910200018c0140028c014001910240058c0240028c0191018c01910100058c0740038c01400191038c010001910100038c01910840028c01400191028c020001910200018c01910a40018c0191028c03000200038c0140018c01910640018c0191038c01910200030001910140028c0191014004230140048c0100029101000200048c01910740028c0191028c03000200018c010002910740028c0191018c01910400050001910100014001000340018c0191018c0100018c0500090001400191010001910900" + }, + { + "filename": "head-lips", + "data": "0x00051d1503070004240400042407000500072402000724050004000d2402010324040003000e2403010324030002001324010102240200010018240100010006240c01062401000524100105240424120104240324140103241a240100182401000100182401000200162402000300082404010824030005001024050008000a240800" + }, + { + "filename": "head-lipstick2", + "data": "0x000118140806000324070004000724050003000137092403000200012401370a240200020002240137062401370224020002000324043702010324020002000724023703240200020007240237032402000b2a0101042a0b2a0101042a0b2a0101042a0b0d0105040d0b0d0105040d0b0d0105040d0b0d0105040d0b0d0105040d0b0d0105040d060d0223030d0105040d0b0d0105040d0b0501010405" + }, + { + "filename": "head-lock", + "data": "0x00031814080400081f040003000a1f03000200031f0600031f02000200021f0800021f02000200011f010d0800011f010d02000200020d0800020d0200107a108a108a108a108a108a108a108a018a026d0a8a026d018a018a026d048a0223048a026d018a078a0223078a108a" + }, + { + "filename": "head-macaroni", + "data": "0x00081d1403010008290800082901000229060a022906000229060a022901260829012606000126082901260a2606000a26012601280826060008260128012601260128092604000826022801261726012802260100182601000100152601280226010002001626020003000626020a0126020a0126020a0626030004001226040006000e260600" + }, + { + "filename": "head-mailbox", + "data": "0x00071c1405070005890b00070005890b000a0002890b000a050289030508000a050289030508000a050289030508000a050289030508000a0502890305060102000a05028903050401013a010102000a0502890305060102000a0502890305060102000a050289030501010423010102000f05060102001705" + }, + { + "filename": "head-maze", + "data": "0x00061b14050acb01000bcb01cb0b0001cb040001cb030001cb01cb01000bcb010001cb010004cb010001cb01cb010001cb030001cb070001cb040001cb010001cb01cb030001cb030007cb010004cb010001cb06cb010002cb030001cb080001cb01cb010001cb050001cb010001cb010001cb010006cb010001cb01cb010005cb010001cb010003cb080001cb01cb050001cb050001cb010008cb01cb010003cb010003cb010001cb080001cb010001cb01cb030001cb010001cb010001cb010008cb010001cb010001cb03cb010001cb100001cb01cb010001cb010004cb010007cb010005cb01cb030001cb080001cb070001cb14cb010001cb" + }, + { + "filename": "head-microwave", + "data": "0x00071a1f05010002950f06012102060100029501060e9201210143010e0100029501060e920121010e01430100029501060e92012102c80100029501060e92012102060100029501060e92012102c80100029501060e92012102060100029501060e92012102c80100029501060e92012102060100029501060e92012102c80100010e019501060e9201210206020e019501060e92012102c8020e01950f06012102c8010e02950f0601210206010e1400010e1400010e1400010e1400010e1400010e1400010e1400010e1400010e1400010e1400010e1400" + }, + { + "filename": "head-milk", + "data": "0x00031b14080100014a0d7f04000100014a067f0524027f0400034a057f09240289034a097f05240289034a0d430300034a0143017f0143027f0143047f0143017f01430300034a0d430300034a0d430300034a0d430300034a0d430300034a0d430300034a0d430300034a0d430300034a0d430300034a0d43030003c80d7f0300034a0d430300034a0d430300" + }, + { + "filename": "head-mirror", + "data": "0x00041a14061497019702060101010603010a0601010197019701060101010603010b060101019701970101010603010c06010101970197010603010d0601010197019703010106063c0106063c01010197019702010206013c0406013c0106013c0406013c0101019701970101043c0406033c0406013c0101019701970106013c0206013c0406013c0106013c0406013c0101019701970106013c0206013c0406013c0106013c0406013c0101019701970406063c0106063c0101019701971106010101970197110601010197019711060101019701971106010101970197120101971497" + }, + { + "filename": "head-mixer", + "data": "0x00021a1406030002230300022403000224050002000172030001230172030001240172030001240300140c010c030f020c030f020c030f020c0123010c0123010c010c010f015c010f020c010f015c010f020c010f015c010f020c0124010c0123010c100c014e010c01b0010c020c0123040c0123030c0301020c014e010c014e010c020c0123040c0123030c0372020c014e010c014e010c020c0123040c0123040c0123070c020c0123040c0123040c0123070c020c0123040c0123040c0123050c011f010c020c0123040c0123040c0123070c020c0123040c0123040c0123050c011f010c020c0123040c0123040c0123070c020c0123040c0123040c0123050c011f010c010c0301030c0123040c0123070c010c0372020c0301030c0123040c021f010c020c0123030c0372030c0123040c021f010c140c" + }, + { + "filename": "head-moon", + "data": "0x00031a160607000687070005000387035e0487050003000487035e0787030002000487025e0687015e0387020002000e87015e0187020001001287010001000587015e0887015e038701000287015e11870187025e11870187015e128714871487148701001287010001000f87015e028701000200058702230687025e0187020002000b87035e0287020003000687015e0387015e0387030005000a870500070006870700" + }, + { + "filename": "head-moose", + "data": "0x00051c15040383010002830c000283010003830383010002830c850283010003830383010002830c850283010003830383010002830c8502830100038307830b85068307830b85068307830b85068304000e85060004000f85050004000f85050004000f850500040005850d980200040005850d98020004000585069802840298028401980200040005850d9802000400058501980b840198020009000d980200" + }, + { + "filename": "head-mosquito", + "data": "0x00011f14030c0002350e000a000235030002350b0009000135030002350d0008000135030001350f00080001350200013510000800013502000135100008000135020001351000040009110f0003000211014909110d000200021101490b110c000100021101490d110b00010011110a001311090002110149101109001411080001001b1102001511050003000a11078508000400021107850711080005000f110800" + }, + { + "filename": "head-mountain-snowcap", + "data": "0x00031c15040a0004010a0009000101028d0301090008000101018d0601080008000101018d0601080007000a01070007000101018d0601018d0101070006000c01060006000c01060005000e01050005000e0105000400021d0201021d0401021d0301011d04000400021d0101041d0201041d0101021d04000300021d0201051d0101041d0201021d03000300021d02010a1d0201021d03000200031d0201051d0101041d0201031d02000100021d01010f1d0101031d01000b1d0301071d0101021d0100161d01000300061d0600061d0300" + }, + { + "filename": "head-mouse", + "data": "0x00031e1407070e0400070e0500070e0400070e0500070e0400070e0500070e0400070e0500070e0400070e0500070e0400070e0500070e0400070e050002000e05070002000e05070002000e05070002000e05070002000e050400030e02000e050400030e02000e050400030e02001205030002000e05011f0105011f0105030002000805024b0105024b05050300020012050300" + }, + { + "filename": "head-mug", + "data": "0x00031b14020900067f0200017f07000700037f0400017f0300027f0100017f03000600017f0200037f0300037f07000700027f0100017f0e0019000300160103000101016f014b1101014b010101000101014b0101016f014b1101014b0101020101000101016f024b1001014b0101010102000101016f024b1001014b0101010102000101016f024b1001014b0101020101000101016f024b1001014b010101000101014b0101016f024b120102000101014b0101016f014b1101010004000101016f014b1101010005000101016f014b040104370401014b0201020006000101016f014b040102370401014b0201030007000101016f024b0601024b02010400" + }, + { + "filename": "head-mushroom", + "data": "0x00021c150408000855080005000855025104550500030003550151045502510455025102550300020008550451055501510255020001000a5502510a5501000100035502510c5503510255010003550451065502510255055102550155015102550251035501510355025102550551025501550151105503510355185501001655010003001255030005000eaf050005000eaf050005000eaf050005000eaf050005000eaf0500050002af045508af0500050002af01550223015508af0500070004550d00" + }, + { + "filename": "head-mustard", + "data": "0x00021814080700022607000700022607000600042606000600042606000500068a050005000623050001000226028a0226028a0226028a0226010001000e230100104610461046104610461046104610460246038a0246038a06460446048a08461046" + }, + { + "filename": "head-nigiri", + "data": "0x00051c1404040002ce01cd03ce01cd03ce01cd03ce01cd01ce0400020001cd03ce01cd03ce01cd03ce01cd03ce01cd03ce020002ce01cd04ce01cd03ce01cd03ce01cd03ce01cd04ce03ce01cd03ce01cd03ce01cd03ce01cd03ce01cd04ce03ce01cd03ce01cd03ce01cd03ce01cd03ce01cd04ce03ce120103ce01001601010001001601010002001401020001001601010001001601010002001401020001001601010001000a0103cf09010100020014010200030012010300" + }, + { + "filename": "head-noodles", + "data": "0x00021e1402100001360b00100001360500013605000f000136040002360600050001d0010001d0010001d005000136020002360800040001d0015c01d0015c01d0015c01d002000298038803160700030001d0015c01d0025c03160398068802160600020001d0015c01d0025c02160419038803c20288011602980400020001d0015c01d0015c02160619018801c2034601c201880116039803001c0b01001a0b010001001a8901000200188902000200180b02000300168903000300160b03000400140b04000500070b0789040b05000600100b060008000c0b0800" + }, + { + "filename": "head-onion", + "data": "0x00041a14060a00019c09000800019c0100019c0100019c07000900039c080008000137039c013707000200029c0137039c0137039c0137039c0137019c02000100039c0137039c0137039c0137039c0137029c0100049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c01c8019c0123019c0137039c0137029c01c80137039c0100039c0137029c0423019c0137039c0137029c01000200029c0137039c0137039c0137039c0137019c02000300019c0137039c0137039c0137039c01370300" + }, + { + "filename": "head-orangutan", + "data": "0x0002181406070001240a0004000b24030003000b24040003000c24030001000e2403000624070e0424010002000424070e04240100020002240c0e01240100020002240c0e01240100020002240c0e01240100020002240c0e01240100020002240c0e012401000200100e0200040e0a08020e0200030e0c08010e0200030e010801240208010e0108010e030801240108010e0200030e01240a080124010e0200030e01240a230124010e0200030e0c24010e" + }, + { + "filename": "head-orca", + "data": "0x00021b14010d00010d0c000d00020d0b000d00030d0a000d00040d09000d00050d08000d00060d07000b000b0d040009000e0d03000800100d02000100030d0300110d02000200030d0100130d01000200170d01000300160d01000200180d0200030d0100140d0100030d0200130d0100030d0400080d090b02000800060d090b03000900040d090b0400" + }, + { + "filename": "head-otter", + "data": "0x000918140704000b86020002000e86010002000f8602000f8602000f86010010861186118602000286047f0623037f020001d10486017f0623017f0286020002d1037f04d1012303d1027f020008d1012301d1012304d1" + }, + { + "filename": "head-outlet", + "data": "0x000418160810511051045108a40451035102a4012304a4012302a40351035102a4012304a4012302a40351035101a4037c02a4037c01a40351035104a4022304a40351035104a4022304a40351045108a404511051045108a40451035102a4012304a4012302a40351035102a4012304a4012302a40351035101a4037c02a4037c01a40351035104a4022304a40351035104a4022304a40351045108a4045110511051" + }, + { + "filename": "head-owl", + "data": "0x000218140507000ad20200060001d20ad301d20100050001d201d304d402d304d401d301d2050001d201d30ad401d301d2050001d201d301d402d501d302d401d302d501d401d301d2050001d201d303d401d302d401d303d401d301d2050001d201d304d402d304d401d301d2050002d201d308d402d301d20400042b01d308d401d301d20300062b08d401d301d20300062b01d207d401d301d20200072b01d207d401d301d20200072b01d207d401d301d20200072b01d207d401d301d20200062b02d207d401d201000200052b03d206d401d202000200032b04d206d401d20300010001d2012b07d206d403000bd207d40100" + }, + { + "filename": "head-oyster", + "data": "0x00021d14040a0005810a000700048103820481070007000181098201810700050003810982038105000500018105820398058201810500020004810282099802820481020002000181058209980582018102000200018102820f980282018102000381018211980182038101810382119803820181018102821398028201810181048206980351079803820181010002810382049805510498038202810100030002810182039807510398018202810300050001810198025507510255019801810500040001810f550181040003000481035505810355048103000300018102d6058103d6058102d601810300040011d60400" + }, + { + "filename": "head-paintbrush", + "data": "0x00091c18020700036d0572097502240600046d027201b10272097502240600046d0572087503240100096d0572087503240a6d0572087503240a6d0572087503240a6d0572077504240a6d0572077504240100096d0572077504240600046d0572077504240600036d0224017201b10272067505240700036d057206750524160001240100022418000224180001240100180001240100" + }, + { + "filename": "head-panda", + "data": "0x00051914060100042309000423010006230700062306230901042305230b01032304230d010223010002230e010123010002001001010002001001010002001001010002001001010002001001010002001001010002000a0104230201010002000a0104230201010002000701062303010100020010010100" + }, + { + "filename": "head-paperclip", + "data": "0x00091d14031ad701d7180001d701d7180001d701d7180001d701d7030010d7050001d701d7030001d7140001d701d7030001d7140001d701d7030001d7140001d701d7030001d7140001d701d7030016d701d7190014d70600" + }, + { + "filename": "head-peanut", + "data": "0x00041b1605040005d80d00020002d8036004d80b00010002d8016003c9036002d80a00010002d8016001c902d8016002c9016001d80a0002d8026003d8016002d8016002d8090001d8016002c9036001d8046002d8080001d8016002d8016003d8016001d802c9016005d8040001d801600bd8016006d8020002d8016012d80100010001d8016010d8016001d80100010002d8016012d8020002d801600dd8026002d803000fd802c9016001d8040005d8036005d8016002d8016001d8050002d8016002d802c9056001d8026002d8060002d8026002d8016004c9016002c901d80100080002d8036004d8016003d801000a0003d8046003d802000d0005d80400" + }, + { + "filename": "head-pencil-tip", + "data": "0x00031714090600022306000600022306000500042305000500042305000400062304000400022301570323040003000223035703230300030007570123030002000a57020002000a57020001000c57010001000c5701000e570e57025704260557032601570626035704260326083703260e26" + }, + { + "filename": "head-peyote", + "data": "0x00021e14030a0001d9020001da020001d90a000a0001d901db010001da010001db01d90a00080001d9020001db01dc01da01dc01db020001d90800090002db05dc02db0900050001d9010002aa01dd02aa03dd02aa01dd02aa010001d90500040002d902aa01dd04aa01dd04aa01dd02aa02d90400050002aa01dd02aa02d901aa01dd01aa02d902aa01dd02aa0500040002aa01dd02aa02d902aa01dd02aa02d902aa01dd02aa0400030002aa01dd0faa01dd02aa0300020017aa020001d9010017aa010001d9010001d917aa01d9010002d917aa02d9010001d917aa01d9010001d9010017aa010001d9020002aa01da11aa01da02aa0200030001aa13da01aa0300030015aa0300050011aa0500" + }, + { + "filename": "head-piano", + "data": "0x00041b15080400050e0a000200020e010501590105040e08000100020e0105080e070001000b0e07000d0e06000d0e06000e0e05000e0e05000f0e0400110e0200130e130e130e130e010e0159070e0159050e0159030e010e0159010e0159010e0159010e0159010e0159010e0159010e0159010e0159010e0159010e010e1159010e130e" + }, + { + "filename": "head-pickle", + "data": "0x00031b15050400040f0e000200080f0c000100030f01c0060f0b000100030f015c030f01c0020f0b00020f01c0060f015c020f0a00020f015c030f01c0070f0800060f015c040f01c0015c050f0400010f01c0120f0200010f015c130f0100150f0100160f0100150f0100130f01c0010f0100020f01c0100f015c010f0200010f015c120f02000b0f012302c0015c040f01000300030f01c0015c010f01c0040f025c050f01000500050f015c090f020007000b0f0400" + }, + { + "filename": "head-pie", + "data": "0x00011c14040b0002cc0b00050002cc030002cc050002cc0500060002cc030002cc030002cc0600050002cc030002cc050002cc0500060002cc080002cc0600050002cc04000209040002cc0500060002cc0200020901190109020002cc0600090001de040901de0900050002de010903de020903de010902de0500030012de0300020001de010910de010901de0200010016de0100010001de04bb01de04bb01de04bb01de04bb01de01bb010018bb18bb03bb029503bb0196019503bb0195019603bb029504bb01bb01950196029501960295019202950196029501960295019602950196029501bb01000195019602950196029509920196029501960295010002000196029501960295019202950196029501960295019602950196019502000200019602950196029501960295019602950196029501960295019601950200" + }, + { + "filename": "head-piggybank", + "data": "0x00041d14020c0003420c000b000142039301420500027604000800036c012503930125026c02000176016c0176040006000276026c017605120176026c0176026c0176040005000176106c01760400020001760100036c01010f6c01760300010001760259146c01760200010001760159136c0112016c03760100017601590176166c0176015901000276166c017603000176146c037603000276156c0176030001590176146c0176010004000376106c02760200050013760300060006760112020101120676050008000c760700" + }, + { + "filename": "head-pill", + "data": "0x00061d140305000924071d050003000c24081d03000200062401010724081d02000100032402010a24091d01000100032402010b24081d01001124091d1124091d1124091d1124091d1124091d01001024061d010f011d010001000f24071d010f011d010002000a2403230124061d010f011d020003000c24081d030005000924071d0500" + }, + { + "filename": "head-pillow", + "data": "0x000319160702df0e0002e00ddf05e0010002df0ee00100010003df0de00100010003df08e003df02e00100010003df0de00100010003df02e002df09e00100010003df0de00100010003df0de00100010003df0de00100010003df0de00100010003df0de00100010003df0de00100010003df0de00100010003df0de00100010003df05e004df04e00100010003df0de00100010002df0ee001000ddf05e002df0e0002e0" + }, + { + "filename": "head-pineapple", + "data": "0x00031914070600010f010002e10100010f0600040001e10100020f02e1020f010001e10400040003e1010f02e1010f03e10400060006e1060004000228022602280226022804000200022802260228022602280226022802000200022802260228022602280226022802000100012802260228022602280226022802260128010001000128022602280226022802260228022601280100010001260228022602280226022802260228012601000100012602280226022802260228022602280126010001001126010010260100010010260100122601000226034201260442012603420226010001000226034201260442012603420226010002000e260200" + }, + { + "filename": "head-pipe", + "data": "0x00061c150509160e0009980e0009980e000100030804980f000100030804980f000100030804980f000100030804980f000100030804980c0003160100030804980c160398010003081398010003081398010004081298010006080123010101230101012308080398020015080300140814000308" + }, + { + "filename": "head-pirateship", + "data": "0x00011f14030c0002230e000d0001980e0005000198030008230b00040002230400082302000223060005000198050001230151012302510123015101230200019806000300025501980500032302510323010003550500030003550500042301510323020003550400030004550300022301510423015101230100035505000200065501000923030001980600050001980700019807000198060005000198070001980700019806000d2601980700019806000c97012601980700019806000197022309970126089701980100052601970223099701260198010001970100019701000197010001980126049701000c970a2603970300020004970123109705000300029703230197012301970123019701230197012301970123049706000400029701230e97070005000f970800" + }, + { + "filename": "head-pizza", + "data": "0x000319140708000237080008000237080007000137022801370700070001370228013707000600013704280137060006000137012802370128013706000500013702280237022801370500050001370628013705000400013708280137040004000137082801370400030001370a2801370300030001370a2801370300020001370c2801370200020001370c280137020001000137032803370828013701000100013701280137012803370528023701280137010001370828032305280137013710280137" + }, + { + "filename": "head-plane", + "data": "0x00041e14030d0002010c000c0005010a0009000901090007000b01090005000c010a001b001b0006000bc80a0006000bc80a0006000bc80a0006000cc8090006000cc8090002c8040012c80200010102c8040005c8060107c8020001010ac8090105c8010001c801010924020106230201052402000101010007c80b0105c802000101" + }, + { + "filename": "head-pop", + "data": "0x000318140802000ca302000100061405280314010005140128031404280314022802140128011401280314042802140214012802140128041405280114021401280814042801140228051401280314042801140a14052801140a1404280214091405280214091404280314081404280414071404280514051405280614031404280914021403280314012801230201012301280214010002280c14010002000ca30200" + }, + { + "filename": "head-porkbao", + "data": "0x00051914070500025701000257010002570500050002570183025701830257050004000257018302570183025701830157040004000157018302570183025701830257040002000e57020002000e57020001001057010001001057010001001057010012571257125712570957037d06571257010010570100" + }, + { + "filename": "head-potato", + "data": "0x00061d15040f0001c909000d00077a05000b00037a01c9077a030008000b7a02c9027a020005000f7a01c9027a02000200167a01000100177a0100187a0100187a0100187a01c9187a0100107a02c9057a02000100097a01230101012301010123017a02c9057a02000200057a02c90d7a03000300047a02c90b7a050006000a7a0900" + }, + { + "filename": "head-pufferfish", + "data": "0x00041c160509000168020001680a000600016801000668010001680700034903000568014904680700054902680349076806000449036803490368024903680500034904680349036802490468040003491068040002001268030002001268030002001268030005490d6805490149046801930b680193046801490549029309680293054901490a68044907680149054902930468014902350149026801930549030006930268044901680393040004000e93050005000c930600070008930800" + }, + { + "filename": "head-pumpkin", + "data": "0x00051b1406080003b001c501b00800080003b001c501b00800080003b001c501b008000300072401b0072403000300072401480724030002240148072401480724014802240224014807240148072401480224022401480724014807240148022402240148072401480724014802240224014807240148072401480224022401480724014807240148022402240148072401480724014802240224014807240148072401480224022401480585016d0385016d05850148022402240148072401480724014802240224014807240148072401480224" + }, + { + "filename": "head-pyramid", + "data": "0x00031e14030800018601b111000800028601b110000700038602b10f000700038603b10e000600058603b10d000600058604b10c00050002860284028601b1028602b10b000500078605b10a000400088606b109000400088607b1080003000a8607b1070003000a8608b1060002000b8609b1050002000c8606b1028601b1040001000d860ab1030001000186038401860184078607b1038601b102000986032303860bb101000f860cb1" + }, + { + "filename": "head-queencrown", + "data": "0x00021b14050a00025b0a000900015b01180141015b09000900015b01410118015b09000500035b0200025b0200035b05000400015b0300015b0100025b0100015b0300015b04000100035b0500045b0500035b0100015b0200015b03000241015b018b0154015b02410300015b0200015b015b0200015b01000441015b0254015b04410100015b0200015b015b01000141015b0541015b0154018b015b0541015b01410100015b0100015b0141015b0541045b0541015b0141015b01000100015b0141015b0641025b0641015b0141015b01000100015b0241015b0441045b0441015b0241015b01000200015b0241015b0341015b028a015b0341015b0241015b02000200015b0241015b0341015b028a015b0341015b0241015b02000100025b0141035b0241015b028a015b0241035b0141025b01000200125b02000300103503000200055b0841055b02000200125b0200" + }, + { + "filename": "head-rabbit", + "data": "0x00041715090372080003720372080003720372080003720372080003720372080003720e720e720e720e720e720e720e720e050e0502050b230105030502010405020103050e050e05" + }, + { + "filename": "head-rainbow", + "data": "0x00041a140608000c1807000d18060003180b14050004180b140400021803140b460300031803140b4602000118031403460b0f01000218031403460b0f031803140346030f0854031803140346030f0854031803140346030f03540512031803140346030f03540512031803140346030f035403120200031803140346030f035403120200031803140346030f032303120200031803140346030f035403120200031803140346030f035403120200" + }, + { + "filename": "head-rangefinder", + "data": "0x00061b1405020002050100020501000d72010501050b7203050172020e0101010e017201050105027201050372020c037203050172040e0172010501050172020511720105010e010c0205110c010e010e140c010e010e140c010e010e140c010e010e140c010e010e140c010e010e140c010e010e120c0205010e010e080c0505050c0205010e010e140c010e010514720105" + }, + { + "filename": "head-raven", + "data": "0x00041e14080100080e0d000400070e0b0001000c0e090002000c0e080001000e0e070001000e0e070001000f0e0600100e0600100e0600100e0600100e0600090e070d0600080e0c0d0200070e0f0d070e0f0d070e0d0d0200080e090d0500" + }, + { + "filename": "head-retainer", + "data": "0x00091d150504000320110004000120011906200c0004000320011906200a0003000520011902200119042008000300092001190620050003000220011903200119062001190320040002000220021903200119032002190120031901200400020002200f19022003000100022011190120030001000120031904a4011904a4011904a40119022002a402200219012001a40120011901a4011901a4021901a4011901a40119012001a40320010001a4052001a4022003a4022003a4022006a4030003a41200" + }, + { + "filename": "head-rgb", + "data": "0x00011c160409000664090007000a64070006000c64060005000e64050005000e640500040010640400040001640628026406690164040003000165072802010769015a030002000265062804010669025a020001000365052806010569035a010001000365052806010569035a01000565032808010369055a0565032808010369055a0665022808010269065a0765012808010169075a086501e2060101e2085a086508e2085a0100086506e2085a01000100086506e2085a01000200086504e2085a02000300086502e2085a0300050006650200065a0500" + }, + { + "filename": "head-ring", + "data": "0x00021a15060600084f06000600024f0101024f016c024f06000700034f016c024f07000500032a044f032a05000300022a021e022a024f022a021e022a03000200012a021e0a2a021e012a02000100052a011e0700052a01000100032a011e0b00032a0100032a021e0c00032a012a0101012a011e0d00032a032a011e0d00032a032a011e0d00032a032a011e0d00012a0101012a032a011e0d00012a0101012a032a011e0d00032a0100032a021e0a00032a01000100052a081e052a01000200102a020003000e2a030005000a2a0500" + }, + { + "filename": "head-road", + "data": "0x00061c1403020017e3020017e3020017d4020017e3020017e3010017e30100010017e30100010017e30100010017e30100010017e3010018e3010017e4020017e3020001e303e403e303e403e303e403e303e401e3020017e30200" + }, + { + "filename": "head-robot", + "data": "0x00031c140405000e1f050005000e1f050003001205030003000105011f0205011f0205011f0205011f0205011f0205011f0105030003001205030003001205030003000105101f01050300010001050100120503000100010501001205010001050100031f1205010001050100010e021f1205031f031f1205021f010e010e021f1205031f031f1205021f010e03000105010e0259010e0259010e0259010e0259010e0259010e0105031f03000105010e020b010e020b010e020b010e020b010e020b010e0105030003000105100e01050300030012050300" + }, + { + "filename": "head-rock", + "data": "0x00031b14050b00030c08000a00010c031f020c06000900010c011f010c041f020c04000800020c021f010c051f020c02000300050c051f010c061f010c01000200010c121f010c0100010c051f040c0a1f010c0100010c091f010c091f010c0100010c021f010c101f010c0100010c071f020c011f070c021f010c0100010c051f020c0c1f010c010c141f010c010c041f010c0e1f020c010c041f010c081f020c011f030c02000100010c041f010c041f030c021f010c021f010c02000200010c051f030c041f010c021f010c03000300050c041f030c031f010c03000400010c0c1f010c0400" + }, + { + "filename": "head-rosebud", + "data": "0x00021c14040c0001940b000a000119010002940a000900021904940900070004190694070006000419089406000500051909940500040006190a940400040005190b940400030006190394011d08940300030006190394011d08940300011d020006190294021d08940200011d0100011d010007190194021d08940100011d01000100041d05190194021d0694041d01000200051d03190194021d0494051d02000300051d0219041d0294051d03000400041d0119011d0123021d0123011d0194041d04000500031d0119021d0223021d0194031d050006000c1d060006000c1d0600" + }, + { + "filename": "head-ruler-triangular", + "data": "0x00021c1508019a1300019a014f1200029a014f1100019a034f1000019a044f0f00029a044f0e00019a064f0d00019a074f0c00029a074f0b00019a094f0a00019a034f0100064f0900029a024f0200064f0800019a034f0300064f0700019a034f0400064f0600029a024f0500064f0500019a034f0600064f0400019a104f0300029a094f049a034f0200019a0a4f049a044f0100019a134f" + }, + { + "filename": "head-saguaro", + "data": "0x00031c14040c00047908000c00057907000300047905000579070003000479020002790100057907000300047902000279010005790700027901000479020002790100057907000279010004790200017902b0057902000279010002790100017901b004790500057902000279010002790300047905000579010003790100027904000379050004790200037901b001790100027902000479020001790100047902000379030002790200047902000179010004790200027904000279020004790200017901b00479020002790400037901000479030001b004790100037904000100027901b0047904b004790100037904000200017901b0077902b00379010002790500040002790323037901b0037901b0027905000500077901b0037901b002790500" + }, + { + "filename": "head-sailboat", + "data": "0x00011c14040d0001010a000c0002010100010108000b0003010100010108000a0004010100020107000900020102df01010100020107000800030102df010101000301060007000701010003010600060008010100040105000500090101000401050004000a0101000501040003000b0101000501040002000c0101000601030001000d010100060103000e010100070102001800188301000183149801830100020001830198108301980183020003000183109801830300040010830400" + }, + { + "filename": "head-sandwich", + "data": "0x00041d14030d0001880c000c0003e10b000c0002e1011a0b000c0003e10b000500088301880783050003000783017d028301880483017d0483030002000283017d088301880183017d0883020001000883017d0a83017d04830100010018830100010018e501000100185501000100016d0655016d0855016d07550100011c186d011c031c066d081c056d041c0100041c0298051c0398051c0298011c0100011c010003000698082306980300040012980400" + }, + { + "filename": "head-saturn", + "data": "0x00051c16030b0004e60a00090008e6080007000ce60200023a0200010005510ee60100023a0200015105000ee605000151040002140de6011404000151040003140ce601140400010001510200025503140be6021403000200015101000255041409e603140300030001510355061405e6041403000400015102550f1403000500015104550b140151020001e60500015502510555061402550100015102000600025502510a55030001510100030002e60100045503510755040001510200013a02e60200065503510355050001510200023a050007550351050001510b000455040005510100" + }, + { + "filename": "head-saw", + "data": "0x00091e15020c9710a301000b9710a3020003970100069710a3020002970300059710a3020002970300059710a3020002970300059710a3020002970300059710a302000297030005970ea3010001a302000297030005970ca3010001a302000200039701000297012602970ba3010001a304000100099703a3025105a3010001a30600099702a3025105a3010001a30800080008a30c00" + }, + { + "filename": "head-scorpion", + "data": "0x00031e1403060008e70d00060008e70d00060008e70d00030004e7050003e70c00030004e7020003e803e70c00030004e7020001e8010002e802e70c00010003e7070003e80d00010003e71700010003e7170003e7180003e7180003e7180003e703000de8080003e7020010e80300039f05e710e803e7019f0200010004e702e802e902e802e902e802e901e807e70200010004e704e802e902e802e904e806e7020006000ee8010003e7039f" + }, + { + "filename": "head-shark", + "data": "0x00031c14030a0004ec0b000b0005ec09000c0005ec08000c0005ec080001ec0b0006ec0700010001ec08000b430400010002ec05000e430300010003ec020011430200020003ec010012430100020004ec1343030003ec1343030003ec104301ec01430100030003ec104301ec01430100020003ec010011430200020002ec020011430200020001ec0300034301ec014301ec0243023c0101013c0101013c0101013c0300010001ec0400024301ec014301ec0243023c0101013c0101013c0101023c030006000643093c0400" + }, + { + "filename": "head-shower", + "data": "0x00011c19040b00020d0b000b00020d0b000800080d080006000c0d060005000e0d05000400101f04000400081f010b011f030b031f04000400101f040005000e43050005000e430500040010430400040010430400040010430400030012430300030012430300030012430300020014430200020014430200020014430200010016430100010001430100014310000143010001430100010004430e0004430100014301000143010001430e00014301000143010001431800010001430100014310000143010001430100" + }, + { + "filename": "head-skateboard", + "data": "0x00091e1402030016c00300010003c0016a0369016a0ac0016a0369016a03c00100010001c0011b01c0016a0369016a0ac0016a0369016a01c0011b01c0010002c0011b01c0016a0369016a0ac0016a0369016a01c0011b02c002c0011b03c0017c0ec0017c03c0011b02c002c0011b03c0017c0ec0017c03c0011b02c002c0011b03c0017c0ec0017c03c0011b02c002c0011b03c0017c0ec0017c03c0011b02c002c0011b01c0016a0369016a0ac0016a0369016a01c0011b02c0010001c0011b01c0016a0369016a05c0030e02c0016a0369016a01c0011b01c00100010003c0016a0369016a0ac0016a0369016a03c00100030016c00300" + }, + { + "filename": "head-skeleton-hat", + "data": "0x000519150704000a43040001001043010001001043010012431243010010af0100010010af0100010010af0100010010af0100010010af0100010010af0100010010af0100010007af01b101af01b106af010003000caf0300030002af01b101af016d01af01b101af01b101af01b101af0300030003af01b101af01b101af01b101af01b101af01b1030004000baf0300" + }, + { + "filename": "head-skilift", + "data": "0x00011e1403010001230100142301000123010001230800012301000123100001230200152301000123010006000123140006000123140006000223130006000423110007000b230900030014880400020001880a770188097701880300020001880a77018807770166017701880300020001880a77018807770166017701880300020001880a77018807770166017701880300020001880a7701880977018803000200163303000200168803000200163303000200063306230a330300020016330300040012330500" + }, + { + "filename": "head-smile", + "data": "0x00051d14030600042406000424060004000824020008240400012402001424020001240724020108240201072401240101162401010124012404011024040101240224160102240324140103240100032412010324010001000424100104240100020004240e0104240200020006240a010624020003001424030004000a2402010624040005001024050007000c240700" + }, + { + "filename": "head-snowglobe", + "data": "0x00051914080600048c07000300038c0151038c0151038c03000100018c0151058c0151068c015101000100048c0151018c0351028c0151038c0100038c0151018c0197025101970251038c0151028c0151048c025103970251058c048c025105970251038c0151038c0251039701260197012601970251038c048c0997048c048c04970126019701260297048c048c09970151038c038c015109970251028c11510100045104110751010001000f08010001000f080100" + }, + { + "filename": "head-snowmobile", + "data": "0x00071e15050c0001040c000c0001040c0008000305010002040b000b00010502040b000b00010502040b000b000123010402260a000a0003230426080003230600032302260155052605000c23012603550104052603000b23022602550804020002230901022602550804020005010123110102000601032301010b05030001040a010a050300010401000100012301050123010501230105012301000e040200" + }, + { + "filename": "head-spaghetti", + "data": "0x00041a1c060c000384050005000384030001840385018404000400038401850484028501d00284030003000184028501d001840485028404850200030004850184048501840585020003000f8502000300015503850255028501d002550385015502000200105502000200105502000100037d0c55027d02000100127d0100147d147d017d0201017d0101017d0701017d0301017d0101017d017d0401017d0701017d0301017d0101017d017d0c01017d0501017d017d010010010100017d017d0100017d0e00017d0100017d017d0100017d0e00017d0100017d017d0100017d0e00017d0100017d017d0100017d0e00017d0100017d017d0100017d0e00017d0100017d0200017d0e00017d02000200017d0e00017d02000200017d0e00017d0200" + }, + { + "filename": "head-sponge", + "data": "0x0004191408010003290200022902000429030001290222032901220929010001290222092903220229010007290222022903220229010003290222022902220229032202290100032902220a2901001029010010290100112911291129112910290100012902220d29010001290222032905230429020001000d2901220129010001000e290200" + }, + { + "filename": "head-squid", + "data": "0x00011c1a020d00026a0b000c00046a0a000b00036a01ed026a09000a00056a01ed026a08000900076a01ed026a070008000c6a060007000e6a05000600014f0e6a014f04000500024f0e6a024f03000400024f106a024f02000300034f106a034f01000200044f106a014f01ed024f0200044f106a024f01ed014f0200044f106a044f0200044f106a044f0300034f106a034f01000100014f0200034f0e6a034f0200014f016a014f03000245014f0123010101230101012301010123010101230101014f02450400014f016a014f020003450c4f03450300014f016a014f0100144502000100014f014501000145010002450100024506000245010002450100024501000200034501000145020001450800014502000145020001450100030001451300014f014501001700014f014501001700014f014501001700014f0200" + }, + { + "filename": "head-stapler", + "data": "0x00081c140407000d2404000400122402000200162401001724010017240100172401001724051812720100061811720100041801240218110005181224010018181818" + }, + { + "filename": "head-star-sparkles", + "data": "0x00021b17050a0002ad0a0006000129020001ad022901ad0900090001ad022901ad0900080001ad042901ad0300012901000129020003000129040001ad042901ad04000129030002000329020001ad062901ad0200012901000129020003000129030001ad062901ad0700050002ad082902ad0500030002ad0c2902ad0300010002ad102902ad010001ad142901ad01ad142901ad010002ad102902ad0100030002ad0c2902ad0300050001ad0a2901ad0500050001ad0a2901ad050001000129020001ad072903ad022901ad0400040001ad0c2901ad0400030001ad062902ad062901ad0300030001ad042902ad020002ad042901ad0300030001ad022902ad060002ad022901ad0300040002ad0a0002ad0400" + }, + { + "filename": "head-steak", + "data": "0x00071b160504000e51040002000251061803380518025102000100015109180138081801510100010001510918013808180151010001510a1801380918015101510a1801380918015101510a1801380918015101510a1801380918015101510a1801380918015101510138091801380918015102510238051803380118035105180151010003510838011801510138015104180251020008510238011803510418015101000400075102380518035101000a000a5102000b0007510400" + }, + { + "filename": "head-sunset", + "data": "0x00031d1403090008490900070004490142024901420449070005000549014201490242014901420549050004000149014201490c420149014201490400030001490142014904420126014202260142012604420149014201490300020001490142014903420a2603420149014201490200020002490342032601280126022801260128032603420249020001000249034203260828032603420249010001000249024203260a2803260242024901000349024202260c280226024203490249024202260e28022602420249014901420149024202260d28012602420149014201490249024202260e280226024202490249024202260e28022602420249014901420149024202260c280226024201490142014902490242022606280201012605280226024202490349024202260c2802260242034901000349024202260a280226024203490100" + }, + { + "filename": "head-taco-classic", + "data": "0x00051d14030a00038e0167028e0a000800038e0167018e0167048e08000600038e0167018e015701670157018e0167028e0167018e06000500018e0267018e0367011102570367038e05000500028e026708500157038e05000300018e0167018e015702110150018a0350018a025002110267028e03000300028e01670650018a0750038e03000300018e01110d50018a02500167018e03000200018e015701110150018a0e5001110157018e020001000167018e1450018e0200020001670450018a0c50018a02500267010002000111145001110200016701000350018a0d50018a0150018a025002000100016716500167010002000550018a0550018a0750018a0250010001670300145001670200" + }, + { + "filename": "head-taxi", + "data": "0x00041c170405000ee60500050001e603c8040105c801e60500040001e603c8040107c801e60400040001e602c8040108c801e60400030001e602c8040104c8034303c801e60300030001e601c8040104c8014303c8014302c801e60300010016e60100010016e60100010016e60100010016e60100010016e60100010016e60100010016e60100010002e6011f10e6011f02e60100011f0137141f0137011f091f061d091f010008e6061d08e601000200020e0500061d0500020e02000200020d1000020d02000200020d1000020d0200" + }, + { + "filename": "head-thumbsup", + "data": "0x00011a14050a00012b02e608000a0001e6012b02e607000a0001e6012b02e607000a00012b03e60700090005e60700080006e60700070006e60800060006e6012b07e60100030008e6012b07e6012b01e60be6012b07e6012b01e60de6012b06e6012b0de6072b01000ae6012b0ae60ae6012b08e6012b01e60ae6012b09e6012b0ce6082b010001e6022b05e6012b02e6012b08e6010008e6042b06e6012b01e60100030004e6012b03e6012b07e6012b0100040008e6072b0200" + }, + { + "filename": "head-toaster", + "data": "0x00031a1f0504000e840300030002840cd8028402000300018403d8089903d801840200040001840cd8018403000400018402d8089902d8018403000300010b0e72010b02000300010b0e72010b02000300010b0e72010b020d0300010b0e72010b020d0300010b0e72010b02000300010b0e72010b02000300010b0e72010b02000300010b0e72010b02000300010b0e72010b02000300010b0e72010b02000200120d0100021f120d0100011f0100120d0100011f1400011f1400011f1400011f1400011f1400011f1400011f1400011f1400011f1400011f1400011f1400" + }, + { + "filename": "head-toiletpaper-full", + "data": "0x00071a1605010002ee11010100010002ee1101010004ee110104ee110104ee110101ee017c010d01ee110101ee017c010d01ee110101ee017c010d01ee110101ee017c010d01ee110104ee110104ee110104ee1101010002ee027c01ee010101ee010101ee010101ee010101ee010101ee010101ee01010200010002ee017c1001010004000c010500050008010800" + }, + { + "filename": "head-tooth", + "data": "0x00041917060a0005570400030004570100025705010257020002000157040101570301015705010157010001000157060103570701015701000157100101570157110101570157110101570157110101570157110101570157110101570157110101570100015710010157020001570e0101570100020001570e0101570100030001570201097c020101570100030001570d0101570100040001570401035704010157020004000157030101570300015703010157020005000157020101570400015702010157020006000257060002570300" + }, + { + "filename": "head-toothbrush-fresh", + "data": "0x00021914011000016707000f000167011c016706000f000167021c046702000f000167061c016701000c000667021c0101011c0167010009000367081c0101011c01670100080001670d1c01670100080001670d1c0167010008000101011c0101011c0101011c0101011c0101011c0101011c0101011c0101010008000f01010008000f01010008000f01010008000f01010008000f0101000143010002430100134302000143020013430100024301000543012301460123014601230a430700114307001143" + }, + { + "filename": "head-tornado", + "data": "0x00031c150406000c81060003000281017c0281047e057c0381040002000281027c0b81017c03810300020003810f7c038101000200168103000b7c0181017c078101000500118102000700047c0181017c0181017c0581040006000c81060005000d81060004000b81090002000b810b00010009810e0002000a810800018103000500088106000181040001000181010001810100017c049c0281017c0681010001810300018101000481067c0881040003001281030003000481080004810500" + }, + { + "filename": "head-trashcan", + "data": "0x00031b14050900050508000700020504000105080007000105020009050300020011050300020008050723010d04000300010d08230a0d020006050323030d0505010d020002000205031f0205031f0205031f02050100010d010001000305031f0205031f0205031f03050200010501000205031f0205031f0205031f020501000105010002000205031f0205031f0205031f0205030002000205031f0205031f0205031f0205030002000205031f0205031f0205031f0205030002000205031f0205031f0205031f0205030002000205031f0205031f0205031f0205030002000205011f0523021f0205031f0205030002000205031f0205031f0205031f02050300020011050300" + }, + { + "filename": "head-turing", + "data": "0x00041d19031500018904000300126101890161030002000289016101cc01820161018201cc01610282016101cc0182016101cc0182016101820189016103000100018901940261028201610282016101cc018201610282016102820161018201cc028902000100018901941461018902000100018901000261018201cc016102820161018201cc0161018201cc016102820161028201610189020001000189010002890282016101cc01820161028201610282016101cc0182016101cc018201610189020002890194016101891261018901940100038901610189018201cc01610282016101cc01820161018201cc016102820161018201cc0161018901000189018901000189016101890282016101cc018201610282016102820161018201cc01610282016101890100018901890100018901610189126101890100018901890100018901610189018201cc016102820161028201610282016101cc018201610282016101890100018901890100038902820161018201cc0161018201cc0161018201cc01610282016101cc018201610189010001890189010001891461018901000189018901000189026102010161020101610201016102010161020101610201016102000189018901000189026102010161020101610201016102010161020101610201016101890100018901890100018914610189010001890189010001890194110001940100028901000189020002891100018903000100018901000289150001000189010001941600020002891600" + }, + { + "filename": "head-ufo", + "data": "0x00021e15020e00014f0d000d00034f0c000e00014f0d000b00064f0b0009000a4f090007000e43070006000a430106014302060243060006000c430206024306000500124305000500124305000500124305000400144304000400144304000400144304000400144f04000200184f02000100054f026d014f026d014f026d014f026d014f026d014f026d044f0100064f026d014f026d014f026d014f026d014f026d014f026d054f0400144f040009000a4f0900" + }, + { + "filename": "head-undead", + "data": "0x00021b16050600027903260b00060004790200027903260500020001260300027903000579060002000126017902000279020003790900020001260179020002790200037909000200027902000279020002790200018003000126030002000279020003790100027905000179022602000200027903000579050004790100018002000279020005790600037901000280010002790200057907000279010003000a7904000479010004001079020004000f7902000180018005000a79040002800700087907000300018003000879070006000180017901230125012301250123027901800300018002000500038006790380050004000e80040005000180010003800200028001000180060008000180090001800300" + }, + { + "filename": "head-unicorn", + "data": "0x00041b16040b00021c0a000800011c0300021c0600012602000900021c0100021c040002260300050003660100051c0200032604000200031c0366071c032601660400011c0100031c0766011c0426026604000100031c012007660426036604000200011c02200766032604660400020003200766022605660400010004200766012606660400020003200e660400020003200e66040002000320125f01000220023a0e5f0120015f0120015f0100043a035f012001660123016601230166012301660120065f0200033a125f0200033a125f0300023a12000400013a1200" + }, + { + "filename": "head-vent", + "data": "0x00081c140418011801030101230101012301010123010101230201012301010123010101230101012305010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f05010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f0101012303010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f0101012303010101011f0101011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f010101230101011f01010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f0101012303010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f0101020202010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f05010301010201010102010101020101010202010102010101020101010201010102050118011801" + }, + { + "filename": "head-void", + "data": "0x00051b14050123020001230200012302000123020001230200012302000123020001231600160001231400012316001600012314000123160016000123140001231600160001231400012316001600012302000123020001230200012302000123020001230200012302000123" + }, + { + "filename": "head-volcano", + "data": "0x00031c15040800081f08000800011f0641011f08000700021f0642021f07000700011f014106280141011f07000600021f0341031f0241021f06000600021f0141041f0141021f0141011f06000500021f01410b1f05000500041f010c051f010c031f05000400051f010c051f010c041f04000400051f010c051f010c041f04000300051f010c071f010c041f03000300051f010c071f010c041f03000200061f010c071f010c051f02000200051f010c091f010c041f02000100021f020c0f1f010c021f01000100021f020c051f010c0c1f01000a1f010c0341010c041f020c031f061f010c021f010c091f020c031f0200141f0200" + }, + { + "filename": "head-volleyball", + "data": "0x00031b1505090004d40900060001d401ef02d4020102d401ef01d40600040003d401ef02d4020102d401ef03d40400030001d401ef03d401ef04d401ef03d401ef01d40300020003d401ef02d401ef04d401ef02d401ef03d40200020004d40aef02d4010101d40200010004d401ef0ad401ef04d40100010003d401ef0cd401ef01d4010101d40100010003d401ef0cd401ef01d4010101d4010004d401ef0cd401ef01d4010102d404d401ef0cd401ef02d4010101d404d401ef0cd401ef02d4010101d404d401ef0cd401ef04d4010003d401ef0cd401ef04d4010003d401ef0cd401ef03d40100010001d4010102d401ef0ad401ef04d40100020001d4010102d40aef04d40200020003d401ef02d401ef04d401ef02d401ef03d40200030001d401ef03d401ef04d401ef03d401ef01d40300" + }, + { + "filename": "head-wall", + "data": "0x00031a15060237041a01830237011a0137091a061a01830d1a061a01830d1a061a01830d1a0100128301000237011a0137091a01830237041a0d1a0183061a0d1a0183061a0d1a0183061a0100128301000237041a018301370c1a061a01830d1a061a01830d1a061a01830d1a0100128301000237011a0137091a01830237041a071a0337031a0183061a0d1a0183061a0d1a0183061a" + }, + { + "filename": "head-wallet", + "data": "0x00081d1403020008a40e8c0200029701a408510ec801970197012301a408510ec801970d9701080c9701970ba40197010801970a430197019701a4057c05a4019701080c97019701a4017c03a4017c05a40197010801970a260197019701a4017c03a4017c05a4019701080c97019701a4027c01a4027c05a40197010801970a980197019701a4017c03a4017c05a40197010801970a980197019701a4057c01a4034701a4019701080c9701970ba4019701080c970d9701080c97" + }, + { + "filename": "head-wallsafe", + "data": "0x00091d140419080108117e0108052401080108017e0f08017e0108052401080108017e0f08017e07080108017e0f08017e01080124010801240108012401080108017e0f08017e07080108017e0f08017e01080124010801240108012401080108017e010801a40d08017e07080108017e01a4010801a40c08017e01080124010801240108012401080108017e010801a40208010101230101012301010123010101230308017e07080108117e010801a401080124010801a401081908" + }, + { + "filename": "head-washingmachine", + "data": "0x0003191f0402000fee0400020002ee017201ee017201ee017401ee017201ee015101ee0155017402ee0300020002ee017401ee017401ee017201ee017403ee0143017402ee03000200037210510200037206510472065102000372045102720475027204510200037203510172087501720351020003720351017208750172035102000372025101720a750172025102000372025101720a750172025102000372025101720a750172025102000372025101720a75017202510200037203510172087501720351020003720351017208750172035102000372045102720475027204510223037201510243035104720651012301000372105101230100037210510123140001231400012314000123140001231400012314000123140001231400012314000123140001231400" + }, + { + "filename": "head-watch", + "data": "0x00041a150802000c0a040001000826011e0126021e0226030001260e51012602000126065102780651012602000126035101780651017803510126020001260e51012602000126015101780a51017801510126020001260e5101260100010a01260e510126010a012601260e510126020a01260e510126010a012601260e5101260100010a0126045101780451017804510126020001260e510126020001260651027806510126020001260e510126020001000e26030002000c0a0400" + }, + { + "filename": "head-watermelon", + "data": "0x00031b15050400051d0d000300051d02240c000200051d0124011802240b000200041d0224012303240a000100041d082409000100031d06240123011802240800041d02240123011807240700031d0d240600031d0e240500031d0f240400031d10240300031d112402000100021d122401000100031d1124011d0200021d1024011d01000300021d042401230118012301180624011d02000400031d0a24021d03000500041d0624021d05000800071d0700" + }, + { + "filename": "head-wave", + "data": "0x00021c1401120004df05000e000adf03000c0002df014a0adf02000b0005df024a0243014a02df014a02df01000a0002df024a01df024a0143054a02df014a01df090002df024a01df024a01df034a01df0143024a03df090001df034a01df024a01df024a01df064a01df080002df024a01df024a01df034a01df024a0300014a01df080001df034a01df024a01df054a040001df0100070001df0d4a0600070001df0d4a0600060002df0d4a0600060001df0e4a0600050001df0f4a0600050001df0f4a0600040001df074a0143024a0143034a0143014a0600040001df044a01df024a0143034a0143034a0143014a050001df020001df044a01df044a0143034a0243054a0300010002df164a0100014a" + }, + { + "filename": "head-weed", + "data": "0x00011d15020d00010f0d000c00020f0d000c00020f0100010f0b000b00040f0c000400010f0600040f0700010f04000400020f0600030f0100010f0400020f04000400030f0100010f0200050f0400030f04000500040f0200060f0100040f05000500050f0200040f0100050f05000600050f0100040f0100040f0600010f06000d0f0600010f0100020f0100010f03000b0f0500020f01000100040f0200130f01000200170f02000400130f040005000f0f07000900030f015c030f015c010f09000800050f035c030f080006000f0f06000500110f05000400020f0f00020f0400" + }, + { + "filename": "head-weight", + "data": "0x00021a1405060001270896019505000600012701960727019505000600012701960600012701950500020003270d9601950200020003270396010e0196010e0196020e049601950200020003270396020e0296010e059601950200020003270396010e0196010e0196010e0196010e039601950200020003270396010e0196010e0296020e039601950200010003270f9601950100010003270f9601950100010003270f9601950100010003270f9601950100010003270f9601950100010003270f960195010003271196019503271196019503270496092704960195032711960195032711960195" + }, + { + "filename": "head-werewolf", + "data": "0x00061c1404030005970700059704000300059707000597040003000597070005970400030011260400030011070400030011260400030002970e8101970400030002970e8101970400020003970e8101970400010004970e810197040005971181029703000297018101d6018101d60f8102000397018101d6018101d60181042301010123010103230381010001000497018101d6018101d602230101062301010223018102000597018101d6018101d60c820300" + }, + { + "filename": "head-whale-alive", + "data": "0x00021e15021100044a07001000064a06000f00084a05000e000a4a04000d00064a010e054a0300014a0400014a0600064a010e014a010e054a0200024a0200024a05000f4a01560100064a05000f4a015601000100044a07000d4a03560200034a07000c4a04560200054a05000b4a055602000156134a065603000156114a0756030003560e4a07560100040005560a4a0856010004000656084a0856020005000556014a030e034a0856030006000356074a0856040007000156064a085606000a0009560900" + }, + { + "filename": "head-whale", + "data": "0x00041a1606080009d6030007000cd60100060005d6080d0100050005d6010d097c040005d6010d037c0281017c0281017c0181030005d6010d017c0281017c0281017c0281017c0181020005d6010d0481017c0281017c0281017c0181010005d6010d0581017c0281017c0281017c018106d6010d0581017c0281017c0281017c018106d6010d0581017c0281017c0281017c018106d6010d0581017c0281017c0281017c018106d6010d0481017c0381017c0281017c018106d6010d0381017c0381017c0381017c018103d6010d02d6010d0281017c0381017c0381017c028102d6030d01d602980181017c0281017c0381017c038103d6010d02d60398017c0281017c0281017c0381010006d60398017c0281017c0281017c02810200060003980b00060003980b00" + }, + { + "filename": "head-wine", + "data": "0x00051b1405166f166f136f0101026f136f0101026f136f0101026f016f129401190194016f016f1494016f016f1494016f016f1494016f016f1494016f016f1494016f026f1294026f0100016f1294016f01000100026f069404190694026f01000200036f0c94036f020004000e6f0400" + }, + { + "filename": "head-wizardhat", + "data": "0x00041b1404030008ec0c00020006ec014604ec0a00020001ec020002ec034604ec090002000146030002ec014606ec08000546020004ec014604ec070001000346040002ec014601ec014601ec014602ec06000100014601000146050002ec014606ec050009000aec0400080008ec014602ec0400080001ec014605ec034602ec0300080008ec014603ec0300080004ec014607ec030007000dec030006000eec0300050007ec050e02ec040003001254020001001654" + }, + { + "filename": "head-zebra", + "data": "0x00061b14060a0001010123090001000223035e0101012301010123010102230100035e040001000201035e0101012301010123010101230200035e040001000223055e0123035e0123045e040001000201065e0323055e040001000223065e0323055e040001000201075e0123065e040001000223075e0123065e040001000201075e0123065e0400010002230e5e0400010002010c5e0623010002230d5e012301010123010101230301025e0101012301010123010101230101035e062303230d5e052303010d5e0523" + } + ], + "glasses": [ + { + "filename": "glasses-hip-rose", + "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" + }, + { + "filename": "glasses-square-black-eyes-red", + "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" + }, + { + "filename": "glasses-square-black-rgb", + "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-black", + "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" + }, + { + "filename": "glasses-square-blue-med-saturated", + "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" + }, + { + "filename": "glasses-square-blue", + "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" + }, + { + "filename": "glasses-square-frog-green", + "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" + }, + { + "filename": "glasses-square-fullblack", + "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-green-blue-multi", + "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" + }, + { + "filename": "glasses-square-grey-light", + "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" + }, + { + "filename": "glasses-square-guava", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-honey", + "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" + }, + { + "filename": "glasses-square-magenta", + "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" + }, + { + "filename": "glasses-square-orange", + "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" + }, + { + "filename": "glasses-square-pink-purple-multi", + "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" + }, + { + "filename": "glasses-square-red", + "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" + }, + { + "filename": "glasses-square-smoke", + "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" + }, + { + "filename": "glasses-square-teal", + "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" + }, + { + "filename": "glasses-square-watermelon", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-yellow-orange-multi", + "data": "0x000b17100703000626010006130300012602010223012601000113020102230113034201260201022301260142011302010223011301260200012602010223012601000113020102230113012602000126020102230126010001130201022301130300062601000613" + }, + { + "filename": "glasses-square-yellow-saturated", + "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" + } + ] + } + } \ No newline at end of file From 313e436d75019cc0ba2a6211e60a5d3278a2172a Mon Sep 17 00:00:00 2001 From: Takuya Mizutani Date: Mon, 15 May 2023 17:39:45 +0900 Subject: [PATCH 050/146] add font checker --- contract/scripts/deploy_message.ts | 3 +- .../messagestore_londrinasolid_goerli.ts | 3 ++ .../addresses/messagestore_notosans_goerli.ts | 3 ++ src/views/Message.vue | 48 ++++++++++++++++++- 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/utils/addresses/messagestore_londrinasolid_goerli.ts create mode 100644 src/utils/addresses/messagestore_notosans_goerli.ts diff --git a/contract/scripts/deploy_message.ts b/contract/scripts/deploy_message.ts index a6272712..5ad447cd 100644 --- a/contract/scripts/deploy_message.ts +++ b/contract/scripts/deploy_message.ts @@ -23,9 +23,10 @@ async function main() { console.log("factorySVGStore.deploy"); console.log(network.name); // const store = await factorySVGStore.deploy(addresses.londrina_solid[network.name]); // font. + const store = await factorySVGStore.deploy(addresses.noto_sans[network.name]); // font. // for mainnet forking - const store = await factorySVGStore.deploy("0x980aAc123617e2B2ea407081Ceb72d5854BAa3D1"); // font. + // const store = await factorySVGStore.deploy("0x980aAc123617e2B2ea407081Ceb72d5854BAa3D1"); // font. console.log("wait"); await store.deployed(); diff --git a/src/utils/addresses/messagestore_londrinasolid_goerli.ts b/src/utils/addresses/messagestore_londrinasolid_goerli.ts new file mode 100644 index 00000000..74d2fd22 --- /dev/null +++ b/src/utils/addresses/messagestore_londrinasolid_goerli.ts @@ -0,0 +1,3 @@ +export const addresses = { + messagestore: "0x7c56D603Eb7976ee6592F7DDa8118576a9FDfeA3", +}; diff --git a/src/utils/addresses/messagestore_notosans_goerli.ts b/src/utils/addresses/messagestore_notosans_goerli.ts new file mode 100644 index 00000000..0900d923 --- /dev/null +++ b/src/utils/addresses/messagestore_notosans_goerli.ts @@ -0,0 +1,3 @@ +export const addresses = { + messagestore: "0x9bF2831b806CEbD0B09d490c90C88bcb47515C62", +}; diff --git a/src/views/Message.vue b/src/views/Message.vue index c0a14725..27e49337 100644 --- a/src/views/Message.vue +++ b/src/views/Message.vue @@ -10,18 +10,28 @@ rows="8" class="w-full resize rounded-md border-2" v-model="message" + @input="updateSVGMessage" />
Color: - + Font: +
+
+
+
-
+
Preview
+
From 7395729346cd359ab092d4b28f4415bcc994add1 Mon Sep 17 00:00:00 2001 From: Takuya Mizutani Date: Mon, 22 May 2023 20:55:02 +0900 Subject: [PATCH 052/146] font preview --- contract/contracts/MessageTokenV2.sol | 89 ++ .../imageParts/interfaces/IMessageStoreV2.sol | 43 + .../imageParts/svgstore/MessageStoreV2.sol | 130 +++ .../contracts/providers/MessageProvider3.sol | 114 +++ contract/scripts/deploy_message_2.ts | 127 +++ contract/scripts/deploy_snow.ts | 2 + src/abis/MessageProvider3.json | 388 ++++++++ src/abis/MessageStoreV2.json | 377 +++++++ src/abis/MessageStoreV2___.json | 206 ++++ src/abis/MessageTokenV2.json | 937 ++++++++++++++++++ src/utils/addresses.ts | 24 + src/utils/addresses/messageprovider_goerli.ts | 3 + .../addresses/messageprovider_localhost.ts | 3 + src/utils/addresses/messageprovider_mumbai.ts | 3 + src/utils/addresses/messagestore2_goerli.ts | 3 + .../addresses/messagestore2_localhost.ts | 3 + src/utils/addresses/messagestore2_mumbai.ts | 3 + src/utils/addresses/messagetoken_goerli.ts | 3 + src/utils/addresses/messagetoken_localhost.ts | 3 + src/utils/addresses/messagetoken_mumbai.ts | 3 + src/utils/const.ts | 19 +- src/views/Message.vue | 90 +- 22 files changed, 2539 insertions(+), 34 deletions(-) create mode 100644 contract/contracts/MessageTokenV2.sol create mode 100644 contract/contracts/imageParts/interfaces/IMessageStoreV2.sol create mode 100644 contract/contracts/imageParts/svgstore/MessageStoreV2.sol create mode 100644 contract/contracts/providers/MessageProvider3.sol create mode 100644 contract/scripts/deploy_message_2.ts create mode 100644 src/abis/MessageProvider3.json create mode 100644 src/abis/MessageStoreV2.json create mode 100644 src/abis/MessageStoreV2___.json create mode 100644 src/abis/MessageTokenV2.json create mode 100644 src/utils/addresses/messageprovider_goerli.ts create mode 100644 src/utils/addresses/messageprovider_localhost.ts create mode 100644 src/utils/addresses/messageprovider_mumbai.ts create mode 100644 src/utils/addresses/messagestore2_goerli.ts create mode 100644 src/utils/addresses/messagestore2_localhost.ts create mode 100644 src/utils/addresses/messagestore2_mumbai.ts create mode 100644 src/utils/addresses/messagetoken_goerli.ts create mode 100644 src/utils/addresses/messagetoken_localhost.ts create mode 100644 src/utils/addresses/messagetoken_mumbai.ts diff --git a/contract/contracts/MessageTokenV2.sol b/contract/contracts/MessageTokenV2.sol new file mode 100644 index 00000000..10cca455 --- /dev/null +++ b/contract/contracts/MessageTokenV2.sol @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: MIT + +/* + * Created by Takuya Mizutani (@Takuya-Mizutani) + */ + +pragma solidity ^0.8.6; + +import '@openzeppelin/contracts/utils/Strings.sol'; +import './libs/ProviderTokenA1.sol'; +import './imageParts/interfaces/IMessageStoreV2.sol'; +// import './providers/MessageProvider.sol'; + +import './interfaces/IMessageToken.sol'; + +contract MessageTokenV2 is ProviderTokenA1, IMessageToken { + using Strings for uint256; + + IMessageStoreV2 immutable messageStore; + + mapping(uint256 => uint256) assetIds; // tokenId => assetId + + constructor( + IAssetProvider _assetProvider, + IMessageStoreV2 _messageStore + ) ProviderTokenA1(_assetProvider, 'MessageTokenV2', 'MessageTokenV2') { + description = 'MessageTokenV2'; + messageStore = _messageStore; + mintLimit = 1e50; + } + + function tokenName(uint256 _tokenId) internal pure override returns (string memory) { + return string(abi.encodePacked('MessageTokenV2 ', _tokenId.toString())); + } + + function mint() public payable override returns (uint256 tokenId) { + require(false, 'must not call'); + } + + function mintWithAsset(IMessageStoreV2.Asset memory asset) public returns (uint256 tokenId) { + uint256 assetId = messageStore.register(asset); + tokenId = super.mint(); + assetIds[tokenId] = assetId; + } + + function tokenURI(uint256 _tokenId) public view override returns (string memory) { + uint256 assetId = assetIds[_tokenId]; + require(_exists(_tokenId), 'MessageToken.tokenURI: nonexistent token'); + bytes memory image = bytes(generateSVG(assetId)); // ProviderTokenA1.generateSVG + + return + string( + abi.encodePacked( + 'data:application/json;base64,', + Base64.encode( + bytes( + abi.encodePacked( + '{"name":"', + tokenName(_tokenId), + '","description":"', + description, + '","attributes":[', + generateTraits(assetId), + '],"image":"data:image/svg+xml;base64,', + Base64.encode(image), + '"}' + ) + ) + ) + ) + ); + } + + function getMessage(uint256 index) external view returns (string memory output) { + output = messageStore.getMessage(assetIds[index]); + } + + function getLatestMessage() external view returns (string memory output) { + output = messageStore.getMessage(assetIds[_nextTokenId() - 1]); + } + + function getAsset(uint256 index) external view returns (IMessageStoreV2.Asset memory output) { + output = messageStore.getAsset(assetIds[index]); + } + + function getAssetId(uint256 index) external view returns (uint256 output) { + output = assetIds[index]; + } +} diff --git a/contract/contracts/imageParts/interfaces/IMessageStoreV2.sol b/contract/contracts/imageParts/interfaces/IMessageStoreV2.sol new file mode 100644 index 00000000..121b3bbd --- /dev/null +++ b/contract/contracts/imageParts/interfaces/IMessageStoreV2.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.6; + +interface IMessageStoreV2 { + struct Asset { + string message; + string color; + string fontName; + string assetName; + } + struct Box { + uint256 w; + uint256 h; + } + + function register(Asset memory asset) external returns (uint256); + + function getAsset(uint256 index) external view returns (Asset memory); + + function getSVGBody(uint256 index) external view returns (bytes memory output); + + function getSVGBodyFromAsset( + string memory message, + string memory color, + string memory fontName, + Box memory box + ) external view returns (bytes memory output); + + function getSVG(uint256 index) external view returns (string memory output); + + function getSVGMessage( + string memory message, + string memory color, + string memory fontName, + Box memory box + ) external view returns (string memory output); + + function getMessage(uint256 index) external view returns (string memory output); + + function getNextPartIndex() external view returns (uint256); + +} diff --git a/contract/contracts/imageParts/svgstore/MessageStoreV2.sol b/contract/contracts/imageParts/svgstore/MessageStoreV2.sol new file mode 100644 index 00000000..44c6a0d2 --- /dev/null +++ b/contract/contracts/imageParts/svgstore/MessageStoreV2.sol @@ -0,0 +1,130 @@ +pragma solidity ^0.8.6; + +import '../../packages/graphics/Path.sol'; +import '../../packages/graphics/SVG.sol'; +import '../../packages/graphics/Text.sol'; + +import '../interfaces/IMessageStoreV2.sol'; +import '../../packages/graphics/IFontProvider.sol'; +import '@openzeppelin/contracts/utils/math/Math.sol'; + +contract MessageStoreV2 is IMessageStoreV2 { + using SVG for SVG.Element; + using TX for string; + + // fontName -> FontProvider + mapping(string => IFontProvider) public fonts; + + uint256 public nextPartIndex = 1; + mapping(uint256 => Asset) public partsList; + + function getAsset(uint256 index) external view returns (Asset memory) { + return partsList[index]; + } + + function registerFont(string memory fontName, IFontProvider fontProvider) external { + fonts[fontName] = fontProvider; + } + + function register(Asset memory asset) external returns (uint256) { + require(fonts[asset.fontName] != IFontProvider(address(0)), "Font not registered"); + // nextPartIndex is 1-based + partsList[nextPartIndex] = asset; + nextPartIndex++; + return nextPartIndex - 1; + } + + function generateSVGBody(uint256 id) internal view returns (bytes memory output) { + Asset memory asset = partsList[id]; + Box memory box; + box.w = 1024; + box.h = 1024; + output = generateSVGBody(asset.message, asset.color, asset.fontName, box); + } + + // for provider + function getSVGBody(uint256 index) external view override returns (bytes memory output) { + output = generateSVGBody(index); + } + + function getSVGBodyFromAsset( + string memory message, + string memory color, + string memory fontName, + Box memory box + ) external view override returns (bytes memory output) { + output = generateSVGBody(message, color, fontName, box); + } + + function getSVG(uint256 index) external view override returns (string memory output) { + SVG.Element[] memory samples = new SVG.Element[](0); + + output = SVG.document('0 0 1024 1024', SVG.list(samples).svg(), generateSVGBody(index)); + } + + // for web + function getSVGMessage( + string memory message, + string memory color, + string memory fontName, + Box memory box + ) external view override returns (string memory output) { + SVG.Element[] memory samples = new SVG.Element[](1); + output = SVG.document('0 0 1024 1024', SVG.list(samples).svg(), generateSVGBody(message, color, fontName, box)); + } + + function test(string memory message) external view returns (string[] memory output) { + output = Text.split(message, 0x0a); + } + + function generateSVGBody( + string memory message, + string memory color, + string memory fontName, + Box memory box + ) internal view returns (bytes memory output) { + string[] memory messages = Text.split(message, 0x0a); // split \n + SVG.Element[] memory elements = new SVG.Element[](messages.length); + + IFontProvider font = fonts[fontName]; + + // default w scale 1/4 + uint256 maxWidth = box.w * 4; + for (uint256 i = 0; i < messages.length; i++) { + uint256 width = SVG.textWidth(font, messages[i]); + if (width > maxWidth) { + maxWidth = width; + } + elements[i] = SVG.text(font, messages[i]).transform(TX.translate(0, int(font.height() * i))); + } + /* + uint256 scaleW = (box.w * 1000) / maxWidth; + uint256 maxHeight = font.height() * messages.length; + uint256 scaleH = (box.h * 1000) / maxHeight; + uint256 scale = Math.min(scaleW, scaleH); + */ + uint256 scale = Math.min((box.w * 1000) / maxWidth, (box.h * 1000) / (font.height() * messages.length)); + + SVG.Element memory tmp = SVG.group(elements).transform(TX.scale1000(scale)); + tmp = tmp.fill(color); + + SVG.Element[] memory lists = new SVG.Element[](1); + lists[0] = tmp; + + output = SVG.list(lists).svg(); + } + + function getMessage(uint256 index) external view override returns (string memory output) { + Asset memory asset = partsList[index]; + output = asset.message; + } + + function isFontRegistered(string memory fontName) public view returns (bool) { + return fonts[fontName] != IFontProvider(address(0)); + } + + function getNextPartIndex() public view override returns (uint256) { + return nextPartIndex; + } + +} diff --git a/contract/contracts/providers/MessageProvider3.sol b/contract/contracts/providers/MessageProvider3.sol new file mode 100644 index 00000000..4e23c2ab --- /dev/null +++ b/contract/contracts/providers/MessageProvider3.sol @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: MIT + +/* + * Created by Takuya Mizutani (@Takuya-Mizutani) + */ + +pragma solidity ^0.8.6; + +import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +import 'assetprovider.sol/IAssetProvider.sol'; +import '@openzeppelin/contracts/utils/Strings.sol'; +import '@openzeppelin/contracts/interfaces/IERC165.sol'; +import '../packages/graphics/SVG.sol'; + +import '../imageParts/interfaces/IMessageStoreV2.sol'; + +contract MessageProvider3 is IAssetProvider, IERC165, Ownable { + using Strings for uint256; + using SVG for SVG.Element; + + IMessageStoreV2 immutable messageStore; + + string constant providerKey = 'MessageV3'; + address public receiver; + + mapping(string => IAssetProvider) public assets; + + constructor(IMessageStoreV2 _messageStore) { + messageStore = _messageStore; + receiver = owner(); + } + + function registerAsset(string memory assetName, IAssetProvider assetProvider) external { + assets[assetName] = assetProvider; + } + + function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { + return interfaceId == type(IAssetProvider).interfaceId || interfaceId == type(IERC165).interfaceId; + } + + function getOwner() external view override returns (address) { + return owner(); + } + + function getProviderInfo() external view override returns (ProviderInfo memory) { + return ProviderInfo(providerKey, 'Message', this); + } + + function totalSupply() external pure override returns (uint256) { + return 0; // indicating "dynamically (but deterministically) generated from the given assetId) + } + + function processPayout(uint256 _assetId) external payable override { + address payable payableTo = payable(receiver); + payableTo.transfer(msg.value); + emit Payout(providerKey, _assetId, payableTo, msg.value); + } + + function setReceiver(address _receiver) external onlyOwner { + receiver = _receiver; + } + + function generateSVGPart(uint256 _assetId) public view override returns (string memory svgPart, string memory tag) { + bytes memory path = messageStore.getSVGBody(_assetId); + tag = string(abi.encodePacked(providerKey, _assetId.toString())); + + IMessageStoreV2.Asset memory asset = messageStore.getAsset(_assetId); + string memory assetName = asset.assetName; + IAssetProvider assetProvider = assets[assetName]; + + (string memory noPart, string memory noTag) = assetProvider.generateSVGPart(_assetId); + + bytes memory body = abi.encodePacked('', bytes(noPart), '', '\n', path, '\n'); + + svgPart = string(SVG.group(body).id(tag).svg()); + } + + function generateTraits(uint256 _assetId) external pure override returns (string memory traits) { + // nothing to return + } + + // For debugging + function generateSVGDocument(uint256 _assetId) external view returns (string memory svgDocument) { + string memory svgPart; + string memory tag; + (svgPart, tag) = generateSVGPart(_assetId); + svgDocument = string(SVG.document('0 0 1024 1024', bytes(svgPart), SVG.use(tag).svg())); + } + + function generateSVGMessage( + string memory message, + string memory color, + string memory fontName, + string memory assetName, + IMessageStoreV2.Box memory box + ) public view returns (string memory output) { + // Text + bytes memory path = messageStore.getSVGBodyFromAsset(message, color, fontName, box); + + // Background + uint256 _assetId = messageStore.getNextPartIndex(); + string memory tag = string(abi.encodePacked(providerKey, _assetId.toString())); + + (string memory noPart, string memory noTag) = assets[assetName].generateSVGPart(_assetId); + bytes memory body = abi.encodePacked('', bytes(noPart), '', '\n', path, '\n'); + string memory svgPart = string(SVG.group(body).id(tag).svg()); + output = string(SVG.document('0 0 1024 1024', bytes(svgPart), SVG.use(tag).svg())); + } + + function isAssetRegistered(string memory assetName) public view returns (bool) { + return assets[assetName] != IAssetProvider(address(0)); + } + +} diff --git a/contract/scripts/deploy_message_2.ts b/contract/scripts/deploy_message_2.ts new file mode 100644 index 00000000..1c406f20 --- /dev/null +++ b/contract/scripts/deploy_message_2.ts @@ -0,0 +1,127 @@ +import { ethers, network } from 'hardhat'; +import { writeFile } from 'fs'; +import { addresses } from '../../src/utils/addresses'; + +const deploy = async (name: string, args: any) => { + const factory = await ethers.getContractFactory(name); + const contract = args ? await factory.deploy(args) : await factory.deploy(); + await contract.deployed(); + return contract; + // console.log(` test="${contract.address}"`); +}; + +const deployNFT = async (name: string, args: any, args2: any) => { + const factory = await ethers.getContractFactory(name); + const contract = await factory.deploy(args, args2); + await contract.deployed(); + return contract; + // console.log(` test="${contract.address}"`); +}; + +async function main() { + console.log("Network Name:", network.name); + const box = {w: 1024, h: 1024}; + + // --------------------------- MessageStoreV2 --------------------------- + const factorySVGStore = await ethers.getContractFactory('MessageStoreV2'); + const store = await factorySVGStore.deploy(); + console.log("wait"); + await store.deployed(); + console.log(`store contract="${store.address}"`); + const storeAddress = `export const addresses = {\n` + ` messageStore: "${store.address}",\n` + `}\n`; + writeFile(`../src/utils/addresses/messagestore2_${network.name}.ts`, storeAddress, () => {}); + + // Goerli Test Net + // await store.registerFont('Noto_Sans', '0xf4fd7f7e9fC89B2F539BE378214EbB768ECBf91B'); + // await store.registerFont('Londrina_Solid', '0xbFde916e6315365567F3504E20166F92474dc4ea'); + + // Mumbai Test Net + await store.registerFont('Noto_Sans', '0xCBbC30D7d8b9DCF720f4FfB98Ef42E5A2633B791'); + await store.registerFont('Londrina_Solid', '0xF3636358069588D2A16a81d27e7e8cB15Eb3827B'); + + const is_ = await store.isFontRegistered('Londrina_Solid'); + console.log(is_); + + // await store.register({ message: 'hello1', color: '#000', fontName: 'Noto_Sans', assetName: 'Splatter' }); + // await store.register({ message: 'hello2', color: '#000', fontName: 'Noto_Sans', assetName: 'Splatter' }); + // await store.register({ message: 'hello3', color: '#000', fontName: 'Londrina_Solid', assetName: 'Splatter' }); + // await store.register({ message: 'hello4', color: '#000', fontName: 'Londrina_Solid', assetName: 'Splatter' }); + + // const res3 = await store.getMessage(3); + // console.log(res3); + // const abc = await store.getSVGMessage("Hello,Hello", "#000", "Londrina_Solid", box); + // console.log(abc); + // ------------------------------------------------------------------------ + + + // // --------------------------- MessageProvider3 --------------------------- + // const storeAddress = '0xb0c6B1FBd00900B60f5Ff5aeB46BF2d8c7708f23'; + const factoryMessageProvider = await ethers.getContractFactory('MessageProvider3'); + const provider = await factoryMessageProvider.deploy(store.address); + console.log("wait"); + await provider.deployed(); + console.log(`provider contract="${provider.address}"`); + const providerAddress = `export const addresses = {\n` + ` messageProvider: "${provider.address}",\n` + `}\n`; + writeFile(`../src/utils/addresses/messageprovider_${network.name}.ts`, providerAddress, () => {}); + + // // Goerli Test Net + // await provider.registerAsset('Splatter', '0x15C40F258B1fc68c109FE3E3CFF191a80f24E4C1'); + // await provider.registerAsset('Snow', '0xa92675Feb3a316d73ec9D8f2A0De7b90b25b1351'); + + // Mumbai Test Net + await provider.registerAsset('Splatter', '0x256Ba9c4DD146f3EBf0f7D0a3Ddea3F400CE806D'); + await provider.registerAsset('Snow', '0x00cF04ec45DE4Ed7e8451948dBa330f7bF614fda'); + + // const is_Splatter = await provider.isAssetRegistered('Splatter'); + // const is_Snow = await provider.isAssetRegistered('Snow'); + // console.log(is_Splatter, is_Snow); + // const id = await store.getNextPartIndex(); + // console.log(id.toNumber()); + // const aaa = await provider.generateSVGMessage("Hello,Hello", "orange", "Noto_Sans", 'Splatter', box); + // console.log(aaa); + // save to file + // writeFile('test.svg', aaa, (err) => { + // if (err) throw err; + // console.log('The file has been saved!'); + // }); + // // ------------------------------------------------------------------------ + + + // // ----------------------------- MessegeToken ----------------------------- + // const providerAddress = '0x3249784e050D06b909117fA4405fe013E9490957'; + const factoryMessageToken = await ethers.getContractFactory('MessageTokenV2'); + const token = await factoryMessageToken.deploy(provider.address, store.address); + console.log("wait"); + await token.deployed(); + console.log(`token contract="${token.address}"`); + const tokenAddress = `export const addresses = {\n` + ` messageToken: "${token.address}",\n` + `}\n`; + writeFile(`../src/utils/addresses/messagetoken_${network.name}.ts`, tokenAddress, () => {}); + + // // mint + // await token.mintWithAsset({ message: 'first nft!', color: 'orange', fontName: 'Noto_Sans' , assetName: 'Snow'}); + // await token.mintWithAsset({ message: '2nd nft!', color: 'orange', fontName: 'Noto_Sans' , assetName: 'Snow'}); + // await token.mintWithAsset({ message: '3rd nft!', color: 'blue', fontName: 'Londrina_Solid' , assetName: 'Snow'}); + // await token.mintWithAsset({ message: '4th nft!', color: 'orange', fontName: 'Noto_Sans' , assetName: 'Snow'}); + + // const message = await token.getLatestMessage(); + // console.log(message); + // const message1 = await token.getMessage(0); + // console.log(message1); + + // const nextId = await token.totalSupply(); + // console.log(nextId.toNumber()); + // const tokenId = nextId.toNumber() - 1; + // console.log(tokenId); + // const bbb = await token.getAsset(tokenId); + // console.log(bbb.assetName); + // const ret = await token.getAssetId(tokenId); + // console.log(ret.toNumber()); + // const uri = await token.tokenURI(2); + // console.log(uri); + // // ------------------------------------------------------------------------ +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); diff --git a/contract/scripts/deploy_snow.ts b/contract/scripts/deploy_snow.ts index 3b147be4..475694bb 100644 --- a/contract/scripts/deploy_snow.ts +++ b/contract/scripts/deploy_snow.ts @@ -20,6 +20,8 @@ async function main() { const result = await contract.generateSVGPart(0); console.log('svg', result.tag); + // const contractSchemes = addresses.colorSchemes[network.name]; + const factoryArt = await ethers.getContractFactory('RepeatProvider'); const contractArt = await factoryArt.deploy(contract.address, 2, 'snowart', 'Snow Art'); await contractArt.deployed(); diff --git a/src/abis/MessageProvider3.json b/src/abis/MessageProvider3.json new file mode 100644 index 00000000..72ece9eb --- /dev/null +++ b/src/abis/MessageProvider3.json @@ -0,0 +1,388 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MessageProvider3", + "sourceName": "contracts/providers/MessageProvider3.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IMessageStoreV2", + "name": "_messageStore", + "type": "address" + } + ], + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "providerKey", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assetId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Payout", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "assets", + "outputs": [ + { + "internalType": "contract IAssetProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_assetId", + "type": "uint256" + } + ], + "name": "generateSVGDocument", + "outputs": [ + { + "internalType": "string", + "name": "svgDocument", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "w", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "h", + "type": "uint256" + } + ], + "internalType": "struct IMessageStoreV2.Box", + "name": "box", + "type": "tuple" + } + ], + "name": "generateSVGMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_assetId", + "type": "uint256" + } + ], + "name": "generateSVGPart", + "outputs": [ + { + "internalType": "string", + "name": "svgPart", + "type": "string" + }, + { + "internalType": "string", + "name": "tag", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_assetId", + "type": "uint256" + } + ], + "name": "generateTraits", + "outputs": [ + { + "internalType": "string", + "name": "traits", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProviderInfo", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "key", + "type": "string" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "contract IAssetProvider", + "name": "provider", + "type": "address" + } + ], + "internalType": "struct IAssetProvider.ProviderInfo", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "name": "isAssetRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_assetId", + "type": "uint256" + } + ], + "name": "processPayout", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "receiver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "assetName", + "type": "string" + }, + { + "internalType": "contract IAssetProvider", + "name": "assetProvider", + "type": "address" + } + ], + "name": "registerAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + } + ], + "name": "setReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002f4738038062002f47833981810160405281019062000037919062000255565b620000576200004b620000e260201b60201c565b620000ea60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200009b620001ae60201b60201c565b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000287565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020982620001dc565b9050919050565b60006200021d82620001fc565b9050919050565b6200022f8162000210565b81146200023b57600080fd5b50565b6000815190506200024f8162000224565b92915050565b6000602082840312156200026e576200026d620001d7565b5b60006200027e848285016200023e565b91505092915050565b608051612c8f620002b860003960008181610511015281816105ba01528181610be10152610ce50152612c8f6000f3fe6080604052600436106100fe5760003560e01c806385936228116100955780638c40188e116100645780638c40188e1461034c5780638da5cb5b14610377578063e3f24f02146103a2578063f2fde38b146103e0578063f7260d3e14610409576100fe565b8063859362281461029f578063893d20e8146102dc57806389ee68bf146103075780638c2261ad14610323576100fe565b80635d6e0dd5116100d15780635d6e0dd5146101e5578063715018a614610222578063718da7ee1461023957806379b92f2714610262576100fe565b806301ffc9a71461010357806318160ddd14610140578063195478b91461016b57806342d97aec146101a8575b600080fd5b34801561010f57600080fd5b5061012a6004803603810190610125919061177e565b610434565b60405161013791906117c6565b60405180910390f35b34801561014c57600080fd5b50610155610506565b60405161016291906117fa565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d91906119e1565b61050b565b60405161019f9190611b4b565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611b6d565b61081f565b6040516101dc91906117c6565b60405180910390f35b3480156101f157600080fd5b5061020c60048036038101906102079190611bb6565b610896565b6040516102199190611b4b565b60405180910390f35b34801561022e57600080fd5b50610237610905565b005b34801561024557600080fd5b50610260600480360381019061025b9190611c41565b610919565b005b34801561026e57600080fd5b5061028960048036038101906102849190611bb6565b610965565b6040516102969190611b4b565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190611b6d565b61096c565b6040516102d39190611ccd565b60405180910390f35b3480156102e857600080fd5b506102f16109b5565b6040516102fe9190611cf7565b60405180910390f35b610321600480360381019061031c9190611bb6565b6109c4565b005b34801561032f57600080fd5b5061034a60048036038101906103459190611d50565b610aa8565b005b34801561035857600080fd5b50610361610b09565b60405161036e9190611e5c565b60405180910390f35b34801561038357600080fd5b5061038c610bb1565b6040516103999190611cf7565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190611bb6565b610bda565b6040516103d7929190611e7e565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190611c41565b610ead565b005b34801561041557600080fd5b5061041e610f30565b60405161042b9190611cf7565b60405180910390f35b60007f0ece3d21000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ff57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600090565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e61270e5888888876040518563ffffffff1660e01b815260040161056e9493929190611ef3565b600060405180830381865afa15801561058b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906105b49190611fee565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166316e921c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061204c565b905060006040518060400160405280600981526020017f4d6573736167655632000000000000000000000000000000000000000000000081525061068a83610f56565b60405160200161069b9291906120b5565b60405160208183030381529060405290506000806002886040516106bf91906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3f24f02856040518263ffffffff1660e01b815260040161072691906117fa565b600060405180830381865afa158015610743573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061076c9190612160565b915091506000828660405160200161078592919061234f565b604051602081830303815290604052905060006107bb6107b6866107a885611024565b61107f90919063ffffffff16565b6110e2565b905061080d6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525082610808610803896111ea565b6110e2565b61125d565b97505050505050505095945050505050565b60008073ffffffffffffffffffffffffffffffffffffffff1660028360405161084891906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60608060606108a484610bda565b80925081935050506108fc6040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250836108f76108f2856111ea565b6110e2565b61125d565b92505050919050565b61090d6112e1565b610917600061135f565b565b6109216112e1565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060919050565b6002818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109bf610bb1565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610a31573d6000803e3d6000fd5b507fbb0eeee27936db25b1a46a81ab6d97326392a3e961efa7273d5d756d7a2e1cad6040518060400160405280600981526020017f4d65737361676556320000000000000000000000000000000000000000000000815250838334604051610a9c94939291906123c0565b60405180910390a15050565b80600283604051610ab991906120d9565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610b116116a0565b60405180606001604052806040518060400160405280600981526020017f4d6573736167655632000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d6573736167650000000000000000000000000000000000000000000000000081525081526020013073ffffffffffffffffffffffffffffffffffffffff16815250905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dec0314e856040518263ffffffff1660e01b8152600401610c3891906117fa565b600060405180830381865afa158015610c55573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c7e9190611fee565b90506040518060400160405280600981526020017f4d65737361676556320000000000000000000000000000000000000000000000815250610cbf85610f56565b604051602001610cd09291906120b5565b604051602081830303815290604052915060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663eac8f5b8866040518263ffffffff1660e01b8152600401610d3c91906117fa565b600060405180830381865afa158015610d59573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d8291906124f4565b90506000816060015190506000600282604051610d9f91906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff1663e3f24f028a6040518263ffffffff1660e01b8152600401610e0c91906117fa565b600060405180830381865afa158015610e29573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610e529190612160565b9150915060008287604051602001610e6b92919061234f565b6040516020818303038152906040529050610e9f610e9a89610e8c84611024565b61107f90919063ffffffff16565b6110e2565b985050505050505050915091565b610eb56112e1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b906125af565b60405180910390fd5b610f2d8161135f565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060006001610f6584611423565b01905060008167ffffffffffffffff811115610f8457610f83611830565b5b6040519080825280601f01601f191660200182016040528015610fb65781602001600182028036833780820191505090505b509050600082602001820190505b600115611019578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161100d5761100c6125cf565b5b04945060008503610fc4575b819350505050919050565b61102c6116d7565b60405160200161103b9061264a565b60405160208183030381529060405281600001819052508160405160200161106391906126ab565b6040516020818303038152906040528160200181905250919050565b6110876116d7565b6110da8360405180604001604052806040518060400160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250815260200185815250611576565b905092915050565b606060008260000151511115611174578160000151905060005b82604001515181101561116e57600083604001518281518110611122576111216126d8565b5b6020026020010151905082816000015182602001516040516020016111499392919061279f565b604051602081830303815290604052925050808061116690612815565b9150506110fc565b506111bd565b6000826040015151146111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b3906128a9565b60405180910390fd5b5b8082602001516040516020016111d49291906128c9565b6040516020818303038152906040529050919050565b6111f26116d7565b816040516020016112039190612939565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b60606000846040516020016112729190612a3f565b60405160208183030381529060405290506000845111156112b25780846040516020016112a0929190612b04565b60405160208183030381529060405290505b80836040516020016112c5929190612b8a565b6040516020818303038152906040529050809150509392505050565b6112e9611698565b73ffffffffffffffffffffffffffffffffffffffff16611307610bb1565b73ffffffffffffffffffffffffffffffffffffffff161461135d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135490612c05565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611481577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611477576114766125cf565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106114be576d04ee2d6d415b85acef810000000083816114b4576114b36125cf565b5b0492506020810190505b662386f26fc1000083106114ed57662386f26fc1000083816114e3576114e26125cf565b5b0492506010810190505b6305f5e1008310611516576305f5e100838161150c5761150b6125cf565b5b0492506008810190505b612710831061153b576127108381611531576115306125cf565b5b0492506004810190505b6064831061155e5760648381611554576115536125cf565b5b0492506002810190505b600a831061156d576001810190505b80915050919050565b61157e6116d7565b826000015181600001819052508260200151816020018190525060018360400151516115aa9190612c25565b67ffffffffffffffff8111156115c3576115c2611830565b5b6040519080825280602002602001820160405280156115fc57816020015b6115e96116f8565b8152602001906001900390816115e15790505b50816040018190525060005b836040015151811015611669578360400151818151811061162c5761162b6126d8565b5b60200260200101518260400151828151811061164b5761164a6126d8565b5b6020026020010181905250808061166190612815565b915050611608565b5081816040015184604001515181518110611687576116866126d8565b5b602002602001018190525092915050565b600033905090565b60405180606001604052806060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180606001604052806060815260200160608152602001606081525090565b604051806040016040528060608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61175b81611726565b811461176657600080fd5b50565b60008135905061177881611752565b92915050565b6000602082840312156117945761179361171c565b5b60006117a284828501611769565b91505092915050565b60008115159050919050565b6117c0816117ab565b82525050565b60006020820190506117db60008301846117b7565b92915050565b6000819050919050565b6117f4816117e1565b82525050565b600060208201905061180f60008301846117eb565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118688261181f565b810181811067ffffffffffffffff8211171561188757611886611830565b5b80604052505050565b600061189a611712565b90506118a6828261185f565b919050565b600067ffffffffffffffff8211156118c6576118c5611830565b5b6118cf8261181f565b9050602081019050919050565b82818337600083830152505050565b60006118fe6118f9846118ab565b611890565b90508281526020810184848401111561191a5761191961181a565b5b6119258482856118dc565b509392505050565b600082601f83011261194257611941611815565b5b81356119528482602086016118eb565b91505092915050565b600080fd5b600080fd5b61196e816117e1565b811461197957600080fd5b50565b60008135905061198b81611965565b92915050565b6000604082840312156119a7576119a661195b565b5b6119b16040611890565b905060006119c18482850161197c565b60008301525060206119d58482850161197c565b60208301525092915050565b600080600080600060c086880312156119fd576119fc61171c565b5b600086013567ffffffffffffffff811115611a1b57611a1a611721565b5b611a278882890161192d565b955050602086013567ffffffffffffffff811115611a4857611a47611721565b5b611a548882890161192d565b945050604086013567ffffffffffffffff811115611a7557611a74611721565b5b611a818882890161192d565b935050606086013567ffffffffffffffff811115611aa257611aa1611721565b5b611aae8882890161192d565b9250506080611abf88828901611991565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b06578082015181840152602081019050611aeb565b60008484015250505050565b6000611b1d82611acc565b611b278185611ad7565b9350611b37818560208601611ae8565b611b408161181f565b840191505092915050565b60006020820190508181036000830152611b658184611b12565b905092915050565b600060208284031215611b8357611b8261171c565b5b600082013567ffffffffffffffff811115611ba157611ba0611721565b5b611bad8482850161192d565b91505092915050565b600060208284031215611bcc57611bcb61171c565b5b6000611bda8482850161197c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c0e82611be3565b9050919050565b611c1e81611c03565b8114611c2957600080fd5b50565b600081359050611c3b81611c15565b92915050565b600060208284031215611c5757611c5661171c565b5b6000611c6584828501611c2c565b91505092915050565b6000819050919050565b6000611c93611c8e611c8984611be3565b611c6e565b611be3565b9050919050565b6000611ca582611c78565b9050919050565b6000611cb782611c9a565b9050919050565b611cc781611cac565b82525050565b6000602082019050611ce26000830184611cbe565b92915050565b611cf181611c03565b82525050565b6000602082019050611d0c6000830184611ce8565b92915050565b6000611d1d82611c03565b9050919050565b611d2d81611d12565b8114611d3857600080fd5b50565b600081359050611d4a81611d24565b92915050565b60008060408385031215611d6757611d6661171c565b5b600083013567ffffffffffffffff811115611d8557611d84611721565b5b611d918582860161192d565b9250506020611da285828601611d3b565b9150509250929050565b600082825260208201905092915050565b6000611dc882611acc565b611dd28185611dac565b9350611de2818560208601611ae8565b611deb8161181f565b840191505092915050565b611dff81611cac565b82525050565b60006060830160008301518482036000860152611e228282611dbd565b91505060208301518482036020860152611e3c8282611dbd565b9150506040830151611e516040860182611df6565b508091505092915050565b60006020820190508181036000830152611e768184611e05565b905092915050565b60006040820190508181036000830152611e988185611b12565b90508181036020830152611eac8184611b12565b90509392505050565b611ebe816117e1565b82525050565b604082016000820151611eda6000850182611eb5565b506020820151611eed6020850182611eb5565b50505050565b600060a0820190508181036000830152611f0d8187611b12565b90508181036020830152611f218186611b12565b90508181036040830152611f358185611b12565b9050611f446060830184611ec4565b95945050505050565b600067ffffffffffffffff821115611f6857611f67611830565b5b611f718261181f565b9050602081019050919050565b6000611f91611f8c84611f4d565b611890565b905082815260208101848484011115611fad57611fac61181a565b5b611fb8848285611ae8565b509392505050565b600082601f830112611fd557611fd4611815565b5b8151611fe5848260208601611f7e565b91505092915050565b6000602082840312156120045761200361171c565b5b600082015167ffffffffffffffff81111561202257612021611721565b5b61202e84828501611fc0565b91505092915050565b60008151905061204681611965565b92915050565b6000602082840312156120625761206161171c565b5b600061207084828501612037565b91505092915050565b600081905092915050565b600061208f82611acc565b6120998185612079565b93506120a9818560208601611ae8565b80840191505092915050565b60006120c18285612084565b91506120cd8284612084565b91508190509392505050565b60006120e58284612084565b915081905092915050565b60006121036120fe846118ab565b611890565b90508281526020810184848401111561211f5761211e61181a565b5b61212a848285611ae8565b509392505050565b600082601f83011261214757612146611815565b5b81516121578482602086016120f0565b91505092915050565b600080604083850312156121775761217661171c565b5b600083015167ffffffffffffffff81111561219557612194611721565b5b6121a185828601612132565b925050602083015167ffffffffffffffff8111156121c2576121c1611721565b5b6121ce85828601612132565b9150509250929050565b7f3c67206f7061636974793d22302e34223e000000000000000000000000000000600082015250565b600061220e601183612079565b9150612219826121d8565b601182019050919050565b600081519050919050565b600081905092915050565b600061224582612224565b61224f818561222f565b935061225f818560208601611ae8565b80840191505092915050565b7f3c2f673e00000000000000000000000000000000000000000000000000000000600082015250565b60006122a1600483612079565b91506122ac8261226b565b600482019050919050565b7f3c673e0a00000000000000000000000000000000000000000000000000000000600082015250565b60006122ed600483612079565b91506122f8826122b7565b600482019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b6000612339600583612079565b915061234482612303565b600582019050919050565b600061235a82612201565b9150612366828561223a565b915061237182612294565b915061237c826122e0565b9150612388828461223a565b91506123938261232c565b91508190509392505050565b60006123aa82611be3565b9050919050565b6123ba8161239f565b82525050565b600060808201905081810360008301526123da8187611b12565b90506123e960208301866117eb565b6123f660408301856123b1565b61240360608301846117eb565b95945050505050565b6000608082840312156124225761242161195b565b5b61242c6080611890565b9050600082015167ffffffffffffffff81111561244c5761244b611960565b5b61245884828501612132565b600083015250602082015167ffffffffffffffff81111561247c5761247b611960565b5b61248884828501612132565b602083015250604082015167ffffffffffffffff8111156124ac576124ab611960565b5b6124b884828501612132565b604083015250606082015167ffffffffffffffff8111156124dc576124db611960565b5b6124e884828501612132565b60608301525092915050565b60006020828403121561250a5761250961171c565b5b600082015167ffffffffffffffff81111561252857612527611721565b5b6125348482850161240c565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612599602683611ad7565b91506125a48261253d565b604082019050919050565b600060208201905081810360008301526125c88161258c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b6000612634600983612079565b915061263f826125fe565b600982019050919050565b600061265582612627565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b6000612695600283612079565b91506126a08261265f565b600282019050919050565b60006126b682612688565b91506126c2828461223a565b91506126cd8261232c565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b600061273d600283612079565b915061274882612707565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b6000612789600283612079565b915061279482612753565b600282019050919050565b60006127ab828661223a565b91506127b682612730565b91506127c28285612084565b91506127cd8261277c565b91506127d98284612084565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612820826117e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612852576128516127e6565b5b600182019050919050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b6000612893601283611ad7565b915061289e8261285d565b602082019050919050565b600060208201905081810360008301526128c281612886565b9050919050565b60006128d5828561223a565b91506128e1828461223a565b91508190509392505050565b7f3c75736520687265663d22230000000000000000000000000000000000000000600082015250565b6000612923600c83612079565b915061292e826128ed565b600c82019050919050565b600061294482612916565b91506129508284612084565b915081905092915050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b60006129b7603483612079565b91506129c28261295b565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b6000612a29602683612079565b9150612a34826129cd565b602682019050919050565b6000612a4a826129aa565b9150612a568284612084565b9150612a6182612a1c565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b6000612aa2600783612079565b9150612aad82612a6c565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b6000612aee600883612079565b9150612af982612ab8565b600882019050919050565b6000612b10828561223a565b9150612b1b82612a95565b9150612b27828461223a565b9150612b3282612ae1565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b6000612b74600783612079565b9150612b7f82612b3e565b600782019050919050565b6000612b96828561223a565b9150612ba2828461223a565b9150612bad82612b67565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612bef602083611ad7565b9150612bfa82612bb9565b602082019050919050565b60006020820190508181036000830152612c1e81612be2565b9050919050565b6000612c30826117e1565b9150612c3b836117e1565b9250828201905080821115612c5357612c526127e6565b5b9291505056fea2646970667358221220a74beece84cd706f533fc737fe034b4f069401de3c97ad733ca91585038866bc64736f6c63430008110033", + "deployedBytecode": "0x6080604052600436106100fe5760003560e01c806385936228116100955780638c40188e116100645780638c40188e1461034c5780638da5cb5b14610377578063e3f24f02146103a2578063f2fde38b146103e0578063f7260d3e14610409576100fe565b8063859362281461029f578063893d20e8146102dc57806389ee68bf146103075780638c2261ad14610323576100fe565b80635d6e0dd5116100d15780635d6e0dd5146101e5578063715018a614610222578063718da7ee1461023957806379b92f2714610262576100fe565b806301ffc9a71461010357806318160ddd14610140578063195478b91461016b57806342d97aec146101a8575b600080fd5b34801561010f57600080fd5b5061012a6004803603810190610125919061177e565b610434565b60405161013791906117c6565b60405180910390f35b34801561014c57600080fd5b50610155610506565b60405161016291906117fa565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d91906119e1565b61050b565b60405161019f9190611b4b565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611b6d565b61081f565b6040516101dc91906117c6565b60405180910390f35b3480156101f157600080fd5b5061020c60048036038101906102079190611bb6565b610896565b6040516102199190611b4b565b60405180910390f35b34801561022e57600080fd5b50610237610905565b005b34801561024557600080fd5b50610260600480360381019061025b9190611c41565b610919565b005b34801561026e57600080fd5b5061028960048036038101906102849190611bb6565b610965565b6040516102969190611b4b565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190611b6d565b61096c565b6040516102d39190611ccd565b60405180910390f35b3480156102e857600080fd5b506102f16109b5565b6040516102fe9190611cf7565b60405180910390f35b610321600480360381019061031c9190611bb6565b6109c4565b005b34801561032f57600080fd5b5061034a60048036038101906103459190611d50565b610aa8565b005b34801561035857600080fd5b50610361610b09565b60405161036e9190611e5c565b60405180910390f35b34801561038357600080fd5b5061038c610bb1565b6040516103999190611cf7565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190611bb6565b610bda565b6040516103d7929190611e7e565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190611c41565b610ead565b005b34801561041557600080fd5b5061041e610f30565b60405161042b9190611cf7565b60405180910390f35b60007f0ece3d21000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ff57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600090565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e61270e5888888876040518563ffffffff1660e01b815260040161056e9493929190611ef3565b600060405180830381865afa15801561058b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906105b49190611fee565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166316e921c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061204c565b905060006040518060400160405280600981526020017f4d6573736167655632000000000000000000000000000000000000000000000081525061068a83610f56565b60405160200161069b9291906120b5565b60405160208183030381529060405290506000806002886040516106bf91906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3f24f02856040518263ffffffff1660e01b815260040161072691906117fa565b600060405180830381865afa158015610743573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061076c9190612160565b915091506000828660405160200161078592919061234f565b604051602081830303815290604052905060006107bb6107b6866107a885611024565b61107f90919063ffffffff16565b6110e2565b905061080d6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525082610808610803896111ea565b6110e2565b61125d565b97505050505050505095945050505050565b60008073ffffffffffffffffffffffffffffffffffffffff1660028360405161084891906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60608060606108a484610bda565b80925081935050506108fc6040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250836108f76108f2856111ea565b6110e2565b61125d565b92505050919050565b61090d6112e1565b610917600061135f565b565b6109216112e1565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060919050565b6002818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109bf610bb1565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610a31573d6000803e3d6000fd5b507fbb0eeee27936db25b1a46a81ab6d97326392a3e961efa7273d5d756d7a2e1cad6040518060400160405280600981526020017f4d65737361676556320000000000000000000000000000000000000000000000815250838334604051610a9c94939291906123c0565b60405180910390a15050565b80600283604051610ab991906120d9565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610b116116a0565b60405180606001604052806040518060400160405280600981526020017f4d6573736167655632000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d6573736167650000000000000000000000000000000000000000000000000081525081526020013073ffffffffffffffffffffffffffffffffffffffff16815250905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dec0314e856040518263ffffffff1660e01b8152600401610c3891906117fa565b600060405180830381865afa158015610c55573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c7e9190611fee565b90506040518060400160405280600981526020017f4d65737361676556320000000000000000000000000000000000000000000000815250610cbf85610f56565b604051602001610cd09291906120b5565b604051602081830303815290604052915060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663eac8f5b8866040518263ffffffff1660e01b8152600401610d3c91906117fa565b600060405180830381865afa158015610d59573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d8291906124f4565b90506000816060015190506000600282604051610d9f91906120d9565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff1663e3f24f028a6040518263ffffffff1660e01b8152600401610e0c91906117fa565b600060405180830381865afa158015610e29573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610e529190612160565b9150915060008287604051602001610e6b92919061234f565b6040516020818303038152906040529050610e9f610e9a89610e8c84611024565b61107f90919063ffffffff16565b6110e2565b985050505050505050915091565b610eb56112e1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b906125af565b60405180910390fd5b610f2d8161135f565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060006001610f6584611423565b01905060008167ffffffffffffffff811115610f8457610f83611830565b5b6040519080825280601f01601f191660200182016040528015610fb65781602001600182028036833780820191505090505b509050600082602001820190505b600115611019578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161100d5761100c6125cf565b5b04945060008503610fc4575b819350505050919050565b61102c6116d7565b60405160200161103b9061264a565b60405160208183030381529060405281600001819052508160405160200161106391906126ab565b6040516020818303038152906040528160200181905250919050565b6110876116d7565b6110da8360405180604001604052806040518060400160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250815260200185815250611576565b905092915050565b606060008260000151511115611174578160000151905060005b82604001515181101561116e57600083604001518281518110611122576111216126d8565b5b6020026020010151905082816000015182602001516040516020016111499392919061279f565b604051602081830303815290604052925050808061116690612815565b9150506110fc565b506111bd565b6000826040015151146111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b3906128a9565b60405180910390fd5b5b8082602001516040516020016111d49291906128c9565b6040516020818303038152906040529050919050565b6111f26116d7565b816040516020016112039190612939565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b60606000846040516020016112729190612a3f565b60405160208183030381529060405290506000845111156112b25780846040516020016112a0929190612b04565b60405160208183030381529060405290505b80836040516020016112c5929190612b8a565b6040516020818303038152906040529050809150509392505050565b6112e9611698565b73ffffffffffffffffffffffffffffffffffffffff16611307610bb1565b73ffffffffffffffffffffffffffffffffffffffff161461135d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135490612c05565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611481577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611477576114766125cf565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106114be576d04ee2d6d415b85acef810000000083816114b4576114b36125cf565b5b0492506020810190505b662386f26fc1000083106114ed57662386f26fc1000083816114e3576114e26125cf565b5b0492506010810190505b6305f5e1008310611516576305f5e100838161150c5761150b6125cf565b5b0492506008810190505b612710831061153b576127108381611531576115306125cf565b5b0492506004810190505b6064831061155e5760648381611554576115536125cf565b5b0492506002810190505b600a831061156d576001810190505b80915050919050565b61157e6116d7565b826000015181600001819052508260200151816020018190525060018360400151516115aa9190612c25565b67ffffffffffffffff8111156115c3576115c2611830565b5b6040519080825280602002602001820160405280156115fc57816020015b6115e96116f8565b8152602001906001900390816115e15790505b50816040018190525060005b836040015151811015611669578360400151818151811061162c5761162b6126d8565b5b60200260200101518260400151828151811061164b5761164a6126d8565b5b6020026020010181905250808061166190612815565b915050611608565b5081816040015184604001515181518110611687576116866126d8565b5b602002602001018190525092915050565b600033905090565b60405180606001604052806060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180606001604052806060815260200160608152602001606081525090565b604051806040016040528060608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61175b81611726565b811461176657600080fd5b50565b60008135905061177881611752565b92915050565b6000602082840312156117945761179361171c565b5b60006117a284828501611769565b91505092915050565b60008115159050919050565b6117c0816117ab565b82525050565b60006020820190506117db60008301846117b7565b92915050565b6000819050919050565b6117f4816117e1565b82525050565b600060208201905061180f60008301846117eb565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118688261181f565b810181811067ffffffffffffffff8211171561188757611886611830565b5b80604052505050565b600061189a611712565b90506118a6828261185f565b919050565b600067ffffffffffffffff8211156118c6576118c5611830565b5b6118cf8261181f565b9050602081019050919050565b82818337600083830152505050565b60006118fe6118f9846118ab565b611890565b90508281526020810184848401111561191a5761191961181a565b5b6119258482856118dc565b509392505050565b600082601f83011261194257611941611815565b5b81356119528482602086016118eb565b91505092915050565b600080fd5b600080fd5b61196e816117e1565b811461197957600080fd5b50565b60008135905061198b81611965565b92915050565b6000604082840312156119a7576119a661195b565b5b6119b16040611890565b905060006119c18482850161197c565b60008301525060206119d58482850161197c565b60208301525092915050565b600080600080600060c086880312156119fd576119fc61171c565b5b600086013567ffffffffffffffff811115611a1b57611a1a611721565b5b611a278882890161192d565b955050602086013567ffffffffffffffff811115611a4857611a47611721565b5b611a548882890161192d565b945050604086013567ffffffffffffffff811115611a7557611a74611721565b5b611a818882890161192d565b935050606086013567ffffffffffffffff811115611aa257611aa1611721565b5b611aae8882890161192d565b9250506080611abf88828901611991565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b06578082015181840152602081019050611aeb565b60008484015250505050565b6000611b1d82611acc565b611b278185611ad7565b9350611b37818560208601611ae8565b611b408161181f565b840191505092915050565b60006020820190508181036000830152611b658184611b12565b905092915050565b600060208284031215611b8357611b8261171c565b5b600082013567ffffffffffffffff811115611ba157611ba0611721565b5b611bad8482850161192d565b91505092915050565b600060208284031215611bcc57611bcb61171c565b5b6000611bda8482850161197c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c0e82611be3565b9050919050565b611c1e81611c03565b8114611c2957600080fd5b50565b600081359050611c3b81611c15565b92915050565b600060208284031215611c5757611c5661171c565b5b6000611c6584828501611c2c565b91505092915050565b6000819050919050565b6000611c93611c8e611c8984611be3565b611c6e565b611be3565b9050919050565b6000611ca582611c78565b9050919050565b6000611cb782611c9a565b9050919050565b611cc781611cac565b82525050565b6000602082019050611ce26000830184611cbe565b92915050565b611cf181611c03565b82525050565b6000602082019050611d0c6000830184611ce8565b92915050565b6000611d1d82611c03565b9050919050565b611d2d81611d12565b8114611d3857600080fd5b50565b600081359050611d4a81611d24565b92915050565b60008060408385031215611d6757611d6661171c565b5b600083013567ffffffffffffffff811115611d8557611d84611721565b5b611d918582860161192d565b9250506020611da285828601611d3b565b9150509250929050565b600082825260208201905092915050565b6000611dc882611acc565b611dd28185611dac565b9350611de2818560208601611ae8565b611deb8161181f565b840191505092915050565b611dff81611cac565b82525050565b60006060830160008301518482036000860152611e228282611dbd565b91505060208301518482036020860152611e3c8282611dbd565b9150506040830151611e516040860182611df6565b508091505092915050565b60006020820190508181036000830152611e768184611e05565b905092915050565b60006040820190508181036000830152611e988185611b12565b90508181036020830152611eac8184611b12565b90509392505050565b611ebe816117e1565b82525050565b604082016000820151611eda6000850182611eb5565b506020820151611eed6020850182611eb5565b50505050565b600060a0820190508181036000830152611f0d8187611b12565b90508181036020830152611f218186611b12565b90508181036040830152611f358185611b12565b9050611f446060830184611ec4565b95945050505050565b600067ffffffffffffffff821115611f6857611f67611830565b5b611f718261181f565b9050602081019050919050565b6000611f91611f8c84611f4d565b611890565b905082815260208101848484011115611fad57611fac61181a565b5b611fb8848285611ae8565b509392505050565b600082601f830112611fd557611fd4611815565b5b8151611fe5848260208601611f7e565b91505092915050565b6000602082840312156120045761200361171c565b5b600082015167ffffffffffffffff81111561202257612021611721565b5b61202e84828501611fc0565b91505092915050565b60008151905061204681611965565b92915050565b6000602082840312156120625761206161171c565b5b600061207084828501612037565b91505092915050565b600081905092915050565b600061208f82611acc565b6120998185612079565b93506120a9818560208601611ae8565b80840191505092915050565b60006120c18285612084565b91506120cd8284612084565b91508190509392505050565b60006120e58284612084565b915081905092915050565b60006121036120fe846118ab565b611890565b90508281526020810184848401111561211f5761211e61181a565b5b61212a848285611ae8565b509392505050565b600082601f83011261214757612146611815565b5b81516121578482602086016120f0565b91505092915050565b600080604083850312156121775761217661171c565b5b600083015167ffffffffffffffff81111561219557612194611721565b5b6121a185828601612132565b925050602083015167ffffffffffffffff8111156121c2576121c1611721565b5b6121ce85828601612132565b9150509250929050565b7f3c67206f7061636974793d22302e34223e000000000000000000000000000000600082015250565b600061220e601183612079565b9150612219826121d8565b601182019050919050565b600081519050919050565b600081905092915050565b600061224582612224565b61224f818561222f565b935061225f818560208601611ae8565b80840191505092915050565b7f3c2f673e00000000000000000000000000000000000000000000000000000000600082015250565b60006122a1600483612079565b91506122ac8261226b565b600482019050919050565b7f3c673e0a00000000000000000000000000000000000000000000000000000000600082015250565b60006122ed600483612079565b91506122f8826122b7565b600482019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b6000612339600583612079565b915061234482612303565b600582019050919050565b600061235a82612201565b9150612366828561223a565b915061237182612294565b915061237c826122e0565b9150612388828461223a565b91506123938261232c565b91508190509392505050565b60006123aa82611be3565b9050919050565b6123ba8161239f565b82525050565b600060808201905081810360008301526123da8187611b12565b90506123e960208301866117eb565b6123f660408301856123b1565b61240360608301846117eb565b95945050505050565b6000608082840312156124225761242161195b565b5b61242c6080611890565b9050600082015167ffffffffffffffff81111561244c5761244b611960565b5b61245884828501612132565b600083015250602082015167ffffffffffffffff81111561247c5761247b611960565b5b61248884828501612132565b602083015250604082015167ffffffffffffffff8111156124ac576124ab611960565b5b6124b884828501612132565b604083015250606082015167ffffffffffffffff8111156124dc576124db611960565b5b6124e884828501612132565b60608301525092915050565b60006020828403121561250a5761250961171c565b5b600082015167ffffffffffffffff81111561252857612527611721565b5b6125348482850161240c565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612599602683611ad7565b91506125a48261253d565b604082019050919050565b600060208201905081810360008301526125c88161258c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b6000612634600983612079565b915061263f826125fe565b600982019050919050565b600061265582612627565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b6000612695600283612079565b91506126a08261265f565b600282019050919050565b60006126b682612688565b91506126c2828461223a565b91506126cd8261232c565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b600061273d600283612079565b915061274882612707565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b6000612789600283612079565b915061279482612753565b600282019050919050565b60006127ab828661223a565b91506127b682612730565b91506127c28285612084565b91506127cd8261277c565b91506127d98284612084565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612820826117e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612852576128516127e6565b5b600182019050919050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b6000612893601283611ad7565b915061289e8261285d565b602082019050919050565b600060208201905081810360008301526128c281612886565b9050919050565b60006128d5828561223a565b91506128e1828461223a565b91508190509392505050565b7f3c75736520687265663d22230000000000000000000000000000000000000000600082015250565b6000612923600c83612079565b915061292e826128ed565b600c82019050919050565b600061294482612916565b91506129508284612084565b915081905092915050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b60006129b7603483612079565b91506129c28261295b565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b6000612a29602683612079565b9150612a34826129cd565b602682019050919050565b6000612a4a826129aa565b9150612a568284612084565b9150612a6182612a1c565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b6000612aa2600783612079565b9150612aad82612a6c565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b6000612aee600883612079565b9150612af982612ab8565b600882019050919050565b6000612b10828561223a565b9150612b1b82612a95565b9150612b27828461223a565b9150612b3282612ae1565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b6000612b74600783612079565b9150612b7f82612b3e565b600782019050919050565b6000612b96828561223a565b9150612ba2828461223a565b9150612bad82612b67565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612bef602083611ad7565b9150612bfa82612bb9565b602082019050919050565b60006020820190508181036000830152612c1e81612be2565b9050919050565b6000612c30826117e1565b9150612c3b836117e1565b9250828201905080821115612c5357612c526127e6565b5b9291505056fea2646970667358221220a74beece84cd706f533fc737fe034b4f069401de3c97ad733ca91585038866bc64736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/abis/MessageStoreV2.json b/src/abis/MessageStoreV2.json new file mode 100644 index 00000000..a71d0000 --- /dev/null +++ b/src/abis/MessageStoreV2.json @@ -0,0 +1,377 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MessageStoreV2", + "sourceName": "contracts/imageParts/svgstore/MessageStoreV2.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "fonts", + "outputs": [ + { + "internalType": "contract IFontProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getAsset", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "internalType": "struct IMessageStoreV2.Asset", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextPartIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSVG", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSVGBody", + "outputs": [ + { + "internalType": "bytes", + "name": "output", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "w", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "h", + "type": "uint256" + } + ], + "internalType": "struct IMessageStoreV2.Box", + "name": "box", + "type": "tuple" + } + ], + "name": "getSVGBody_2", + "outputs": [ + { + "internalType": "bytes", + "name": "output", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "w", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "h", + "type": "uint256" + } + ], + "internalType": "struct IMessageStoreV2.Box", + "name": "box", + "type": "tuple" + } + ], + "name": "getSVGMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "fontName", + "type": "string" + } + ], + "name": "isFontRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nextPartIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "partsList", + "outputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "internalType": "struct IMessageStoreV2.Asset", + "name": "asset", + "type": "tuple" + } + ], + "name": "register", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "contract IFontProvider", + "name": "fontProvider", + "type": "address" + } + ], + "name": "registerFont", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "test", + "outputs": [ + { + "internalType": "string[]", + "name": "output", + "type": "string[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60806040526001805534801561001457600080fd5b5061406a806100246000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063945cfb9e1161008c578063e61270e511610066578063e61270e51461029a578063eac8f5b8146102ca578063f80a64f5146102fa578063f9fbd5541461032a576100ea565b8063945cfb9e1461021e578063be985ac91461023a578063dec0314e1461026a576100ea565b80633882e980116100c85780633882e980146101705780634e2849c6146101a05780637d82d82b146101d057806386f79edb146101ee576100ea565b806316e921c0146100ef57806317fcb5961461010d57806328801cb71461013d575b600080fd5b6100f761035a565b6040516101049190612833565b60405180910390f35b610127600480360381019061012291906129a8565b610364565b6040516101349190612a0c565b60405180910390f35b61015760048036038101906101529190612a53565b6103db565b6040516101679493929190612aff565b60405180910390f35b61018a600480360381019061018591906129a8565b61062b565b6040516101979190612bdf565b60405180910390f35b6101ba60048036038101906101b59190612cec565b610674565b6040516101c79190612833565b60405180910390f35b6101d86107c4565b6040516101e59190612833565b60405180910390f35b61020860048036038101906102039190612a53565b6107ca565b6040516102159190612d35565b60405180910390f35b61023860048036038101906102339190612da7565b610a43565b005b610254600480360381019061024f9190612a53565b610aa4565b6040516102619190612d35565b60405180910390f35b610284600480360381019061027f9190612a53565b610b5e565b6040516102919190612e58565b60405180910390f35b6102b460048036038101906102af9190612eca565b610b70565b6040516102c19190612e58565b60405180910390f35b6102e460048036038101906102df9190612a53565b610b88565b6040516102f19190613047565b60405180910390f35b610314600480360381019061030f9190612eca565b610dfd565b6040516103219190612d35565b60405180910390f35b610344600480360381019061033f91906129a8565b610ebe565b604051610351919061312b565b60405180910390f35b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff1660008360405161038d9190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60026020528060005260406000206000915090508060000180546103fe906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461042a906131cf565b80156104775780601f1061044c57610100808354040283529160200191610477565b820191906000526020600020905b81548152906001019060200180831161045a57829003601f168201915b50505050509080600101805461048c906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546104b8906131cf565b80156105055780601f106104da57610100808354040283529160200191610505565b820191906000526020600020905b8154815290600101906020018083116104e857829003601f168201915b50505050509080600201805461051a906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610546906131cf565b80156105935780601f1061056857610100808354040283529160200191610593565b820191906000526020600020905b81548152906001019060200180831161057657829003601f168201915b5050505050908060030180546105a8906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546105d4906131cf565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b5050505050905084565b6000818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600083604001516040516106a19190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d9061324c565b60405180910390fd5b816002600060015481526020019081526020016000206000820151816000019081610751919061340e565b506020820151816001019081610767919061340e565b50604082015181600201908161077d919061340e565b506060820151816003019081610793919061340e565b50905050600160008154809291906107aa9061350f565b9190505550600180546107bd9190613557565b9050919050565b60015481565b60606000600260008481526020019081526020016000206040518060800160405290816000820180546107fc906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610828906131cf565b80156108755780601f1061084a57610100808354040283529160200191610875565b820191906000526020600020905b81548152906001019060200180831161085857829003601f168201915b5050505050815260200160018201805461088e906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba906131cf565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b50505050508152602001600282018054610920906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461094c906131cf565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b505050505081526020016003820180546109b2906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546109de906131cf565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b50505050508152505090508060000151915050919050565b80600083604051610a549190613189565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060008067ffffffffffffffff811115610ac257610ac161287d565b5b604051908082528060200260200182016040528015610afb57816020015b610ae861279d565b815260200190600190039081610ae05790505b509050610b566040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250610b48610b4384610ed2565b610ef0565b610b5186610ff8565b6112a5565b915050919050565b6060610b6982610ff8565b9050919050565b6060610b7e85858585611329565b9050949350505050565b610b906127be565b60026000838152602001908152602001600020604051806080016040529081600082018054610bbe906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea906131cf565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b50505050508152602001600182018054610c50906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7c906131cf565b8015610cc95780601f10610c9e57610100808354040283529160200191610cc9565b820191906000526020600020905b815481529060010190602001808311610cac57829003601f168201915b50505050508152602001600282018054610ce2906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0e906131cf565b8015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b50505050508152602001600382018054610d74906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610da0906131cf565b8015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b5050505050815250509050919050565b60606000600167ffffffffffffffff811115610e1c57610e1b61287d565b5b604051908082528060200260200182016040528015610e5557816020015b610e4261279d565b815260200190600190039081610e3a5790505b509050610eb36040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250610ea2610e9d84610ed2565b610ef0565b610eae89898989611329565b6112a5565b915050949350505050565b6060610ecb82600a6116ad565b9050919050565b610eda61279d565b610ee382611792565b8160200181905250919050565b606060008260000151511115610f82578160000151905060005b826040015151811015610f7c57600083604001518281518110610f3057610f2f61358b565b5b602002602001015190508281600001518260200151604051602001610f579392919061368e565b6040516020818303038152906040529250508080610f749061350f565b915050610f0a565b50610fcb565b600082604001515114610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613721565b60405180910390fd5b5b808260200151604051602001610fe2929190613741565b6040516020818303038152906040529050919050565b606060006002600084815260200190815260200160002060405180608001604052908160008201805461102a906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611056906131cf565b80156110a35780601f10611078576101008083540402835291602001916110a3565b820191906000526020600020905b81548152906001019060200180831161108657829003601f168201915b505050505081526020016001820180546110bc906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546110e8906131cf565b80156111355780601f1061110a57610100808354040283529160200191611135565b820191906000526020600020905b81548152906001019060200180831161111857829003601f168201915b5050505050815260200160028201805461114e906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461117a906131cf565b80156111c75780601f1061119c576101008083540402835291602001916111c7565b820191906000526020600020905b8154815290600101906020018083116111aa57829003601f168201915b505050505081526020016003820180546111e0906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461120c906131cf565b80156112595780601f1061122e57610100808354040283529160200191611259565b820191906000526020600020905b81548152906001019060200180831161123c57829003601f168201915b505050505081525050905061126c6127e6565b61040081600001818152505061040081602001818152505061129c82600001518360200151846040015184611329565b92505050919050565b60606000846040516020016112ba9190613849565b60405160208183030381529060405290506000845111156112fa5780846040516020016112e892919061390e565b60405160208183030381529060405290505b808360405160200161130d929190613994565b6040516020818303038152906040529050809150509392505050565b6060600061133886600a6116ad565b90506000815167ffffffffffffffff8111156113575761135661287d565b5b60405190808252806020026020018201604052801561139057816020015b61137d61279d565b8152602001906001900390816113755790505b509050600080866040516113a49190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600486600001516113e891906139c3565b905060005b845181101561151557600061141c8487848151811061140f5761140e61358b565b5b6020026020010151611859565b90508281111561142a578092505b6114e36114b16000848773ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190613a1a565b6114ac91906139c3565b6119c1565b6114d5868986815181106114c8576114c761358b565b5b60200260200101516119fd565b611cf790919063ffffffff16565b8583815181106114f6576114f561358b565b5b602002602001018190525050808061150d9061350f565b9150506113ed565b5060006115d4826103e8896000015161152e91906139c3565b6115389190613a76565b86518573ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a99190613a1a565b6115b391906139c3565b6103e88a602001516115c591906139c3565b6115cf9190613a76565b611d5a565b905060006115fb6115e483611d73565b6115ed87611da4565b611cf790919063ffffffff16565b90506116108a82611dc490919063ffffffff16565b90506000600167ffffffffffffffff81111561162f5761162e61287d565b5b60405190808252806020026020018201604052801561166857816020015b61165561279d565b81526020019060019003908161164d5790505b50905081816000815181106116805761167f61358b565b5b602002602001018190525061169c61169782610ed2565b610ef0565b975050505050505050949350505050565b6060600083519050600080600090505b8281116116e9576116cf868287611e27565b9050809150506001826116e29190613aa7565b91506116bd565b508067ffffffffffffffff8111156117045761170361287d565b5b60405190808252806020026020018201604052801561173757816020015b60608152602001906001900390816117225790505b5092506000905060005b82811161178957611753868287611e27565b8584815181106117665761176561358b565b5b6020026020010181935082905250506001826117829190613aa7565b9150611741565b50505092915050565b60606000825167ffffffffffffffff8111156117b1576117b061287d565b5b6040519080825280602002602001820160405280156117e457816020015b60608152602001906001900390816117cf5790505b50905060005b8351811015611847576118168482815181106118095761180861358b565b5b6020026020010151610ef0565b8282815181106118295761182861358b565b5b6020026020010181905250808061183f9061350f565b9150506117ea565b5061185181611ee0565b915050919050565b6000808290506000600167ffffffffffffffff81111561187c5761187b61287d565b5b6040519080825280601f01601f1916602001820160405280156118ae5781602001600182028036833780820191505090505b50905060005b82518110156119b8578281815181106118d0576118cf61358b565b5b602001015160f81c60f81b826000815181106118ef576118ee61358b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508573ffffffffffffffffffffffffffffffffffffffff16637f2406a7836040518263ffffffff1660e01b81526004016119579190612d35565b602060405180830381865afa158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190613a1a565b846119a39190613aa7565b935080806119b09061350f565b9150506118b4565b50505092915050565b60606119cc83611f5a565b6119d583611f5a565b6040516020016119e6929190613bbf565b604051602081830303815290604052905092915050565b611a0561279d565b60008290506000600167ffffffffffffffff811115611a2757611a2661287d565b5b6040519080825280601f01601f191660200182016040528015611a595781602001600182028036833780820191505090505b5090506000825167ffffffffffffffff811115611a7957611a7861287d565b5b604051908082528060200260200182016040528015611ab257816020015b611a9f61279d565b815260200190600190039081611a975790505b509050600080600090505b8451811015611ce157848181518110611ad957611ad861358b565b5b602001015160f81c60f81b84600081518110611af857611af761358b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611bb6611bb18973ffffffffffffffffffffffffffffffffffffffff1663a4b3eff4876040518263ffffffff1660e01b8152600401611b669190612d35565b600060405180830381865afa158015611b83573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bac9190613ca5565b611fae565b612147565b838281518110611bc957611bc861358b565b5b60200260200101819052506000821115611c4757611c28838281518110611bf357611bf261358b565b5b6020026020010151611c04846121ba565b604051602001611c149190613d3a565b604051602081830303815290604052611cf7565b838281518110611c3b57611c3a61358b565b5b60200260200101819052505b8773ffffffffffffffffffffffffffffffffffffffff16637f2406a7856040518263ffffffff1660e01b8152600401611c809190612d35565b602060405180830381865afa158015611c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc19190613a1a565b82611ccc9190613aa7565b91508080611cd99061350f565b915050611abd565b50611ceb82611da4565b94505050505092915050565b611cff61279d565b611d528360405180604001604052806040518060400160405280600981526020017f7472616e73666f726d0000000000000000000000000000000000000000000000815250815260200185815250612288565b905092915050565b6000818310611d695781611d6b565b825b905092915050565b6060611d7e826123aa565b604051602001611d8e9190613db3565b6040516020818303038152906040529050919050565b611dac61279d565b611dbd611db883611792565b6125ef565b9050919050565b611dcc61279d565b611e1f8360405180604001604052806040518060400160405280600481526020017f66696c6c00000000000000000000000000000000000000000000000000000000815250815260200185815250612288565b905092915050565b606060008060018651611e3a9190613aa7565b905060405192506020830185602088010160008060008990505b85811015611e9e5760008203611e7d578351925082855260208401935060208501945061010091505b6008820391508860ff84841c1603611e93578095505b600181019050611e54565b8096508981038960ff85851c1603611eb7576001810390505b868803611ec5576001810390505b8089528060208a010160405250505050505050935093915050565b60606000825190506040519150602082016020840160005b83811015611f4557815183815160005b81811015611f2b5760208401935083518352602083019250602081019050611f08565b508086019550602085019450505050600181019050611ef8565b50602084830303845281604052505050919050565b60606000821315611f7557611f6e826121ba565b9050611fa9565b611f8782611f8290613dea565b6121ba565b604051602001611f979190613e7e565b60405160208183030381529060405290505b919050565b6060806020830160036002855102046040519250602083016000805b8381101561212d5760006010820603611fe857845191506018850194505b60008060028306600081146120145760ff8560e81c169250600f8560f41c1691508460181b9450612024565b8460f81c9250600f8560f01c1691505b5080600081146120f95760006002610100858560081b010361040081106000811461205d57602d93506003925081610400039150612065565b610400820391505b5060098111156120cf5760638111156120b4576103e78111156120995760318360081b1792508160010191506103e8810690505b606481046030018360081b1792508160010191506064810690505b600a81046030018360081b179250816001019150600a810690505b60208160300160081b8460101b171792508260088302610100031b8952818901985050505061211f565b607b83106060841116605b84106040851116171561211e578260f81b86526001860195505b5b505050600181019050611fca565b506020858303038552816040525050505080915050919050565b61214f61279d565b816040516020016121609190613eec565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b6060600060016121c98461264a565b01905060008167ffffffffffffffff8111156121e8576121e761287d565b5b6040519080825280601f01601f19166020018201604052801561221a5781602001600182028036833780820191505090505b509050600082602001820190505b60011561227d578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161227157612270613a47565b5b04945060008503612228575b819350505050919050565b61229061279d565b826000015181600001819052508260200151816020018190525060018360400151516122bc9190613aa7565b67ffffffffffffffff8111156122d5576122d461287d565b5b60405190808252806020026020018201604052801561230e57816020015b6122fb612800565b8152602001906001900390816122f35790505b50816040018190525060005b83604001515181101561237b578360400151818151811061233e5761233d61358b565b5b60200260200101518260400151828151811061235d5761235c61358b565b5b602002602001018190525080806123739061350f565b91505061231a565b50818160400151846040015151815181106123995761239861358b565b5b602002602001018190525092915050565b60606000600367ffffffffffffffff8111156123c9576123c861287d565b5b6040519080825280602002602001820160405280156123fc57816020015b60608152602001906001900390816123e75790505b5090506103e88311156124435761241f6103e88461241a9190613a76565b6121ba565b816000815181106124335761243261358b565b5b6020026020010181905250612499565b6040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152508160008151811061248d5761248c61358b565b5b60200260200101819052505b600a8310156124fc576040518060400160405280600381526020017f2e30300000000000000000000000000000000000000000000000000000000000815250816001815181106124ec576124eb61358b565b5b60200260200101819052506125b6565b606483101561255f576040518060400160405280600281526020017f2e300000000000000000000000000000000000000000000000000000000000008152508160018151811061254f5761254e61358b565b5b60200260200101819052506125b5565b6040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250816001815181106125a9576125a861358b565b5b60200260200101819052505b5b6125bf836121ba565b816002815181106125d3576125d261358b565b5b60200260200101819052506125e781611ee0565b915050919050565b6125f761279d565b60405160200161260690613f5a565b60405160208183030381529060405281600001819052508160405160200161262e9190614007565b6040516020818303038152906040528160200181905250919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106126a8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161269e5761269d613a47565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106126e5576d04ee2d6d415b85acef810000000083816126db576126da613a47565b5b0492506020810190505b662386f26fc10000831061271457662386f26fc10000838161270a57612709613a47565b5b0492506010810190505b6305f5e100831061273d576305f5e100838161273357612732613a47565b5b0492506008810190505b612710831061276257612710838161275857612757613a47565b5b0492506004810190505b60648310612785576064838161277b5761277a613a47565b5b0492506002810190505b600a8310612794576001810190505b80915050919050565b60405180606001604052806060815260200160608152602001606081525090565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b6000819050919050565b61282d8161281a565b82525050565b60006020820190506128486000830184612824565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128b58261286c565b810181811067ffffffffffffffff821117156128d4576128d361287d565b5b80604052505050565b60006128e761284e565b90506128f382826128ac565b919050565b600067ffffffffffffffff8211156129135761291261287d565b5b61291c8261286c565b9050602081019050919050565b82818337600083830152505050565b600061294b612946846128f8565b6128dd565b90508281526020810184848401111561296757612966612867565b5b612972848285612929565b509392505050565b600082601f83011261298f5761298e612862565b5b813561299f848260208601612938565b91505092915050565b6000602082840312156129be576129bd612858565b5b600082013567ffffffffffffffff8111156129dc576129db61285d565b5b6129e88482850161297a565b91505092915050565b60008115159050919050565b612a06816129f1565b82525050565b6000602082019050612a2160008301846129fd565b92915050565b612a308161281a565b8114612a3b57600080fd5b50565b600081359050612a4d81612a27565b92915050565b600060208284031215612a6957612a68612858565b5b6000612a7784828501612a3e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aba578082015181840152602081019050612a9f565b60008484015250505050565b6000612ad182612a80565b612adb8185612a8b565b9350612aeb818560208601612a9c565b612af48161286c565b840191505092915050565b60006080820190508181036000830152612b198187612ac6565b90508181036020830152612b2d8186612ac6565b90508181036040830152612b418185612ac6565b90508181036060830152612b558184612ac6565b905095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612ba5612ba0612b9b84612b60565b612b80565b612b60565b9050919050565b6000612bb782612b8a565b9050919050565b6000612bc982612bac565b9050919050565b612bd981612bbe565b82525050565b6000602082019050612bf46000830184612bd0565b92915050565b600080fd5b600080fd5b600060808284031215612c1a57612c19612bfa565b5b612c2460806128dd565b9050600082013567ffffffffffffffff811115612c4457612c43612bff565b5b612c508482850161297a565b600083015250602082013567ffffffffffffffff811115612c7457612c73612bff565b5b612c808482850161297a565b602083015250604082013567ffffffffffffffff811115612ca457612ca3612bff565b5b612cb08482850161297a565b604083015250606082013567ffffffffffffffff811115612cd457612cd3612bff565b5b612ce08482850161297a565b60608301525092915050565b600060208284031215612d0257612d01612858565b5b600082013567ffffffffffffffff811115612d2057612d1f61285d565b5b612d2c84828501612c04565b91505092915050565b60006020820190508181036000830152612d4f8184612ac6565b905092915050565b6000612d6282612b60565b9050919050565b6000612d7482612d57565b9050919050565b612d8481612d69565b8114612d8f57600080fd5b50565b600081359050612da181612d7b565b92915050565b60008060408385031215612dbe57612dbd612858565b5b600083013567ffffffffffffffff811115612ddc57612ddb61285d565b5b612de88582860161297a565b9250506020612df985828601612d92565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000612e2a82612e03565b612e348185612e0e565b9350612e44818560208601612a9c565b612e4d8161286c565b840191505092915050565b60006020820190508181036000830152612e728184612e1f565b905092915050565b600060408284031215612e9057612e8f612bfa565b5b612e9a60406128dd565b90506000612eaa84828501612a3e565b6000830152506020612ebe84828501612a3e565b60208301525092915050565b60008060008060a08587031215612ee457612ee3612858565b5b600085013567ffffffffffffffff811115612f0257612f0161285d565b5b612f0e8782880161297a565b945050602085013567ffffffffffffffff811115612f2f57612f2e61285d565b5b612f3b8782880161297a565b935050604085013567ffffffffffffffff811115612f5c57612f5b61285d565b5b612f688782880161297a565b9250506060612f7987828801612e7a565b91505092959194509250565b600082825260208201905092915050565b6000612fa182612a80565b612fab8185612f85565b9350612fbb818560208601612a9c565b612fc48161286c565b840191505092915050565b60006080830160008301518482036000860152612fec8282612f96565b915050602083015184820360208601526130068282612f96565b915050604083015184820360408601526130208282612f96565b9150506060830151848203606086015261303a8282612f96565b9150508091505092915050565b600060208201905081810360008301526130618184612fcf565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006130a18383612f96565b905092915050565b6000602082019050919050565b60006130c182613069565b6130cb8185613074565b9350836020820285016130dd85613085565b8060005b8581101561311957848403895281516130fa8582613095565b9450613105836130a9565b925060208a019950506001810190506130e1565b50829750879550505050505092915050565b6000602082019050818103600083015261314581846130b6565b905092915050565b600081905092915050565b600061316382612a80565b61316d818561314d565b935061317d818560208601612a9c565b80840191505092915050565b60006131958284613158565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131e757607f821691505b6020821081036131fa576131f96131a0565b5b50919050565b7f466f6e74206e6f74207265676973746572656400000000000000000000000000600082015250565b6000613236601383612a8b565b915061324182613200565b602082019050919050565b6000602082019050818103600083015261326581613229565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026132ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613291565b6132d88683613291565b95508019841693508086168417925050509392505050565b600061330b6133066133018461281a565b612b80565b61281a565b9050919050565b6000819050919050565b613325836132f0565b61333961333182613312565b84845461329e565b825550505050565b600090565b61334e613341565b61335981848461331c565b505050565b5b8181101561337d57613372600082613346565b60018101905061335f565b5050565b601f8211156133c2576133938161326c565b61339c84613281565b810160208510156133ab578190505b6133bf6133b785613281565b83018261335e565b50505b505050565b600082821c905092915050565b60006133e5600019846008026133c7565b1980831691505092915050565b60006133fe83836133d4565b9150826002028217905092915050565b61341782612a80565b67ffffffffffffffff8111156134305761342f61287d565b5b61343a82546131cf565b613445828285613381565b600060209050601f8311600181146134785760008415613466578287015190505b61347085826133f2565b8655506134d8565b601f1984166134868661326c565b60005b828110156134ae57848901518255600182019150602085019450602081019050613489565b868310156134cb57848901516134c7601f8916826133d4565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351a8261281a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361354c5761354b6134e0565b5b600182019050919050565b60006135628261281a565b915061356d8361281a565b9250828203905081811115613585576135846134e0565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b60006135d082612e03565b6135da81856135ba565b93506135ea818560208601612a9c565b80840191505092915050565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b600061362c60028361314d565b9150613637826135f6565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b600061367860028361314d565b915061368382613642565b600282019050919050565b600061369a82866135c5565b91506136a58261361f565b91506136b18285613158565b91506136bc8261366b565b91506136c88284613158565b9150819050949350505050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b600061370b601283612a8b565b9150613716826136d5565b602082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b600061374d82856135c5565b915061375982846135c5565b91508190509392505050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b60006137c160348361314d565b91506137cc82613765565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b600061383360268361314d565b915061383e826137d7565b602682019050919050565b6000613854826137b4565b91506138608284613158565b915061386b82613826565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b60006138ac60078361314d565b91506138b782613876565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b60006138f860088361314d565b9150613903826138c2565b600882019050919050565b600061391a82856135c5565b91506139258261389f565b915061393182846135c5565b915061393c826138eb565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b600061397e60078361314d565b915061398982613948565b600782019050919050565b60006139a082856135c5565b91506139ac82846135c5565b91506139b782613971565b91508190509392505050565b60006139ce8261281a565b91506139d98361281a565b92508282026139e78161281a565b915082820484148315176139fe576139fd6134e0565b5b5092915050565b600081519050613a1481612a27565b92915050565b600060208284031215613a3057613a2f612858565b5b6000613a3e84828501613a05565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a818261281a565b9150613a8c8361281a565b925082613a9c57613a9b613a47565b5b828204905092915050565b6000613ab28261281a565b9150613abd8361281a565b9250828201905080821115613ad557613ad46134e0565b5b92915050565b7f7472616e736c6174652800000000000000000000000000000000000000000000600082015250565b6000613b11600a8361314d565b9150613b1c82613adb565b600a82019050919050565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b6000613b5d60018361314d565b9150613b6882613b27565b600182019050919050565b7f2900000000000000000000000000000000000000000000000000000000000000600082015250565b6000613ba960018361314d565b9150613bb482613b73565b600182019050919050565b6000613bca82613b04565b9150613bd68285613158565b9150613be182613b50565b9150613bed8284613158565b9150613bf882613b9c565b91508190509392505050565b600067ffffffffffffffff821115613c1f57613c1e61287d565b5b613c288261286c565b9050602081019050919050565b6000613c48613c4384613c04565b6128dd565b905082815260208101848484011115613c6457613c63612867565b5b613c6f848285612a9c565b509392505050565b600082601f830112613c8c57613c8b612862565b5b8151613c9c848260208601613c35565b91505092915050565b600060208284031215613cbb57613cba612858565b5b600082015167ffffffffffffffff811115613cd957613cd861285d565b5b613ce584828501613c77565b91505092915050565b7f2030290000000000000000000000000000000000000000000000000000000000600082015250565b6000613d2460038361314d565b9150613d2f82613cee565b600382019050919050565b6000613d4582613b04565b9150613d518284613158565b9150613d5c82613d17565b915081905092915050565b7f7363616c65280000000000000000000000000000000000000000000000000000600082015250565b6000613d9d60068361314d565b9150613da882613d67565b600682019050919050565b6000613dbe82613d90565b9150613dca8284613158565b9150613dd582613b9c565b915081905092915050565b6000819050919050565b6000613df582613de0565b91507f80000000000000000000000000000000000000000000000000000000000000008203613e2757613e266134e0565b5b816000039050919050565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613e6860018361314d565b9150613e7382613e32565b600182019050919050565b6000613e8982613e5b565b9150613e958284613158565b915081905092915050565b7f3c7061746820643d220000000000000000000000000000000000000000000000600082015250565b6000613ed660098361314d565b9150613ee182613ea0565b600982019050919050565b6000613ef782613ec9565b9150613f0382846135c5565b915081905092915050565b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b6000613f4460098361314d565b9150613f4f82613f0e565b600982019050919050565b6000613f6582613f37565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b6000613fa560028361314d565b9150613fb082613f6f565b600282019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b6000613ff160058361314d565b9150613ffc82613fbb565b600582019050919050565b600061401282613f98565b915061401e82846135c5565b915061402982613fe4565b91508190509291505056fea26469706673582212201e5c9dcd2a7a22f79e93e01f80cdcbd7cfc7d340b836b023aa4058261442c1ad64736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063945cfb9e1161008c578063e61270e511610066578063e61270e51461029a578063eac8f5b8146102ca578063f80a64f5146102fa578063f9fbd5541461032a576100ea565b8063945cfb9e1461021e578063be985ac91461023a578063dec0314e1461026a576100ea565b80633882e980116100c85780633882e980146101705780634e2849c6146101a05780637d82d82b146101d057806386f79edb146101ee576100ea565b806316e921c0146100ef57806317fcb5961461010d57806328801cb71461013d575b600080fd5b6100f761035a565b6040516101049190612833565b60405180910390f35b610127600480360381019061012291906129a8565b610364565b6040516101349190612a0c565b60405180910390f35b61015760048036038101906101529190612a53565b6103db565b6040516101679493929190612aff565b60405180910390f35b61018a600480360381019061018591906129a8565b61062b565b6040516101979190612bdf565b60405180910390f35b6101ba60048036038101906101b59190612cec565b610674565b6040516101c79190612833565b60405180910390f35b6101d86107c4565b6040516101e59190612833565b60405180910390f35b61020860048036038101906102039190612a53565b6107ca565b6040516102159190612d35565b60405180910390f35b61023860048036038101906102339190612da7565b610a43565b005b610254600480360381019061024f9190612a53565b610aa4565b6040516102619190612d35565b60405180910390f35b610284600480360381019061027f9190612a53565b610b5e565b6040516102919190612e58565b60405180910390f35b6102b460048036038101906102af9190612eca565b610b70565b6040516102c19190612e58565b60405180910390f35b6102e460048036038101906102df9190612a53565b610b88565b6040516102f19190613047565b60405180910390f35b610314600480360381019061030f9190612eca565b610dfd565b6040516103219190612d35565b60405180910390f35b610344600480360381019061033f91906129a8565b610ebe565b604051610351919061312b565b60405180910390f35b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff1660008360405161038d9190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60026020528060005260406000206000915090508060000180546103fe906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461042a906131cf565b80156104775780601f1061044c57610100808354040283529160200191610477565b820191906000526020600020905b81548152906001019060200180831161045a57829003601f168201915b50505050509080600101805461048c906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546104b8906131cf565b80156105055780601f106104da57610100808354040283529160200191610505565b820191906000526020600020905b8154815290600101906020018083116104e857829003601f168201915b50505050509080600201805461051a906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610546906131cf565b80156105935780601f1061056857610100808354040283529160200191610593565b820191906000526020600020905b81548152906001019060200180831161057657829003601f168201915b5050505050908060030180546105a8906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546105d4906131cf565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b5050505050905084565b6000818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600083604001516040516106a19190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d9061324c565b60405180910390fd5b816002600060015481526020019081526020016000206000820151816000019081610751919061340e565b506020820151816001019081610767919061340e565b50604082015181600201908161077d919061340e565b506060820151816003019081610793919061340e565b50905050600160008154809291906107aa9061350f565b9190505550600180546107bd9190613557565b9050919050565b60015481565b60606000600260008481526020019081526020016000206040518060800160405290816000820180546107fc906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610828906131cf565b80156108755780601f1061084a57610100808354040283529160200191610875565b820191906000526020600020905b81548152906001019060200180831161085857829003601f168201915b5050505050815260200160018201805461088e906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba906131cf565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b50505050508152602001600282018054610920906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461094c906131cf565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b505050505081526020016003820180546109b2906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546109de906131cf565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b50505050508152505090508060000151915050919050565b80600083604051610a549190613189565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060008067ffffffffffffffff811115610ac257610ac161287d565b5b604051908082528060200260200182016040528015610afb57816020015b610ae861279d565b815260200190600190039081610ae05790505b509050610b566040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250610b48610b4384610ed2565b610ef0565b610b5186610ff8565b6112a5565b915050919050565b6060610b6982610ff8565b9050919050565b6060610b7e85858585611329565b9050949350505050565b610b906127be565b60026000838152602001908152602001600020604051806080016040529081600082018054610bbe906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea906131cf565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b50505050508152602001600182018054610c50906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7c906131cf565b8015610cc95780601f10610c9e57610100808354040283529160200191610cc9565b820191906000526020600020905b815481529060010190602001808311610cac57829003601f168201915b50505050508152602001600282018054610ce2906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0e906131cf565b8015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b50505050508152602001600382018054610d74906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610da0906131cf565b8015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b5050505050815250509050919050565b60606000600167ffffffffffffffff811115610e1c57610e1b61287d565b5b604051908082528060200260200182016040528015610e5557816020015b610e4261279d565b815260200190600190039081610e3a5790505b509050610eb36040518060400160405280600d81526020017f3020302031303234203130323400000000000000000000000000000000000000815250610ea2610e9d84610ed2565b610ef0565b610eae89898989611329565b6112a5565b915050949350505050565b6060610ecb82600a6116ad565b9050919050565b610eda61279d565b610ee382611792565b8160200181905250919050565b606060008260000151511115610f82578160000151905060005b826040015151811015610f7c57600083604001518281518110610f3057610f2f61358b565b5b602002602001015190508281600001518260200151604051602001610f579392919061368e565b6040516020818303038152906040529250508080610f749061350f565b915050610f0a565b50610fcb565b600082604001515114610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613721565b60405180910390fd5b5b808260200151604051602001610fe2929190613741565b6040516020818303038152906040529050919050565b606060006002600084815260200190815260200160002060405180608001604052908160008201805461102a906131cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611056906131cf565b80156110a35780601f10611078576101008083540402835291602001916110a3565b820191906000526020600020905b81548152906001019060200180831161108657829003601f168201915b505050505081526020016001820180546110bc906131cf565b80601f01602080910402602001604051908101604052809291908181526020018280546110e8906131cf565b80156111355780601f1061110a57610100808354040283529160200191611135565b820191906000526020600020905b81548152906001019060200180831161111857829003601f168201915b5050505050815260200160028201805461114e906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461117a906131cf565b80156111c75780601f1061119c576101008083540402835291602001916111c7565b820191906000526020600020905b8154815290600101906020018083116111aa57829003601f168201915b505050505081526020016003820180546111e0906131cf565b80601f016020809104026020016040519081016040528092919081815260200182805461120c906131cf565b80156112595780601f1061122e57610100808354040283529160200191611259565b820191906000526020600020905b81548152906001019060200180831161123c57829003601f168201915b505050505081525050905061126c6127e6565b61040081600001818152505061040081602001818152505061129c82600001518360200151846040015184611329565b92505050919050565b60606000846040516020016112ba9190613849565b60405160208183030381529060405290506000845111156112fa5780846040516020016112e892919061390e565b60405160208183030381529060405290505b808360405160200161130d929190613994565b6040516020818303038152906040529050809150509392505050565b6060600061133886600a6116ad565b90506000815167ffffffffffffffff8111156113575761135661287d565b5b60405190808252806020026020018201604052801561139057816020015b61137d61279d565b8152602001906001900390816113755790505b509050600080866040516113a49190613189565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600486600001516113e891906139c3565b905060005b845181101561151557600061141c8487848151811061140f5761140e61358b565b5b6020026020010151611859565b90508281111561142a578092505b6114e36114b16000848773ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190613a1a565b6114ac91906139c3565b6119c1565b6114d5868986815181106114c8576114c761358b565b5b60200260200101516119fd565b611cf790919063ffffffff16565b8583815181106114f6576114f561358b565b5b602002602001018190525050808061150d9061350f565b9150506113ed565b5060006115d4826103e8896000015161152e91906139c3565b6115389190613a76565b86518573ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a99190613a1a565b6115b391906139c3565b6103e88a602001516115c591906139c3565b6115cf9190613a76565b611d5a565b905060006115fb6115e483611d73565b6115ed87611da4565b611cf790919063ffffffff16565b90506116108a82611dc490919063ffffffff16565b90506000600167ffffffffffffffff81111561162f5761162e61287d565b5b60405190808252806020026020018201604052801561166857816020015b61165561279d565b81526020019060019003908161164d5790505b50905081816000815181106116805761167f61358b565b5b602002602001018190525061169c61169782610ed2565b610ef0565b975050505050505050949350505050565b6060600083519050600080600090505b8281116116e9576116cf868287611e27565b9050809150506001826116e29190613aa7565b91506116bd565b508067ffffffffffffffff8111156117045761170361287d565b5b60405190808252806020026020018201604052801561173757816020015b60608152602001906001900390816117225790505b5092506000905060005b82811161178957611753868287611e27565b8584815181106117665761176561358b565b5b6020026020010181935082905250506001826117829190613aa7565b9150611741565b50505092915050565b60606000825167ffffffffffffffff8111156117b1576117b061287d565b5b6040519080825280602002602001820160405280156117e457816020015b60608152602001906001900390816117cf5790505b50905060005b8351811015611847576118168482815181106118095761180861358b565b5b6020026020010151610ef0565b8282815181106118295761182861358b565b5b6020026020010181905250808061183f9061350f565b9150506117ea565b5061185181611ee0565b915050919050565b6000808290506000600167ffffffffffffffff81111561187c5761187b61287d565b5b6040519080825280601f01601f1916602001820160405280156118ae5781602001600182028036833780820191505090505b50905060005b82518110156119b8578281815181106118d0576118cf61358b565b5b602001015160f81c60f81b826000815181106118ef576118ee61358b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508573ffffffffffffffffffffffffffffffffffffffff16637f2406a7836040518263ffffffff1660e01b81526004016119579190612d35565b602060405180830381865afa158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190613a1a565b846119a39190613aa7565b935080806119b09061350f565b9150506118b4565b50505092915050565b60606119cc83611f5a565b6119d583611f5a565b6040516020016119e6929190613bbf565b604051602081830303815290604052905092915050565b611a0561279d565b60008290506000600167ffffffffffffffff811115611a2757611a2661287d565b5b6040519080825280601f01601f191660200182016040528015611a595781602001600182028036833780820191505090505b5090506000825167ffffffffffffffff811115611a7957611a7861287d565b5b604051908082528060200260200182016040528015611ab257816020015b611a9f61279d565b815260200190600190039081611a975790505b509050600080600090505b8451811015611ce157848181518110611ad957611ad861358b565b5b602001015160f81c60f81b84600081518110611af857611af761358b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611bb6611bb18973ffffffffffffffffffffffffffffffffffffffff1663a4b3eff4876040518263ffffffff1660e01b8152600401611b669190612d35565b600060405180830381865afa158015611b83573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bac9190613ca5565b611fae565b612147565b838281518110611bc957611bc861358b565b5b60200260200101819052506000821115611c4757611c28838281518110611bf357611bf261358b565b5b6020026020010151611c04846121ba565b604051602001611c149190613d3a565b604051602081830303815290604052611cf7565b838281518110611c3b57611c3a61358b565b5b60200260200101819052505b8773ffffffffffffffffffffffffffffffffffffffff16637f2406a7856040518263ffffffff1660e01b8152600401611c809190612d35565b602060405180830381865afa158015611c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc19190613a1a565b82611ccc9190613aa7565b91508080611cd99061350f565b915050611abd565b50611ceb82611da4565b94505050505092915050565b611cff61279d565b611d528360405180604001604052806040518060400160405280600981526020017f7472616e73666f726d0000000000000000000000000000000000000000000000815250815260200185815250612288565b905092915050565b6000818310611d695781611d6b565b825b905092915050565b6060611d7e826123aa565b604051602001611d8e9190613db3565b6040516020818303038152906040529050919050565b611dac61279d565b611dbd611db883611792565b6125ef565b9050919050565b611dcc61279d565b611e1f8360405180604001604052806040518060400160405280600481526020017f66696c6c00000000000000000000000000000000000000000000000000000000815250815260200185815250612288565b905092915050565b606060008060018651611e3a9190613aa7565b905060405192506020830185602088010160008060008990505b85811015611e9e5760008203611e7d578351925082855260208401935060208501945061010091505b6008820391508860ff84841c1603611e93578095505b600181019050611e54565b8096508981038960ff85851c1603611eb7576001810390505b868803611ec5576001810390505b8089528060208a010160405250505050505050935093915050565b60606000825190506040519150602082016020840160005b83811015611f4557815183815160005b81811015611f2b5760208401935083518352602083019250602081019050611f08565b508086019550602085019450505050600181019050611ef8565b50602084830303845281604052505050919050565b60606000821315611f7557611f6e826121ba565b9050611fa9565b611f8782611f8290613dea565b6121ba565b604051602001611f979190613e7e565b60405160208183030381529060405290505b919050565b6060806020830160036002855102046040519250602083016000805b8381101561212d5760006010820603611fe857845191506018850194505b60008060028306600081146120145760ff8560e81c169250600f8560f41c1691508460181b9450612024565b8460f81c9250600f8560f01c1691505b5080600081146120f95760006002610100858560081b010361040081106000811461205d57602d93506003925081610400039150612065565b610400820391505b5060098111156120cf5760638111156120b4576103e78111156120995760318360081b1792508160010191506103e8810690505b606481046030018360081b1792508160010191506064810690505b600a81046030018360081b179250816001019150600a810690505b60208160300160081b8460101b171792508260088302610100031b8952818901985050505061211f565b607b83106060841116605b84106040851116171561211e578260f81b86526001860195505b5b505050600181019050611fca565b506020858303038552816040525050505080915050919050565b61214f61279d565b816040516020016121609190613eec565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b6060600060016121c98461264a565b01905060008167ffffffffffffffff8111156121e8576121e761287d565b5b6040519080825280601f01601f19166020018201604052801561221a5781602001600182028036833780820191505090505b509050600082602001820190505b60011561227d578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161227157612270613a47565b5b04945060008503612228575b819350505050919050565b61229061279d565b826000015181600001819052508260200151816020018190525060018360400151516122bc9190613aa7565b67ffffffffffffffff8111156122d5576122d461287d565b5b60405190808252806020026020018201604052801561230e57816020015b6122fb612800565b8152602001906001900390816122f35790505b50816040018190525060005b83604001515181101561237b578360400151818151811061233e5761233d61358b565b5b60200260200101518260400151828151811061235d5761235c61358b565b5b602002602001018190525080806123739061350f565b91505061231a565b50818160400151846040015151815181106123995761239861358b565b5b602002602001018190525092915050565b60606000600367ffffffffffffffff8111156123c9576123c861287d565b5b6040519080825280602002602001820160405280156123fc57816020015b60608152602001906001900390816123e75790505b5090506103e88311156124435761241f6103e88461241a9190613a76565b6121ba565b816000815181106124335761243261358b565b5b6020026020010181905250612499565b6040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152508160008151811061248d5761248c61358b565b5b60200260200101819052505b600a8310156124fc576040518060400160405280600381526020017f2e30300000000000000000000000000000000000000000000000000000000000815250816001815181106124ec576124eb61358b565b5b60200260200101819052506125b6565b606483101561255f576040518060400160405280600281526020017f2e300000000000000000000000000000000000000000000000000000000000008152508160018151811061254f5761254e61358b565b5b60200260200101819052506125b5565b6040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250816001815181106125a9576125a861358b565b5b60200260200101819052505b5b6125bf836121ba565b816002815181106125d3576125d261358b565b5b60200260200101819052506125e781611ee0565b915050919050565b6125f761279d565b60405160200161260690613f5a565b60405160208183030381529060405281600001819052508160405160200161262e9190614007565b6040516020818303038152906040528160200181905250919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106126a8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161269e5761269d613a47565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106126e5576d04ee2d6d415b85acef810000000083816126db576126da613a47565b5b0492506020810190505b662386f26fc10000831061271457662386f26fc10000838161270a57612709613a47565b5b0492506010810190505b6305f5e100831061273d576305f5e100838161273357612732613a47565b5b0492506008810190505b612710831061276257612710838161275857612757613a47565b5b0492506004810190505b60648310612785576064838161277b5761277a613a47565b5b0492506002810190505b600a8310612794576001810190505b80915050919050565b60405180606001604052806060815260200160608152602001606081525090565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b6000819050919050565b61282d8161281a565b82525050565b60006020820190506128486000830184612824565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128b58261286c565b810181811067ffffffffffffffff821117156128d4576128d361287d565b5b80604052505050565b60006128e761284e565b90506128f382826128ac565b919050565b600067ffffffffffffffff8211156129135761291261287d565b5b61291c8261286c565b9050602081019050919050565b82818337600083830152505050565b600061294b612946846128f8565b6128dd565b90508281526020810184848401111561296757612966612867565b5b612972848285612929565b509392505050565b600082601f83011261298f5761298e612862565b5b813561299f848260208601612938565b91505092915050565b6000602082840312156129be576129bd612858565b5b600082013567ffffffffffffffff8111156129dc576129db61285d565b5b6129e88482850161297a565b91505092915050565b60008115159050919050565b612a06816129f1565b82525050565b6000602082019050612a2160008301846129fd565b92915050565b612a308161281a565b8114612a3b57600080fd5b50565b600081359050612a4d81612a27565b92915050565b600060208284031215612a6957612a68612858565b5b6000612a7784828501612a3e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aba578082015181840152602081019050612a9f565b60008484015250505050565b6000612ad182612a80565b612adb8185612a8b565b9350612aeb818560208601612a9c565b612af48161286c565b840191505092915050565b60006080820190508181036000830152612b198187612ac6565b90508181036020830152612b2d8186612ac6565b90508181036040830152612b418185612ac6565b90508181036060830152612b558184612ac6565b905095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612ba5612ba0612b9b84612b60565b612b80565b612b60565b9050919050565b6000612bb782612b8a565b9050919050565b6000612bc982612bac565b9050919050565b612bd981612bbe565b82525050565b6000602082019050612bf46000830184612bd0565b92915050565b600080fd5b600080fd5b600060808284031215612c1a57612c19612bfa565b5b612c2460806128dd565b9050600082013567ffffffffffffffff811115612c4457612c43612bff565b5b612c508482850161297a565b600083015250602082013567ffffffffffffffff811115612c7457612c73612bff565b5b612c808482850161297a565b602083015250604082013567ffffffffffffffff811115612ca457612ca3612bff565b5b612cb08482850161297a565b604083015250606082013567ffffffffffffffff811115612cd457612cd3612bff565b5b612ce08482850161297a565b60608301525092915050565b600060208284031215612d0257612d01612858565b5b600082013567ffffffffffffffff811115612d2057612d1f61285d565b5b612d2c84828501612c04565b91505092915050565b60006020820190508181036000830152612d4f8184612ac6565b905092915050565b6000612d6282612b60565b9050919050565b6000612d7482612d57565b9050919050565b612d8481612d69565b8114612d8f57600080fd5b50565b600081359050612da181612d7b565b92915050565b60008060408385031215612dbe57612dbd612858565b5b600083013567ffffffffffffffff811115612ddc57612ddb61285d565b5b612de88582860161297a565b9250506020612df985828601612d92565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000612e2a82612e03565b612e348185612e0e565b9350612e44818560208601612a9c565b612e4d8161286c565b840191505092915050565b60006020820190508181036000830152612e728184612e1f565b905092915050565b600060408284031215612e9057612e8f612bfa565b5b612e9a60406128dd565b90506000612eaa84828501612a3e565b6000830152506020612ebe84828501612a3e565b60208301525092915050565b60008060008060a08587031215612ee457612ee3612858565b5b600085013567ffffffffffffffff811115612f0257612f0161285d565b5b612f0e8782880161297a565b945050602085013567ffffffffffffffff811115612f2f57612f2e61285d565b5b612f3b8782880161297a565b935050604085013567ffffffffffffffff811115612f5c57612f5b61285d565b5b612f688782880161297a565b9250506060612f7987828801612e7a565b91505092959194509250565b600082825260208201905092915050565b6000612fa182612a80565b612fab8185612f85565b9350612fbb818560208601612a9c565b612fc48161286c565b840191505092915050565b60006080830160008301518482036000860152612fec8282612f96565b915050602083015184820360208601526130068282612f96565b915050604083015184820360408601526130208282612f96565b9150506060830151848203606086015261303a8282612f96565b9150508091505092915050565b600060208201905081810360008301526130618184612fcf565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006130a18383612f96565b905092915050565b6000602082019050919050565b60006130c182613069565b6130cb8185613074565b9350836020820285016130dd85613085565b8060005b8581101561311957848403895281516130fa8582613095565b9450613105836130a9565b925060208a019950506001810190506130e1565b50829750879550505050505092915050565b6000602082019050818103600083015261314581846130b6565b905092915050565b600081905092915050565b600061316382612a80565b61316d818561314d565b935061317d818560208601612a9c565b80840191505092915050565b60006131958284613158565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131e757607f821691505b6020821081036131fa576131f96131a0565b5b50919050565b7f466f6e74206e6f74207265676973746572656400000000000000000000000000600082015250565b6000613236601383612a8b565b915061324182613200565b602082019050919050565b6000602082019050818103600083015261326581613229565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026132ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613291565b6132d88683613291565b95508019841693508086168417925050509392505050565b600061330b6133066133018461281a565b612b80565b61281a565b9050919050565b6000819050919050565b613325836132f0565b61333961333182613312565b84845461329e565b825550505050565b600090565b61334e613341565b61335981848461331c565b505050565b5b8181101561337d57613372600082613346565b60018101905061335f565b5050565b601f8211156133c2576133938161326c565b61339c84613281565b810160208510156133ab578190505b6133bf6133b785613281565b83018261335e565b50505b505050565b600082821c905092915050565b60006133e5600019846008026133c7565b1980831691505092915050565b60006133fe83836133d4565b9150826002028217905092915050565b61341782612a80565b67ffffffffffffffff8111156134305761342f61287d565b5b61343a82546131cf565b613445828285613381565b600060209050601f8311600181146134785760008415613466578287015190505b61347085826133f2565b8655506134d8565b601f1984166134868661326c565b60005b828110156134ae57848901518255600182019150602085019450602081019050613489565b868310156134cb57848901516134c7601f8916826133d4565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351a8261281a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361354c5761354b6134e0565b5b600182019050919050565b60006135628261281a565b915061356d8361281a565b9250828203905081811115613585576135846134e0565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b60006135d082612e03565b6135da81856135ba565b93506135ea818560208601612a9c565b80840191505092915050565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b600061362c60028361314d565b9150613637826135f6565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b600061367860028361314d565b915061368382613642565b600282019050919050565b600061369a82866135c5565b91506136a58261361f565b91506136b18285613158565b91506136bc8261366b565b91506136c88284613158565b9150819050949350505050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b600061370b601283612a8b565b9150613716826136d5565b602082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b600061374d82856135c5565b915061375982846135c5565b91508190509392505050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b60006137c160348361314d565b91506137cc82613765565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b600061383360268361314d565b915061383e826137d7565b602682019050919050565b6000613854826137b4565b91506138608284613158565b915061386b82613826565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b60006138ac60078361314d565b91506138b782613876565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b60006138f860088361314d565b9150613903826138c2565b600882019050919050565b600061391a82856135c5565b91506139258261389f565b915061393182846135c5565b915061393c826138eb565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b600061397e60078361314d565b915061398982613948565b600782019050919050565b60006139a082856135c5565b91506139ac82846135c5565b91506139b782613971565b91508190509392505050565b60006139ce8261281a565b91506139d98361281a565b92508282026139e78161281a565b915082820484148315176139fe576139fd6134e0565b5b5092915050565b600081519050613a1481612a27565b92915050565b600060208284031215613a3057613a2f612858565b5b6000613a3e84828501613a05565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a818261281a565b9150613a8c8361281a565b925082613a9c57613a9b613a47565b5b828204905092915050565b6000613ab28261281a565b9150613abd8361281a565b9250828201905080821115613ad557613ad46134e0565b5b92915050565b7f7472616e736c6174652800000000000000000000000000000000000000000000600082015250565b6000613b11600a8361314d565b9150613b1c82613adb565b600a82019050919050565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b6000613b5d60018361314d565b9150613b6882613b27565b600182019050919050565b7f2900000000000000000000000000000000000000000000000000000000000000600082015250565b6000613ba960018361314d565b9150613bb482613b73565b600182019050919050565b6000613bca82613b04565b9150613bd68285613158565b9150613be182613b50565b9150613bed8284613158565b9150613bf882613b9c565b91508190509392505050565b600067ffffffffffffffff821115613c1f57613c1e61287d565b5b613c288261286c565b9050602081019050919050565b6000613c48613c4384613c04565b6128dd565b905082815260208101848484011115613c6457613c63612867565b5b613c6f848285612a9c565b509392505050565b600082601f830112613c8c57613c8b612862565b5b8151613c9c848260208601613c35565b91505092915050565b600060208284031215613cbb57613cba612858565b5b600082015167ffffffffffffffff811115613cd957613cd861285d565b5b613ce584828501613c77565b91505092915050565b7f2030290000000000000000000000000000000000000000000000000000000000600082015250565b6000613d2460038361314d565b9150613d2f82613cee565b600382019050919050565b6000613d4582613b04565b9150613d518284613158565b9150613d5c82613d17565b915081905092915050565b7f7363616c65280000000000000000000000000000000000000000000000000000600082015250565b6000613d9d60068361314d565b9150613da882613d67565b600682019050919050565b6000613dbe82613d90565b9150613dca8284613158565b9150613dd582613b9c565b915081905092915050565b6000819050919050565b6000613df582613de0565b91507f80000000000000000000000000000000000000000000000000000000000000008203613e2757613e266134e0565b5b816000039050919050565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613e6860018361314d565b9150613e7382613e32565b600182019050919050565b6000613e8982613e5b565b9150613e958284613158565b915081905092915050565b7f3c7061746820643d220000000000000000000000000000000000000000000000600082015250565b6000613ed660098361314d565b9150613ee182613ea0565b600982019050919050565b6000613ef782613ec9565b9150613f0382846135c5565b915081905092915050565b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b6000613f4460098361314d565b9150613f4f82613f0e565b600982019050919050565b6000613f6582613f37565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b6000613fa560028361314d565b9150613fb082613f6f565b600282019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b6000613ff160058361314d565b9150613ffc82613fbb565b600582019050919050565b600061401282613f98565b915061401e82846135c5565b915061402982613fe4565b91508190509291505056fea26469706673582212201e5c9dcd2a7a22f79e93e01f80cdcbd7cfc7d340b836b023aa4058261442c1ad64736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/abis/MessageStoreV2___.json b/src/abis/MessageStoreV2___.json new file mode 100644 index 00000000..7ae2265d --- /dev/null +++ b/src/abis/MessageStoreV2___.json @@ -0,0 +1,206 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MessageStoreV2", + "sourceName": "contracts/imageParts/svgstore/MessageStoreV2.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "fonts", + "outputs": [ + { + "internalType": "contract IFontProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSVG", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSVGBody", + "outputs": [ + { + "internalType": "bytes", + "name": "output", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "w", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "h", + "type": "uint256" + } + ], + "internalType": "struct IMessageStoreV2.Box", + "name": "box", + "type": "tuple" + } + ], + "name": "getSVGMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + } + ], + "internalType": "struct IMessageStoreV2.Asset", + "name": "asset", + "type": "tuple" + } + ], + "name": "register", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "contract IFontProvider", + "name": "fontProvider", + "type": "address" + } + ], + "name": "registerFont", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "test", + "outputs": [ + { + "internalType": "string[]", + "name": "output", + "type": "string[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60806040526001805534801561001457600080fd5b506136e8806100246000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063be985ac91161005b578063be985ac914610139578063dec0314e14610169578063f80a64f514610199578063f9fbd554146101c957610088565b806307ca9b181461008d5780633882e980146100bd57806386f79edb146100ed578063945cfb9e1461011d575b600080fd5b6100a760048036038101906100a29190612215565b6101f9565b6040516100b49190612277565b60405180910390f35b6100d760048036038101906100d29190612292565b610339565b6040516100e4919061235a565b60405180910390f35b610107600480360381019061010291906123a1565b610382565b604051610114919061244d565b60405180910390f35b610137600480360381019061013291906124bf565b610569565b005b610153600480360381019061014e91906123a1565b6105ca565b604051610160919061244d565b60405180910390f35b610183600480360381019061017e91906123a1565b610684565b6040516101909190612570565b60405180910390f35b6101b360048036038101906101ae91906125e2565b610696565b6040516101c0919061244d565b60405180910390f35b6101e360048036038101906101de9190612292565b610757565b6040516101f091906127a9565b60405180910390f35b60008082604001519050600073ffffffffffffffffffffffffffffffffffffffff1660008260405161022b9190612807565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036102b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a79061286a565b60405180910390fd5b8260026000600154815260200190815260200160002060008201518160000190816102db9190612a8c565b5060208201518160010190816102f19190612a8c565b5060408201518160020190816103079190612a8c565b509050506001600081548092919061031e90612b8d565b9190505550600180546103319190612bd5565b915050919050565b6000818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000600260008481526020019081526020016000206040518060600160405290816000820180546103b4906128b9565b80601f01602080910402602001604051908101604052809291908181526020018280546103e0906128b9565b801561042d5780601f106104025761010080835404028352916020019161042d565b820191906000526020600020905b81548152906001019060200180831161041057829003601f168201915b50505050508152602001600182018054610446906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610472906128b9565b80156104bf5780601f10610494576101008083540402835291602001916104bf565b820191906000526020600020905b8154815290600101906020018083116104a257829003601f168201915b505050505081526020016002820180546104d8906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610504906128b9565b80156105515780601f1061052657610100808354040283529160200191610551565b820191906000526020600020905b81548152906001019060200180831161053457829003601f168201915b50505050508152505090508060000151915050919050565b8060008360405161057a9190612807565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060008067ffffffffffffffff8111156105e8576105e7612023565b5b60405190808252806020026020018201604052801561062157816020015b61060e611fa4565b8152602001906001900390816106065790505b50905061067c6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525061066e6106698461076b565b610789565b61067786610891565b610aac565b915050919050565b606061068f82610891565b9050919050565b60606000600167ffffffffffffffff8111156106b5576106b4612023565b5b6040519080825280602002602001820160405280156106ee57816020015b6106db611fa4565b8152602001906001900390816106d35790505b50905061074c6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525061073b6107368461076b565b610789565b61074789898989610b30565b610aac565b915050949350505050565b606061076482600a610eb4565b9050919050565b610773611fa4565b61077c82610f99565b8160200181905250919050565b60606000826000015151111561081b578160000151905060005b826040015151811015610815576000836040015182815181106107c9576107c8612c09565b5b6020026020010151905082816000015182602001516040516020016107f093929190612d0c565b604051602081830303815290604052925050808061080d90612b8d565b9150506107a3565b50610864565b600082604001515114610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085a90612d9f565b60405180910390fd5b5b80826020015160405160200161087b929190612dbf565b6040516020818303038152906040529050919050565b60606000600260008481526020019081526020016000206040518060600160405290816000820180546108c3906128b9565b80601f01602080910402602001604051908101604052809291908181526020018280546108ef906128b9565b801561093c5780601f106109115761010080835404028352916020019161093c565b820191906000526020600020905b81548152906001019060200180831161091f57829003601f168201915b50505050508152602001600182018054610955906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610981906128b9565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505081526020016002820180546109e7906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a13906128b9565b8015610a605780601f10610a3557610100808354040283529160200191610a60565b820191906000526020600020905b815481529060010190602001808311610a4357829003601f168201915b5050505050815250509050610a73611fc5565b610400816000018181525050610400816020018181525050610aa382600001518360200151846040015184610b30565b92505050919050565b6060600084604051602001610ac19190612ec7565b6040516020818303038152906040529050600084511115610b01578084604051602001610aef929190612f8c565b60405160208183030381529060405290505b8083604051602001610b14929190613012565b6040516020818303038152906040529050809150509392505050565b60606000610b3f86600a610eb4565b90506000815167ffffffffffffffff811115610b5e57610b5d612023565b5b604051908082528060200260200182016040528015610b9757816020015b610b84611fa4565b815260200190600190039081610b7c5790505b50905060008086604051610bab9190612807565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060048660000151610bef9190613041565b905060005b8451811015610d1c576000610c2384878481518110610c1657610c15612c09565b5b6020026020010151611060565b905082811115610c31578092505b610cea610cb86000848773ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190613098565b610cb39190613041565b6111c8565b610cdc86898681518110610ccf57610cce612c09565b5b6020026020010151611204565b6114fe90919063ffffffff16565b858381518110610cfd57610cfc612c09565b5b6020026020010181905250508080610d1490612b8d565b915050610bf4565b506000610ddb826103e88960000151610d359190613041565b610d3f91906130f4565b86518573ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db09190613098565b610dba9190613041565b6103e88a60200151610dcc9190613041565b610dd691906130f4565b611561565b90506000610e02610deb8361157a565b610df4876115ab565b6114fe90919063ffffffff16565b9050610e178a826115cb90919063ffffffff16565b90506000600167ffffffffffffffff811115610e3657610e35612023565b5b604051908082528060200260200182016040528015610e6f57816020015b610e5c611fa4565b815260200190600190039081610e545790505b5090508181600081518110610e8757610e86612c09565b5b6020026020010181905250610ea3610e9e8261076b565b610789565b975050505050505050949350505050565b6060600083519050600080600090505b828111610ef057610ed686828761162e565b905080915050600182610ee99190613125565b9150610ec4565b508067ffffffffffffffff811115610f0b57610f0a612023565b5b604051908082528060200260200182016040528015610f3e57816020015b6060815260200190600190039081610f295790505b5092506000905060005b828111610f9057610f5a86828761162e565b858481518110610f6d57610f6c612c09565b5b602002602001018193508290525050600182610f899190613125565b9150610f48565b50505092915050565b60606000825167ffffffffffffffff811115610fb857610fb7612023565b5b604051908082528060200260200182016040528015610feb57816020015b6060815260200190600190039081610fd65790505b50905060005b835181101561104e5761101d8482815181106110105761100f612c09565b5b6020026020010151610789565b8282815181106110305761102f612c09565b5b6020026020010181905250808061104690612b8d565b915050610ff1565b50611058816116e7565b915050919050565b6000808290506000600167ffffffffffffffff81111561108357611082612023565b5b6040519080825280601f01601f1916602001820160405280156110b55781602001600182028036833780820191505090505b50905060005b82518110156111bf578281815181106110d7576110d6612c09565b5b602001015160f81c60f81b826000815181106110f6576110f5612c09565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508573ffffffffffffffffffffffffffffffffffffffff16637f2406a7836040518263ffffffff1660e01b815260040161115e919061244d565b602060405180830381865afa15801561117b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119f9190613098565b846111aa9190613125565b935080806111b790612b8d565b9150506110bb565b50505092915050565b60606111d383611761565b6111dc83611761565b6040516020016111ed92919061323d565b604051602081830303815290604052905092915050565b61120c611fa4565b60008290506000600167ffffffffffffffff81111561122e5761122d612023565b5b6040519080825280601f01601f1916602001820160405280156112605781602001600182028036833780820191505090505b5090506000825167ffffffffffffffff8111156112805761127f612023565b5b6040519080825280602002602001820160405280156112b957816020015b6112a6611fa4565b81526020019060019003908161129e5790505b509050600080600090505b84518110156114e8578481815181106112e0576112df612c09565b5b602001015160f81c60f81b846000815181106112ff576112fe612c09565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506113bd6113b88973ffffffffffffffffffffffffffffffffffffffff1663a4b3eff4876040518263ffffffff1660e01b815260040161136d919061244d565b600060405180830381865afa15801561138a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113b39190613323565b6117b5565b61194e565b8382815181106113d0576113cf612c09565b5b6020026020010181905250600082111561144e5761142f8382815181106113fa576113f9612c09565b5b602002602001015161140b846119c1565b60405160200161141b91906133b8565b6040516020818303038152906040526114fe565b83828151811061144257611441612c09565b5b60200260200101819052505b8773ffffffffffffffffffffffffffffffffffffffff16637f2406a7856040518263ffffffff1660e01b8152600401611487919061244d565b602060405180830381865afa1580156114a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c89190613098565b826114d39190613125565b915080806114e090612b8d565b9150506112c4565b506114f2826115ab565b94505050505092915050565b611506611fa4565b6115598360405180604001604052806040518060400160405280600981526020017f7472616e73666f726d0000000000000000000000000000000000000000000000815250815260200185815250611a8f565b905092915050565b60008183106115705781611572565b825b905092915050565b606061158582611bb1565b6040516020016115959190613431565b6040516020818303038152906040529050919050565b6115b3611fa4565b6115c46115bf83610f99565b611df6565b9050919050565b6115d3611fa4565b6116268360405180604001604052806040518060400160405280600481526020017f66696c6c00000000000000000000000000000000000000000000000000000000815250815260200185815250611a8f565b905092915050565b6060600080600186516116419190613125565b905060405192506020830185602088010160008060008990505b858110156116a55760008203611684578351925082855260208401935060208501945061010091505b6008820391508860ff84841c160361169a578095505b60018101905061165b565b8096508981038960ff85851c16036116be576001810390505b8688036116cc576001810390505b8089528060208a010160405250505050505050935093915050565b60606000825190506040519150602082016020840160005b8381101561174c57815183815160005b81811015611732576020840193508351835260208301925060208101905061170f565b5080860195506020850194505050506001810190506116ff565b50602084830303845281604052505050919050565b6060600082131561177c57611775826119c1565b90506117b0565b61178e8261178990613468565b6119c1565b60405160200161179e91906134fc565b60405160208183030381529060405290505b919050565b6060806020830160036002855102046040519250602083016000805b8381101561193457600060108206036117ef57845191506018850194505b600080600283066000811461181b5760ff8560e81c169250600f8560f41c1691508460181b945061182b565b8460f81c9250600f8560f01c1691505b5080600081146119005760006002610100858560081b010361040081106000811461186457602d9350600392508161040003915061186c565b610400820391505b5060098111156118d65760638111156118bb576103e78111156118a05760318360081b1792508160010191506103e8810690505b606481046030018360081b1792508160010191506064810690505b600a81046030018360081b179250816001019150600a810690505b60208160300160081b8460101b171792508260088302610100031b89528189019850505050611926565b607b83106060841116605b841060408511161715611925578260f81b86526001860195505b5b5050506001810190506117d1565b506020858303038552816040525050505080915050919050565b611956611fa4565b81604051602001611967919061356a565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b6060600060016119d084611e51565b01905060008167ffffffffffffffff8111156119ef576119ee612023565b5b6040519080825280601f01601f191660200182016040528015611a215781602001600182028036833780820191505090505b509050600082602001820190505b600115611a84578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611a7857611a776130c5565b5b04945060008503611a2f575b819350505050919050565b611a97611fa4565b82600001518160000181905250826020015181602001819052506001836040015151611ac39190613125565b67ffffffffffffffff811115611adc57611adb612023565b5b604051908082528060200260200182016040528015611b1557816020015b611b02611fdf565b815260200190600190039081611afa5790505b50816040018190525060005b836040015151811015611b825783604001518181518110611b4557611b44612c09565b5b602002602001015182604001518281518110611b6457611b63612c09565b5b60200260200101819052508080611b7a90612b8d565b915050611b21565b5081816040015184604001515181518110611ba057611b9f612c09565b5b602002602001018190525092915050565b60606000600367ffffffffffffffff811115611bd057611bcf612023565b5b604051908082528060200260200182016040528015611c0357816020015b6060815260200190600190039081611bee5790505b5090506103e8831115611c4a57611c266103e884611c2191906130f4565b6119c1565b81600081518110611c3a57611c39612c09565b5b6020026020010181905250611ca0565b6040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081600081518110611c9457611c93612c09565b5b60200260200101819052505b600a831015611d03576040518060400160405280600381526020017f2e3030000000000000000000000000000000000000000000000000000000000081525081600181518110611cf357611cf2612c09565b5b6020026020010181905250611dbd565b6064831015611d66576040518060400160405280600281526020017f2e3000000000000000000000000000000000000000000000000000000000000081525081600181518110611d5657611d55612c09565b5b6020026020010181905250611dbc565b6040518060400160405280600181526020017f2e0000000000000000000000000000000000000000000000000000000000000081525081600181518110611db057611daf612c09565b5b60200260200101819052505b5b611dc6836119c1565b81600281518110611dda57611dd9612c09565b5b6020026020010181905250611dee816116e7565b915050919050565b611dfe611fa4565b604051602001611e0d906135d8565b604051602081830303815290604052816000018190525081604051602001611e359190613685565b6040516020818303038152906040528160200181905250919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611eaf577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611ea557611ea46130c5565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611eec576d04ee2d6d415b85acef81000000008381611ee257611ee16130c5565b5b0492506020810190505b662386f26fc100008310611f1b57662386f26fc100008381611f1157611f106130c5565b5b0492506010810190505b6305f5e1008310611f44576305f5e1008381611f3a57611f396130c5565b5b0492506008810190505b6127108310611f69576127108381611f5f57611f5e6130c5565b5b0492506004810190505b60648310611f8c5760648381611f8257611f816130c5565b5b0492506002810190505b600a8310611f9b576001810190505b80915050919050565b60405180606001604052806060815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61205b82612012565b810181811067ffffffffffffffff8211171561207a57612079612023565b5b80604052505050565b600061208d611ff9565b90506120998282612052565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156120c8576120c7612023565b5b6120d182612012565b9050602081019050919050565b82818337600083830152505050565b60006121006120fb846120ad565b612083565b90508281526020810184848401111561211c5761211b6120a8565b5b6121278482856120de565b509392505050565b600082601f830112612144576121436120a3565b5b81356121548482602086016120ed565b91505092915050565b6000606082840312156121735761217261200d565b5b61217d6060612083565b9050600082013567ffffffffffffffff81111561219d5761219c61209e565b5b6121a98482850161212f565b600083015250602082013567ffffffffffffffff8111156121cd576121cc61209e565b5b6121d98482850161212f565b602083015250604082013567ffffffffffffffff8111156121fd576121fc61209e565b5b6122098482850161212f565b60408301525092915050565b60006020828403121561222b5761222a612003565b5b600082013567ffffffffffffffff81111561224957612248612008565b5b6122558482850161215d565b91505092915050565b6000819050919050565b6122718161225e565b82525050565b600060208201905061228c6000830184612268565b92915050565b6000602082840312156122a8576122a7612003565b5b600082013567ffffffffffffffff8111156122c6576122c5612008565b5b6122d28482850161212f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061232061231b612316846122db565b6122fb565b6122db565b9050919050565b600061233282612305565b9050919050565b600061234482612327565b9050919050565b61235481612339565b82525050565b600060208201905061236f600083018461234b565b92915050565b61237e8161225e565b811461238957600080fd5b50565b60008135905061239b81612375565b92915050565b6000602082840312156123b7576123b6612003565b5b60006123c58482850161238c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124085780820151818401526020810190506123ed565b60008484015250505050565b600061241f826123ce565b61242981856123d9565b93506124398185602086016123ea565b61244281612012565b840191505092915050565b600060208201905081810360008301526124678184612414565b905092915050565b600061247a826122db565b9050919050565b600061248c8261246f565b9050919050565b61249c81612481565b81146124a757600080fd5b50565b6000813590506124b981612493565b92915050565b600080604083850312156124d6576124d5612003565b5b600083013567ffffffffffffffff8111156124f4576124f3612008565b5b6125008582860161212f565b9250506020612511858286016124aa565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60006125428261251b565b61254c8185612526565b935061255c8185602086016123ea565b61256581612012565b840191505092915050565b6000602082019050818103600083015261258a8184612537565b905092915050565b6000604082840312156125a8576125a761200d565b5b6125b26040612083565b905060006125c28482850161238c565b60008301525060206125d68482850161238c565b60208301525092915050565b60008060008060a085870312156125fc576125fb612003565b5b600085013567ffffffffffffffff81111561261a57612619612008565b5b6126268782880161212f565b945050602085013567ffffffffffffffff81111561264757612646612008565b5b6126538782880161212f565b935050604085013567ffffffffffffffff81111561267457612673612008565b5b6126808782880161212f565b925050606061269187828801612592565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006126e5826123ce565b6126ef81856126c9565b93506126ff8185602086016123ea565b61270881612012565b840191505092915050565b600061271f83836126da565b905092915050565b6000602082019050919050565b600061273f8261269d565b61274981856126a8565b93508360208202850161275b856126b9565b8060005b8581101561279757848403895281516127788582612713565b945061278383612727565b925060208a0199505060018101905061275f565b50829750879550505050505092915050565b600060208201905081810360008301526127c38184612734565b905092915050565b600081905092915050565b60006127e1826123ce565b6127eb81856127cb565b93506127fb8185602086016123ea565b80840191505092915050565b600061281382846127d6565b915081905092915050565b7f466f6e74206e6f74207265676973746572656400000000000000000000000000600082015250565b60006128546013836123d9565b915061285f8261281e565b602082019050919050565b6000602082019050818103600083015261288381612847565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128d157607f821691505b6020821081036128e4576128e361288a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261294c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261290f565b612956868361290f565b95508019841693508086168417925050509392505050565b600061298961298461297f8461225e565b6122fb565b61225e565b9050919050565b6000819050919050565b6129a38361296e565b6129b76129af82612990565b84845461291c565b825550505050565b600090565b6129cc6129bf565b6129d781848461299a565b505050565b5b818110156129fb576129f06000826129c4565b6001810190506129dd565b5050565b601f821115612a4057612a11816128ea565b612a1a846128ff565b81016020851015612a29578190505b612a3d612a35856128ff565b8301826129dc565b50505b505050565b600082821c905092915050565b6000612a6360001984600802612a45565b1980831691505092915050565b6000612a7c8383612a52565b9150826002028217905092915050565b612a95826123ce565b67ffffffffffffffff811115612aae57612aad612023565b5b612ab882546128b9565b612ac38282856129ff565b600060209050601f831160018114612af65760008415612ae4578287015190505b612aee8582612a70565b865550612b56565b601f198416612b04866128ea565b60005b82811015612b2c57848901518255600182019150602085019450602081019050612b07565b86831015612b495784890151612b45601f891682612a52565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b988261225e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bca57612bc9612b5e565b5b600182019050919050565b6000612be08261225e565b9150612beb8361225e565b9250828203905081811115612c0357612c02612b5e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b6000612c4e8261251b565b612c588185612c38565b9350612c688185602086016123ea565b80840191505092915050565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b6000612caa6002836127cb565b9150612cb582612c74565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b6000612cf66002836127cb565b9150612d0182612cc0565b600282019050919050565b6000612d188286612c43565b9150612d2382612c9d565b9150612d2f82856127d6565b9150612d3a82612ce9565b9150612d4682846127d6565b9150819050949350505050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b6000612d896012836123d9565b9150612d9482612d53565b602082019050919050565b60006020820190508181036000830152612db881612d7c565b9050919050565b6000612dcb8285612c43565b9150612dd78284612c43565b91508190509392505050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b6000612e3f6034836127cb565b9150612e4a82612de3565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b6000612eb16026836127cb565b9150612ebc82612e55565b602682019050919050565b6000612ed282612e32565b9150612ede82846127d6565b9150612ee982612ea4565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b6000612f2a6007836127cb565b9150612f3582612ef4565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b6000612f766008836127cb565b9150612f8182612f40565b600882019050919050565b6000612f988285612c43565b9150612fa382612f1d565b9150612faf8284612c43565b9150612fba82612f69565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b6000612ffc6007836127cb565b915061300782612fc6565b600782019050919050565b600061301e8285612c43565b915061302a8284612c43565b915061303582612fef565b91508190509392505050565b600061304c8261225e565b91506130578361225e565b92508282026130658161225e565b9150828204841483151761307c5761307b612b5e565b5b5092915050565b60008151905061309281612375565b92915050565b6000602082840312156130ae576130ad612003565b5b60006130bc84828501613083565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006130ff8261225e565b915061310a8361225e565b92508261311a576131196130c5565b5b828204905092915050565b60006131308261225e565b915061313b8361225e565b925082820190508082111561315357613152612b5e565b5b92915050565b7f7472616e736c6174652800000000000000000000000000000000000000000000600082015250565b600061318f600a836127cb565b915061319a82613159565b600a82019050919050565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b60006131db6001836127cb565b91506131e6826131a5565b600182019050919050565b7f2900000000000000000000000000000000000000000000000000000000000000600082015250565b60006132276001836127cb565b9150613232826131f1565b600182019050919050565b600061324882613182565b915061325482856127d6565b915061325f826131ce565b915061326b82846127d6565b91506132768261321a565b91508190509392505050565b600067ffffffffffffffff82111561329d5761329c612023565b5b6132a682612012565b9050602081019050919050565b60006132c66132c184613282565b612083565b9050828152602081018484840111156132e2576132e16120a8565b5b6132ed8482856123ea565b509392505050565b600082601f83011261330a576133096120a3565b5b815161331a8482602086016132b3565b91505092915050565b60006020828403121561333957613338612003565b5b600082015167ffffffffffffffff81111561335757613356612008565b5b613363848285016132f5565b91505092915050565b7f2030290000000000000000000000000000000000000000000000000000000000600082015250565b60006133a26003836127cb565b91506133ad8261336c565b600382019050919050565b60006133c382613182565b91506133cf82846127d6565b91506133da82613395565b915081905092915050565b7f7363616c65280000000000000000000000000000000000000000000000000000600082015250565b600061341b6006836127cb565b9150613426826133e5565b600682019050919050565b600061343c8261340e565b915061344882846127d6565b91506134538261321a565b915081905092915050565b6000819050919050565b60006134738261345e565b91507f800000000000000000000000000000000000000000000000000000000000000082036134a5576134a4612b5e565b5b816000039050919050565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006134e66001836127cb565b91506134f1826134b0565b600182019050919050565b6000613507826134d9565b915061351382846127d6565b915081905092915050565b7f3c7061746820643d220000000000000000000000000000000000000000000000600082015250565b60006135546009836127cb565b915061355f8261351e565b600982019050919050565b600061357582613547565b91506135818284612c43565b915081905092915050565b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b60006135c26009836127cb565b91506135cd8261358c565b600982019050919050565b60006135e3826135b5565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b60006136236002836127cb565b915061362e826135ed565b600282019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b600061366f6005836127cb565b915061367a82613639565b600582019050919050565b600061369082613616565b915061369c8284612c43565b91506136a782613662565b91508190509291505056fea2646970667358221220f269d6739e4c0eb70da81b6cbbd74a1310a8de4a3c4decc4cba97d1d57e69eb064736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063be985ac91161005b578063be985ac914610139578063dec0314e14610169578063f80a64f514610199578063f9fbd554146101c957610088565b806307ca9b181461008d5780633882e980146100bd57806386f79edb146100ed578063945cfb9e1461011d575b600080fd5b6100a760048036038101906100a29190612215565b6101f9565b6040516100b49190612277565b60405180910390f35b6100d760048036038101906100d29190612292565b610339565b6040516100e4919061235a565b60405180910390f35b610107600480360381019061010291906123a1565b610382565b604051610114919061244d565b60405180910390f35b610137600480360381019061013291906124bf565b610569565b005b610153600480360381019061014e91906123a1565b6105ca565b604051610160919061244d565b60405180910390f35b610183600480360381019061017e91906123a1565b610684565b6040516101909190612570565b60405180910390f35b6101b360048036038101906101ae91906125e2565b610696565b6040516101c0919061244d565b60405180910390f35b6101e360048036038101906101de9190612292565b610757565b6040516101f091906127a9565b60405180910390f35b60008082604001519050600073ffffffffffffffffffffffffffffffffffffffff1660008260405161022b9190612807565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036102b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a79061286a565b60405180910390fd5b8260026000600154815260200190815260200160002060008201518160000190816102db9190612a8c565b5060208201518160010190816102f19190612a8c565b5060408201518160020190816103079190612a8c565b509050506001600081548092919061031e90612b8d565b9190505550600180546103319190612bd5565b915050919050565b6000818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000600260008481526020019081526020016000206040518060600160405290816000820180546103b4906128b9565b80601f01602080910402602001604051908101604052809291908181526020018280546103e0906128b9565b801561042d5780601f106104025761010080835404028352916020019161042d565b820191906000526020600020905b81548152906001019060200180831161041057829003601f168201915b50505050508152602001600182018054610446906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610472906128b9565b80156104bf5780601f10610494576101008083540402835291602001916104bf565b820191906000526020600020905b8154815290600101906020018083116104a257829003601f168201915b505050505081526020016002820180546104d8906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610504906128b9565b80156105515780601f1061052657610100808354040283529160200191610551565b820191906000526020600020905b81548152906001019060200180831161053457829003601f168201915b50505050508152505090508060000151915050919050565b8060008360405161057a9190612807565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060008067ffffffffffffffff8111156105e8576105e7612023565b5b60405190808252806020026020018201604052801561062157816020015b61060e611fa4565b8152602001906001900390816106065790505b50905061067c6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525061066e6106698461076b565b610789565b61067786610891565b610aac565b915050919050565b606061068f82610891565b9050919050565b60606000600167ffffffffffffffff8111156106b5576106b4612023565b5b6040519080825280602002602001820160405280156106ee57816020015b6106db611fa4565b8152602001906001900390816106d35790505b50905061074c6040518060400160405280600d81526020017f302030203130323420313032340000000000000000000000000000000000000081525061073b6107368461076b565b610789565b61074789898989610b30565b610aac565b915050949350505050565b606061076482600a610eb4565b9050919050565b610773611fa4565b61077c82610f99565b8160200181905250919050565b60606000826000015151111561081b578160000151905060005b826040015151811015610815576000836040015182815181106107c9576107c8612c09565b5b6020026020010151905082816000015182602001516040516020016107f093929190612d0c565b604051602081830303815290604052925050808061080d90612b8d565b9150506107a3565b50610864565b600082604001515114610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085a90612d9f565b60405180910390fd5b5b80826020015160405160200161087b929190612dbf565b6040516020818303038152906040529050919050565b60606000600260008481526020019081526020016000206040518060600160405290816000820180546108c3906128b9565b80601f01602080910402602001604051908101604052809291908181526020018280546108ef906128b9565b801561093c5780601f106109115761010080835404028352916020019161093c565b820191906000526020600020905b81548152906001019060200180831161091f57829003601f168201915b50505050508152602001600182018054610955906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610981906128b9565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505081526020016002820180546109e7906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a13906128b9565b8015610a605780601f10610a3557610100808354040283529160200191610a60565b820191906000526020600020905b815481529060010190602001808311610a4357829003601f168201915b5050505050815250509050610a73611fc5565b610400816000018181525050610400816020018181525050610aa382600001518360200151846040015184610b30565b92505050919050565b6060600084604051602001610ac19190612ec7565b6040516020818303038152906040529050600084511115610b01578084604051602001610aef929190612f8c565b60405160208183030381529060405290505b8083604051602001610b14929190613012565b6040516020818303038152906040529050809150509392505050565b60606000610b3f86600a610eb4565b90506000815167ffffffffffffffff811115610b5e57610b5d612023565b5b604051908082528060200260200182016040528015610b9757816020015b610b84611fa4565b815260200190600190039081610b7c5790505b50905060008086604051610bab9190612807565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060048660000151610bef9190613041565b905060005b8451811015610d1c576000610c2384878481518110610c1657610c15612c09565b5b6020026020010151611060565b905082811115610c31578092505b610cea610cb86000848773ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190613098565b610cb39190613041565b6111c8565b610cdc86898681518110610ccf57610cce612c09565b5b6020026020010151611204565b6114fe90919063ffffffff16565b858381518110610cfd57610cfc612c09565b5b6020026020010181905250508080610d1490612b8d565b915050610bf4565b506000610ddb826103e88960000151610d359190613041565b610d3f91906130f4565b86518573ffffffffffffffffffffffffffffffffffffffff16630ef267436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db09190613098565b610dba9190613041565b6103e88a60200151610dcc9190613041565b610dd691906130f4565b611561565b90506000610e02610deb8361157a565b610df4876115ab565b6114fe90919063ffffffff16565b9050610e178a826115cb90919063ffffffff16565b90506000600167ffffffffffffffff811115610e3657610e35612023565b5b604051908082528060200260200182016040528015610e6f57816020015b610e5c611fa4565b815260200190600190039081610e545790505b5090508181600081518110610e8757610e86612c09565b5b6020026020010181905250610ea3610e9e8261076b565b610789565b975050505050505050949350505050565b6060600083519050600080600090505b828111610ef057610ed686828761162e565b905080915050600182610ee99190613125565b9150610ec4565b508067ffffffffffffffff811115610f0b57610f0a612023565b5b604051908082528060200260200182016040528015610f3e57816020015b6060815260200190600190039081610f295790505b5092506000905060005b828111610f9057610f5a86828761162e565b858481518110610f6d57610f6c612c09565b5b602002602001018193508290525050600182610f899190613125565b9150610f48565b50505092915050565b60606000825167ffffffffffffffff811115610fb857610fb7612023565b5b604051908082528060200260200182016040528015610feb57816020015b6060815260200190600190039081610fd65790505b50905060005b835181101561104e5761101d8482815181106110105761100f612c09565b5b6020026020010151610789565b8282815181106110305761102f612c09565b5b6020026020010181905250808061104690612b8d565b915050610ff1565b50611058816116e7565b915050919050565b6000808290506000600167ffffffffffffffff81111561108357611082612023565b5b6040519080825280601f01601f1916602001820160405280156110b55781602001600182028036833780820191505090505b50905060005b82518110156111bf578281815181106110d7576110d6612c09565b5b602001015160f81c60f81b826000815181106110f6576110f5612c09565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508573ffffffffffffffffffffffffffffffffffffffff16637f2406a7836040518263ffffffff1660e01b815260040161115e919061244d565b602060405180830381865afa15801561117b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119f9190613098565b846111aa9190613125565b935080806111b790612b8d565b9150506110bb565b50505092915050565b60606111d383611761565b6111dc83611761565b6040516020016111ed92919061323d565b604051602081830303815290604052905092915050565b61120c611fa4565b60008290506000600167ffffffffffffffff81111561122e5761122d612023565b5b6040519080825280601f01601f1916602001820160405280156112605781602001600182028036833780820191505090505b5090506000825167ffffffffffffffff8111156112805761127f612023565b5b6040519080825280602002602001820160405280156112b957816020015b6112a6611fa4565b81526020019060019003908161129e5790505b509050600080600090505b84518110156114e8578481815181106112e0576112df612c09565b5b602001015160f81c60f81b846000815181106112ff576112fe612c09565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506113bd6113b88973ffffffffffffffffffffffffffffffffffffffff1663a4b3eff4876040518263ffffffff1660e01b815260040161136d919061244d565b600060405180830381865afa15801561138a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113b39190613323565b6117b5565b61194e565b8382815181106113d0576113cf612c09565b5b6020026020010181905250600082111561144e5761142f8382815181106113fa576113f9612c09565b5b602002602001015161140b846119c1565b60405160200161141b91906133b8565b6040516020818303038152906040526114fe565b83828151811061144257611441612c09565b5b60200260200101819052505b8773ffffffffffffffffffffffffffffffffffffffff16637f2406a7856040518263ffffffff1660e01b8152600401611487919061244d565b602060405180830381865afa1580156114a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c89190613098565b826114d39190613125565b915080806114e090612b8d565b9150506112c4565b506114f2826115ab565b94505050505092915050565b611506611fa4565b6115598360405180604001604052806040518060400160405280600981526020017f7472616e73666f726d0000000000000000000000000000000000000000000000815250815260200185815250611a8f565b905092915050565b60008183106115705781611572565b825b905092915050565b606061158582611bb1565b6040516020016115959190613431565b6040516020818303038152906040529050919050565b6115b3611fa4565b6115c46115bf83610f99565b611df6565b9050919050565b6115d3611fa4565b6116268360405180604001604052806040518060400160405280600481526020017f66696c6c00000000000000000000000000000000000000000000000000000000815250815260200185815250611a8f565b905092915050565b6060600080600186516116419190613125565b905060405192506020830185602088010160008060008990505b858110156116a55760008203611684578351925082855260208401935060208501945061010091505b6008820391508860ff84841c160361169a578095505b60018101905061165b565b8096508981038960ff85851c16036116be576001810390505b8688036116cc576001810390505b8089528060208a010160405250505050505050935093915050565b60606000825190506040519150602082016020840160005b8381101561174c57815183815160005b81811015611732576020840193508351835260208301925060208101905061170f565b5080860195506020850194505050506001810190506116ff565b50602084830303845281604052505050919050565b6060600082131561177c57611775826119c1565b90506117b0565b61178e8261178990613468565b6119c1565b60405160200161179e91906134fc565b60405160208183030381529060405290505b919050565b6060806020830160036002855102046040519250602083016000805b8381101561193457600060108206036117ef57845191506018850194505b600080600283066000811461181b5760ff8560e81c169250600f8560f41c1691508460181b945061182b565b8460f81c9250600f8560f01c1691505b5080600081146119005760006002610100858560081b010361040081106000811461186457602d9350600392508161040003915061186c565b610400820391505b5060098111156118d65760638111156118bb576103e78111156118a05760318360081b1792508160010191506103e8810690505b606481046030018360081b1792508160010191506064810690505b600a81046030018360081b179250816001019150600a810690505b60208160300160081b8460101b171792508260088302610100031b89528189019850505050611926565b607b83106060841116605b841060408511161715611925578260f81b86526001860195505b5b5050506001810190506117d1565b506020858303038552816040525050505080915050919050565b611956611fa4565b81604051602001611967919061356a565b60405160208183030381529060405281600001819052506040518060400160405280600481526020017f222f3e0a000000000000000000000000000000000000000000000000000000008152508160200181905250919050565b6060600060016119d084611e51565b01905060008167ffffffffffffffff8111156119ef576119ee612023565b5b6040519080825280601f01601f191660200182016040528015611a215781602001600182028036833780820191505090505b509050600082602001820190505b600115611a84578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611a7857611a776130c5565b5b04945060008503611a2f575b819350505050919050565b611a97611fa4565b82600001518160000181905250826020015181602001819052506001836040015151611ac39190613125565b67ffffffffffffffff811115611adc57611adb612023565b5b604051908082528060200260200182016040528015611b1557816020015b611b02611fdf565b815260200190600190039081611afa5790505b50816040018190525060005b836040015151811015611b825783604001518181518110611b4557611b44612c09565b5b602002602001015182604001518281518110611b6457611b63612c09565b5b60200260200101819052508080611b7a90612b8d565b915050611b21565b5081816040015184604001515181518110611ba057611b9f612c09565b5b602002602001018190525092915050565b60606000600367ffffffffffffffff811115611bd057611bcf612023565b5b604051908082528060200260200182016040528015611c0357816020015b6060815260200190600190039081611bee5790505b5090506103e8831115611c4a57611c266103e884611c2191906130f4565b6119c1565b81600081518110611c3a57611c39612c09565b5b6020026020010181905250611ca0565b6040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081600081518110611c9457611c93612c09565b5b60200260200101819052505b600a831015611d03576040518060400160405280600381526020017f2e3030000000000000000000000000000000000000000000000000000000000081525081600181518110611cf357611cf2612c09565b5b6020026020010181905250611dbd565b6064831015611d66576040518060400160405280600281526020017f2e3000000000000000000000000000000000000000000000000000000000000081525081600181518110611d5657611d55612c09565b5b6020026020010181905250611dbc565b6040518060400160405280600181526020017f2e0000000000000000000000000000000000000000000000000000000000000081525081600181518110611db057611daf612c09565b5b60200260200101819052505b5b611dc6836119c1565b81600281518110611dda57611dd9612c09565b5b6020026020010181905250611dee816116e7565b915050919050565b611dfe611fa4565b604051602001611e0d906135d8565b604051602081830303815290604052816000018190525081604051602001611e359190613685565b6040516020818303038152906040528160200181905250919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611eaf577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611ea557611ea46130c5565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611eec576d04ee2d6d415b85acef81000000008381611ee257611ee16130c5565b5b0492506020810190505b662386f26fc100008310611f1b57662386f26fc100008381611f1157611f106130c5565b5b0492506010810190505b6305f5e1008310611f44576305f5e1008381611f3a57611f396130c5565b5b0492506008810190505b6127108310611f69576127108381611f5f57611f5e6130c5565b5b0492506004810190505b60648310611f8c5760648381611f8257611f816130c5565b5b0492506002810190505b600a8310611f9b576001810190505b80915050919050565b60405180606001604052806060815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61205b82612012565b810181811067ffffffffffffffff8211171561207a57612079612023565b5b80604052505050565b600061208d611ff9565b90506120998282612052565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156120c8576120c7612023565b5b6120d182612012565b9050602081019050919050565b82818337600083830152505050565b60006121006120fb846120ad565b612083565b90508281526020810184848401111561211c5761211b6120a8565b5b6121278482856120de565b509392505050565b600082601f830112612144576121436120a3565b5b81356121548482602086016120ed565b91505092915050565b6000606082840312156121735761217261200d565b5b61217d6060612083565b9050600082013567ffffffffffffffff81111561219d5761219c61209e565b5b6121a98482850161212f565b600083015250602082013567ffffffffffffffff8111156121cd576121cc61209e565b5b6121d98482850161212f565b602083015250604082013567ffffffffffffffff8111156121fd576121fc61209e565b5b6122098482850161212f565b60408301525092915050565b60006020828403121561222b5761222a612003565b5b600082013567ffffffffffffffff81111561224957612248612008565b5b6122558482850161215d565b91505092915050565b6000819050919050565b6122718161225e565b82525050565b600060208201905061228c6000830184612268565b92915050565b6000602082840312156122a8576122a7612003565b5b600082013567ffffffffffffffff8111156122c6576122c5612008565b5b6122d28482850161212f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061232061231b612316846122db565b6122fb565b6122db565b9050919050565b600061233282612305565b9050919050565b600061234482612327565b9050919050565b61235481612339565b82525050565b600060208201905061236f600083018461234b565b92915050565b61237e8161225e565b811461238957600080fd5b50565b60008135905061239b81612375565b92915050565b6000602082840312156123b7576123b6612003565b5b60006123c58482850161238c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124085780820151818401526020810190506123ed565b60008484015250505050565b600061241f826123ce565b61242981856123d9565b93506124398185602086016123ea565b61244281612012565b840191505092915050565b600060208201905081810360008301526124678184612414565b905092915050565b600061247a826122db565b9050919050565b600061248c8261246f565b9050919050565b61249c81612481565b81146124a757600080fd5b50565b6000813590506124b981612493565b92915050565b600080604083850312156124d6576124d5612003565b5b600083013567ffffffffffffffff8111156124f4576124f3612008565b5b6125008582860161212f565b9250506020612511858286016124aa565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60006125428261251b565b61254c8185612526565b935061255c8185602086016123ea565b61256581612012565b840191505092915050565b6000602082019050818103600083015261258a8184612537565b905092915050565b6000604082840312156125a8576125a761200d565b5b6125b26040612083565b905060006125c28482850161238c565b60008301525060206125d68482850161238c565b60208301525092915050565b60008060008060a085870312156125fc576125fb612003565b5b600085013567ffffffffffffffff81111561261a57612619612008565b5b6126268782880161212f565b945050602085013567ffffffffffffffff81111561264757612646612008565b5b6126538782880161212f565b935050604085013567ffffffffffffffff81111561267457612673612008565b5b6126808782880161212f565b925050606061269187828801612592565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006126e5826123ce565b6126ef81856126c9565b93506126ff8185602086016123ea565b61270881612012565b840191505092915050565b600061271f83836126da565b905092915050565b6000602082019050919050565b600061273f8261269d565b61274981856126a8565b93508360208202850161275b856126b9565b8060005b8581101561279757848403895281516127788582612713565b945061278383612727565b925060208a0199505060018101905061275f565b50829750879550505050505092915050565b600060208201905081810360008301526127c38184612734565b905092915050565b600081905092915050565b60006127e1826123ce565b6127eb81856127cb565b93506127fb8185602086016123ea565b80840191505092915050565b600061281382846127d6565b915081905092915050565b7f466f6e74206e6f74207265676973746572656400000000000000000000000000600082015250565b60006128546013836123d9565b915061285f8261281e565b602082019050919050565b6000602082019050818103600083015261288381612847565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128d157607f821691505b6020821081036128e4576128e361288a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261294c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261290f565b612956868361290f565b95508019841693508086168417925050509392505050565b600061298961298461297f8461225e565b6122fb565b61225e565b9050919050565b6000819050919050565b6129a38361296e565b6129b76129af82612990565b84845461291c565b825550505050565b600090565b6129cc6129bf565b6129d781848461299a565b505050565b5b818110156129fb576129f06000826129c4565b6001810190506129dd565b5050565b601f821115612a4057612a11816128ea565b612a1a846128ff565b81016020851015612a29578190505b612a3d612a35856128ff565b8301826129dc565b50505b505050565b600082821c905092915050565b6000612a6360001984600802612a45565b1980831691505092915050565b6000612a7c8383612a52565b9150826002028217905092915050565b612a95826123ce565b67ffffffffffffffff811115612aae57612aad612023565b5b612ab882546128b9565b612ac38282856129ff565b600060209050601f831160018114612af65760008415612ae4578287015190505b612aee8582612a70565b865550612b56565b601f198416612b04866128ea565b60005b82811015612b2c57848901518255600182019150602085019450602081019050612b07565b86831015612b495784890151612b45601f891682612a52565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b988261225e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bca57612bc9612b5e565b5b600182019050919050565b6000612be08261225e565b9150612beb8361225e565b9250828203905081811115612c0357612c02612b5e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b6000612c4e8261251b565b612c588185612c38565b9350612c688185602086016123ea565b80840191505092915050565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b6000612caa6002836127cb565b9150612cb582612c74565b600282019050919050565b7f3d22000000000000000000000000000000000000000000000000000000000000600082015250565b6000612cf66002836127cb565b9150612d0182612cc0565b600282019050919050565b6000612d188286612c43565b9150612d2382612c9d565b9150612d2f82856127d6565b9150612d3a82612ce9565b9150612d4682846127d6565b9150819050949350505050565b7f41747472696275746573206f6e206c6973740000000000000000000000000000600082015250565b6000612d896012836123d9565b9150612d9482612d53565b602082019050919050565b60006020820190508181036000830152612db881612d7c565b9050919050565b6000612dcb8285612c43565b9150612dd78284612c43565b91508190509392505050565b7f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555460008201527f462d38223f3e3c7376672076696577426f783d22000000000000000000000000602082015250565b6000612e3f6034836127cb565b9150612e4a82612de3565b603482019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667223e0a0000000000000000000000000000000000000000000000000000602082015250565b6000612eb16026836127cb565b9150612ebc82612e55565b602682019050919050565b6000612ed282612e32565b9150612ede82846127d6565b9150612ee982612ea4565b915081905092915050565b7f3c646566733e0a00000000000000000000000000000000000000000000000000600082015250565b6000612f2a6007836127cb565b9150612f3582612ef4565b600782019050919050565b7f3c2f646566733e0a000000000000000000000000000000000000000000000000600082015250565b6000612f766008836127cb565b9150612f8182612f40565b600882019050919050565b6000612f988285612c43565b9150612fa382612f1d565b9150612faf8284612c43565b9150612fba82612f69565b91508190509392505050565b7f3c2f7376673e0a00000000000000000000000000000000000000000000000000600082015250565b6000612ffc6007836127cb565b915061300782612fc6565b600782019050919050565b600061301e8285612c43565b915061302a8284612c43565b915061303582612fef565b91508190509392505050565b600061304c8261225e565b91506130578361225e565b92508282026130658161225e565b9150828204841483151761307c5761307b612b5e565b5b5092915050565b60008151905061309281612375565b92915050565b6000602082840312156130ae576130ad612003565b5b60006130bc84828501613083565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006130ff8261225e565b915061310a8361225e565b92508261311a576131196130c5565b5b828204905092915050565b60006131308261225e565b915061313b8361225e565b925082820190508082111561315357613152612b5e565b5b92915050565b7f7472616e736c6174652800000000000000000000000000000000000000000000600082015250565b600061318f600a836127cb565b915061319a82613159565b600a82019050919050565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b60006131db6001836127cb565b91506131e6826131a5565b600182019050919050565b7f2900000000000000000000000000000000000000000000000000000000000000600082015250565b60006132276001836127cb565b9150613232826131f1565b600182019050919050565b600061324882613182565b915061325482856127d6565b915061325f826131ce565b915061326b82846127d6565b91506132768261321a565b91508190509392505050565b600067ffffffffffffffff82111561329d5761329c612023565b5b6132a682612012565b9050602081019050919050565b60006132c66132c184613282565b612083565b9050828152602081018484840111156132e2576132e16120a8565b5b6132ed8482856123ea565b509392505050565b600082601f83011261330a576133096120a3565b5b815161331a8482602086016132b3565b91505092915050565b60006020828403121561333957613338612003565b5b600082015167ffffffffffffffff81111561335757613356612008565b5b613363848285016132f5565b91505092915050565b7f2030290000000000000000000000000000000000000000000000000000000000600082015250565b60006133a26003836127cb565b91506133ad8261336c565b600382019050919050565b60006133c382613182565b91506133cf82846127d6565b91506133da82613395565b915081905092915050565b7f7363616c65280000000000000000000000000000000000000000000000000000600082015250565b600061341b6006836127cb565b9150613426826133e5565b600682019050919050565b600061343c8261340e565b915061344882846127d6565b91506134538261321a565b915081905092915050565b6000819050919050565b60006134738261345e565b91507f800000000000000000000000000000000000000000000000000000000000000082036134a5576134a4612b5e565b5b816000039050919050565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006134e66001836127cb565b91506134f1826134b0565b600182019050919050565b6000613507826134d9565b915061351382846127d6565b915081905092915050565b7f3c7061746820643d220000000000000000000000000000000000000000000000600082015250565b60006135546009836127cb565b915061355f8261351e565b600982019050919050565b600061357582613547565b91506135818284612c43565b915081905092915050565b7f3c6720785f783d22780000000000000000000000000000000000000000000000600082015250565b60006135c26009836127cb565b91506135cd8261358c565b600982019050919050565b60006135e3826135b5565b9150819050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b60006136236002836127cb565b915061362e826135ed565b600282019050919050565b7f3c2f673e0a000000000000000000000000000000000000000000000000000000600082015250565b600061366f6005836127cb565b915061367a82613639565b600582019050919050565b600061369082613616565b915061369c8284612c43565b91506136a782613662565b91508190509291505056fea2646970667358221220f269d6739e4c0eb70da81b6cbbd74a1310a8de4a3c4decc4cba97d1d57e69eb064736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/abis/MessageTokenV2.json b/src/abis/MessageTokenV2.json new file mode 100644 index 00000000..cbd6d47c --- /dev/null +++ b/src/abis/MessageTokenV2.json @@ -0,0 +1,937 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MessageTokenV2", + "sourceName": "contracts/MessageTokenV2.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IAssetProvider", + "name": "_assetProvider", + "type": "address" + }, + { + "internalType": "contract IMessageStoreV2", + "name": "_messageStore", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ApprovalCallerNotOwnerNorApproved", + "type": "error" + }, + { + "inputs": [], + "name": "ApprovalQueryForNonexistentToken", + "type": "error" + }, + { + "inputs": [], + "name": "BalanceQueryForZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "MintERC2309QuantityExceedsLimit", + "type": "error" + }, + { + "inputs": [], + "name": "MintToZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "MintZeroQuantity", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "OperatorNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "OwnerQueryForNonexistentToken", + "type": "error" + }, + { + "inputs": [], + "name": "OwnershipNotInitializedForExtraData", + "type": "error" + }, + { + "inputs": [], + "name": "TransferCallerNotOwnerNorApproved", + "type": "error" + }, + { + "inputs": [], + "name": "TransferFromIncorrectOwner", + "type": "error" + }, + { + "inputs": [], + "name": "TransferToNonERC721ReceiverImplementer", + "type": "error" + }, + { + "inputs": [], + "name": "TransferToZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "URIQueryForNonexistentToken", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "fromTokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toTokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "ConsecutiveTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "SetPrice", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "OPERATOR_FILTER_REGISTRY", + "outputs": [ + { + "internalType": "contract IOperatorFilterRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "contract IERC721Marketplace", + "name": "_dealer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "acceptOffer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "assetProvider", + "outputs": [ + { + "internalType": "contract IAssetProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "debugTokenURI", + "outputs": [ + { + "internalType": "string", + "name": "uri", + "type": "string" + }, + { + "internalType": "uint256", + "name": "gas", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "description", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getAsset", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "internalType": "struct IMessageStoreV2.Asset", + "name": "output", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getAssetId", + "outputs": [ + { + "internalType": "uint256", + "name": "output", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLatestMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getMessage", + "outputs": [ + { + "internalType": "string", + "name": "output", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getPriceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "mintLimit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mintPriceFor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "string", + "name": "color", + "type": "string" + }, + { + "internalType": "string", + "name": "fontName", + "type": "string" + }, + { + "internalType": "string", + "name": "assetName", + "type": "string" + } + ], + "internalType": "struct IMessageStoreV2.Asset", + "name": "asset", + "type": "tuple" + } + ], + "name": "mintWithAsset", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_buyer", + "type": "address" + }, + { + "internalType": "address", + "name": "_facilitator", + "type": "address" + } + ], + "name": "purchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IAssetProvider", + "name": "_assetProvider", + "type": "address" + } + ], + "name": "setAssetProvider", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_description", + "type": "string" + } + ], + "name": "setDescription", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_limit", + "type": "uint256" + } + ], + "name": "setMintLimit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "setMintPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "setPriceOf", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a06040523480156200001157600080fd5b506040516200596d3803806200596d833981810160405281019062000037919062000589565b816040518060400160405280600c81526020017f4d657373616765546f6b656e00000000000000000000000000000000000000008152506040518060400160405280600c81526020017f4d657373616765546f6b656e0000000000000000000000000000000000000000815250733cc6cdda760b79bafa08df41ecfa224f810dceb6600183838160029081620000ce91906200084a565b508060039081620000e091906200084a565b50620000f1620003f360201b60201c565b600081905550505060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620002ee578015620001b4576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200017a92919062000942565b600060405180830381600087803b1580156200019557600080fd5b505af1158015620001aa573d6000803e3d6000fd5b50505050620002ed565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200026e576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200023492919062000942565b600060405180830381600087803b1580156200024f57600080fd5b505af115801562000264573d6000803e3d6000fd5b50505050620002ec565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620002b791906200096f565b600060405180830381600087803b158015620002d257600080fd5b505af1158015620002e7573d6000803e3d6000fd5b505050505b5b5b50506200031062000304620003f860201b60201c565b6200040060201b60201c565b82600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506040518060400160405280600c81526020017f4d657373616765546f6b656e0000000000000000000000000000000000000000815250600a90816200039a91906200084a565b508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505074446c3b15f9926687d2c40534fdb564000000000000600c8190555050506200098c565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004f882620004cb565b9050919050565b60006200050c82620004eb565b9050919050565b6200051e81620004ff565b81146200052a57600080fd5b50565b6000815190506200053e8162000513565b92915050565b60006200055182620004eb565b9050919050565b620005638162000544565b81146200056f57600080fd5b50565b600081519050620005838162000558565b92915050565b60008060408385031215620005a357620005a2620004c6565b5b6000620005b3858286016200052d565b9250506020620005c68582860162000572565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200065257607f821691505b6020821081036200066857620006676200060a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006d27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000693565b620006de868362000693565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200072b620007256200071f84620006f6565b62000700565b620006f6565b9050919050565b6000819050919050565b62000747836200070a565b6200075f620007568262000732565b848454620006a0565b825550505050565b600090565b6200077662000767565b620007838184846200073c565b505050565b5b81811015620007ab576200079f6000826200076c565b60018101905062000789565b5050565b601f821115620007fa57620007c4816200066e565b620007cf8462000683565b81016020851015620007df578190505b620007f7620007ee8562000683565b83018262000788565b50505b505050565b600082821c905092915050565b60006200081f60001984600802620007ff565b1980831691505092915050565b60006200083a83836200080c565b9150826002028217905092915050565b6200085582620005d0565b67ffffffffffffffff811115620008715762000870620005db565b5b6200087d825462000639565b6200088a828285620007af565b600060209050601f831160018114620008c25760008415620008ad578287015190505b620008b985826200082c565b86555062000929565b601f198416620008d2866200066e565b60005b82811015620008fc57848901518255600182019150602085019450602081019050620008d5565b868310156200091c578489015162000918601f8916826200080c565b8355505b6001600288020188555050505b505050505050565b6200093c81620004eb565b82525050565b600060408201905062000959600083018562000931565b62000968602083018462000931565b9392505050565b600060208201905062000986600083018462000931565b92915050565b608051614fb0620009bd6000396000818161118d01528181611255015281816119060152611ae80152614fb06000f3fe6080604052600436106102255760003560e01c80638da5cb5b11610123578063b54b4fb9116100ab578063eac8f5b81161006f578063eac8f5b814610818578063f2fde38b14610855578063f4a0a5281461087e578063fba49e4f146108a7578063fdd2732e146108d057610225565b8063b54b4fb914610707578063b88d4fde14610744578063c87b56dd14610760578063cc44ab411461079d578063e985e9c5146107db57610225565b8063996517cf116100f2578063996517cf146106365780639e6a1d7d14610661578063a22cb4651461068a578063a370f7d7146106b3578063b212cfc7146106de57610225565b80638da5cb5b1461058e57806390c3f38f146105b95780639589d7b9146105e257806395d89b411461060b57610225565b806341f43434116101b157806370a082311161017557806370a0823114610495578063715018a6146104d25780637284e416146104e957806373a56e6c1461051457806386f79edb1461055157610225565b806341f43434146103a957806342842e0e146103d457806361f547fd146103f05780636352211e1461042d5780636817c76c1461046a57610225565b80631249c58b116101f85780631249c58b146102eb5780631346d8ea1461030957806318160ddd1461034657806323b872dd146103715780633b7f8f151461038d57610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613355565b6108fb565b60405161025e919061339d565b60405180910390f35b34801561027357600080fd5b5061027c610975565b6040516102899190613448565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906134a0565b610a07565b6040516102c6919061350e565b60405180910390f35b6102e960048036038101906102e49190613555565b610a86565b005b6102f3610b90565b60405161030091906135a4565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b91906135bf565b610bd5565b60405161033d91906135a4565b60405180910390f35b34801561035257600080fd5b5061035b610be1565b60405161036891906135a4565b60405180910390f35b61038b600480360381019061038691906135ec565b610bf0565b005b6103a760048036038101906103a2919061363f565b610d40565b005b3480156103b557600080fd5b506103be610e97565b6040516103cb91906136f1565b60405180910390f35b6103ee60048036038101906103e991906135ec565b610ea9565b005b3480156103fc57600080fd5b50610417600480360381019061041291906134a0565b610ff9565b60405161042491906135a4565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f91906134a0565b611016565b604051610461919061350e565b60405180910390f35b34801561047657600080fd5b5061047f611028565b60405161048c91906135a4565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b791906135bf565b61102e565b6040516104c991906135a4565b60405180910390f35b3480156104de57600080fd5b506104e76110e6565b005b3480156104f557600080fd5b506104fe6110fa565b60405161050b9190613448565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613933565b611188565b60405161054891906135a4565b60405180910390f35b34801561055d57600080fd5b50610578600480360381019061057391906134a0565b611251565b6040516105859190613448565b60405180910390f35b34801561059a57600080fd5b506105a361130c565b6040516105b0919061350e565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061397c565b611336565b005b3480156105ee57600080fd5b5061060960048036038101906106049190613a03565b611351565b005b34801561061757600080fd5b506106206113cf565b60405161062d9190613448565b60405180910390f35b34801561064257600080fd5b5061064b611461565b60405161065891906135a4565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906134a0565b611467565b005b34801561069657600080fd5b506106b160048036038101906106ac9190613a82565b611479565b005b3480156106bf57600080fd5b506106c8611583565b6040516106d59190613ae3565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190613b3c565b6115a9565b005b34801561071357600080fd5b5061072e600480360381019061072991906134a0565b6115f5565b60405161073b91906135a4565b60405180910390f35b61075e60048036038101906107599190613c0a565b611612565b005b34801561076c57600080fd5b50610787600480360381019061078291906134a0565b611765565b6040516107949190613448565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf91906134a0565b611843565b6040516107d2929190613c8d565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190613cbd565b611868565b60405161080f919061339d565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a91906134a0565b6118fc565b60405161084c9190613dbf565b60405180910390f35b34801561086157600080fd5b5061087c600480360381019061087791906135bf565b6119bd565b005b34801561088a57600080fd5b506108a560048036038101906108a091906134a0565b611a40565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613de1565b611a52565b005b3480156108dc57600080fd5b506108e5611ae4565b6040516108f29190613448565b60405180910390f35b60007fe019895a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096e575061096d82611bb0565b5b9050919050565b60606002805461098490613e50565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090613e50565b80156109fd5780601f106109d2576101008083540402835291602001916109fd565b820191906000526020600020905b8154815290600101906020018083116109e057829003601f168201915b5050505050905090565b6000610a1282611c42565b610a48576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610b81576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610afe929190613e81565b602060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f9190613ebf565b610b8057806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610b77919061350e565b60405180910390fd5b5b610b8b8383611ca1565b505050565b600080610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613f38565b60405180910390fd5b90565b6000600b549050919050565b6000610beb611de5565b905090565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d2e573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c6257610c5d848484611dee565b610d3a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cab929190613e81565b602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190613ebf565b610d2d57336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d24919061350e565b60405180910390fd5b5b610d39848484611dee565b5b50505050565b60006009600085815260200190815260200160002054905060008111610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613fa4565b60405180910390fd5b80341015610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590614010565b60405180910390fd5b6000610dea3484612110565b90506000610df834876121b5565b90506000610e0587611016565b905060008190508073ffffffffffffffffffffffffffffffffffffffff166108fc848634610e33919061405f565b610e3d919061405f565b9081150290604051600060405180830381858888f19350505050158015610e68573d6000803e3d6000fd5b506000600960008a815260200190815260200160002081905550610e8d82888a6121bd565b5050505050505050565b6daaeb6d7670e522a718067333cd4e81565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fe7573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f1b57610f16848484612481565b610ff3565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f64929190613e81565b602060405180830381865afa158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190613ebf565b610fe657336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fdd919061350e565b60405180910390fd5b5b610ff2848484612481565b5b50505050565b6000600e6000838152602001908152602001600020549050919050565b6000611021826124a1565b9050919050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611095576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6110ee61256d565b6110f860006125eb565b565b600a805461110790613e50565b80601f016020809104026020016040519081016040528092919081815260200182805461113390613e50565b80156111805780601f1061115557610100808354040283529160200191611180565b820191906000526020600020905b81548152906001019060200180831161116357829003601f168201915b505050505081565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634e2849c6846040518263ffffffff1660e01b81526004016111e49190613dbf565b6020604051808303816000875af1158015611203573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122791906140a8565b90506112316126b1565b915080600e60008481526020019081526020016000208190555050919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166386f79edb600e6000858152602001908152602001600020546040518263ffffffff1660e01b81526004016112bf91906135a4565b600060405180830381865afa1580156112dc573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113059190614145565b9050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61133e61256d565b80600a908161134d9190614330565b5050565b61135b8382611a52565b8173ffffffffffffffffffffffffffffffffffffffff16633c6fc8173085846040518463ffffffff1660e01b815260040161139893929190614423565b600060405180830381600087803b1580156113b257600080fd5b505af11580156113c6573d6000803e3d6000fd5b50505050505050565b6060600380546113de90613e50565b80601f016020809104026020016040519081016040528092919081815260200182805461140a90613e50565b80156114575780601f1061142c57610100808354040283529160200191611457565b820191906000526020600020905b81548152906001019060200180831161143a57829003601f168201915b5050505050905090565b600c5481565b61146f61256d565b80600c8190555050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611574576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016114f1929190613e81565b602060405180830381865afa15801561150e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115329190613ebf565b61157357806040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161156a919061350e565b60405180910390fd5b5b61157e8383612722565b505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115b161256d565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060096000838152602001908152602001600020549050919050565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611751573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611685576116808585858561282d565b61175e565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016116ce929190613e81565b602060405180830381865afa1580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f9190613ebf565b61175057336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611747919061350e565b60405180910390fd5b5b61175d8585858561282d565b5b5050505050565b60606000600e600084815260200190815260200160002054905061178883611c42565b6117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be906144cc565b60405180910390fd5b60006117d2826128a0565b905061181b6117e08561298f565b600a6117eb856129c0565b6117f485612a6a565b6040516020016118079493929190614794565b604051602081830303815290604052612a6a565b60405160200161182b9190614855565b60405160208183030381529060405292505050919050565b606060005a905061185383611765565b91505a81611861919061405f565b9050915091565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119046132c1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663eac8f5b8600e6000858152602001908152602001600020546040518263ffffffff1660e01b815260040161197091906135a4565b600060405180830381865afa15801561198d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906119b6919061495f565b9050919050565b6119c561256d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90614a1a565b60405180910390fd5b611a3d816125eb565b50565b611a4861256d565b80600b8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16611a7283611016565b73ffffffffffffffffffffffffffffffffffffffff1614611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90614a86565b60405180910390fd5b8060096000848152602001908152602001600020819055505050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166386f79edb600e60006001611b30611de5565b611b3a919061405f565b8152602001908152602001600020546040518263ffffffff1660e01b8152600401611b6591906135a4565b600060405180830381865afa158015611b82573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bab9190614145565b905090565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c0b57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c3b5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600081611c4d612be2565b11158015611c5c575060005482105b8015611c9a575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b6000611cac82611016565b90508073ffffffffffffffffffffffffffffffffffffffff16611ccd612be7565b73ffffffffffffffffffffffffffffffffffffffff1614611d3057611cf981611cf4612be7565b611868565b611d2f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60008054905090565b6000611df9826124a1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e60576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611e6c84612bef565b91509150611e828187611e7d612be7565b612c16565b611ece57611e9786611e92612be7565b611868565b611ecd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f34576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f418686866001612c5a565b8015611f4c57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061201a85611ff6888887612c60565b7c020000000000000000000000000000000000000000000000000000000017612c88565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036120a0576000600185019050600060046000838152602001908152602001600020540361209e57600054811461209d578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121088686866001612cb3565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121af576103e86019846121559190614aa6565b61215f9190614b17565b905060008290508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156121ac573d6000803e3d6000fd5b50505b92915050565b600092915050565b60006121c8826124a1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461222f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061223b84612bef565b91509150600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122a5576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122b28686866001612c5a565b80156122bd57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061238b85612367888887612c60565b7c020000000000000000000000000000000000000000000000000000000017612c88565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603612411576000600185019050600060046000838152602001908152602001600020540361240f57600054811461240e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124798686866001612cb3565b505050505050565b61249c83838360405180602001604052806000815250611612565b505050565b600080829050806124b0612be2565b11612536576000548110156125355760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612533575b600081036125295760046000836001900393508381526020019081526020016000205490506124ff565b8092505050612568565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b612575612cb9565b73ffffffffffffffffffffffffffffffffffffffff1661259361130c565b73ffffffffffffffffffffffffffffffffffffffff16146125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e090614b94565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600c546126be611de5565b106126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f590614c00565b60405180910390fd5b612709336001612cc1565b6001612713611de5565b61271d919061405f565b905090565b806007600061272f612be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166127dc612be7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612821919061339d565b60405180910390a35050565b612838848484610bf0565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461289a5761286384848484612cdf565b612899576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3f24f02856040518263ffffffff1660e01b815260040161290091906135a4565b600060405180830381865afa15801561291d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906129469190614c20565b91509150604051806080016040528060498152602001614f3260499139828260405160200161297793929190614d30565b60405160208183030381529060405292505050919050565b606061299a82612e2f565b6040516020016129aa9190614dc3565b6040516020818303038152906040529050919050565b6060600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379b92f27836040518263ffffffff1660e01b8152600401612a1d91906135a4565b600060405180830381865afa158015612a3a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612a639190614145565b9050919050565b60606000825103612a8c57604051806020016040528060008152509050612bdd565b6000604051806060016040528060408152602001614ef26040913990506000600360028551612abb9190614de5565b612ac59190614b17565b6004612ad19190614aa6565b90506000602082612ae29190614de5565b67ffffffffffffffff811115612afb57612afa613711565b5b6040519080825280601f01601f191660200182016040528015612b2d5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612b9c576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050612b41565b600389510660018114612bb65760028114612bc657612bd1565b613d3d60f01b6002830352612bd1565b603d60f81b60018303525b50505050508093505050505b919050565b600090565b600033905090565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612c77868684612efd565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b612cdb828260405180602001604052806000815250612f06565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d05612be7565b8786866040518563ffffffff1660e01b8152600401612d279493929190614e63565b6020604051808303816000875af1925050508015612d6357506040513d601f19601f82011682018060405250810190612d609190614ec4565b60015b612ddc573d8060008114612d93576040519150601f19603f3d011682016040523d82523d6000602084013e612d98565b606091505b506000815103612dd4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060006001612e3e84612fa3565b01905060008167ffffffffffffffff811115612e5d57612e5c613711565b5b6040519080825280601f01601f191660200182016040528015612e8f5781602001600182028036833780820191505090505b509050600082602001820190505b600115612ef2578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612ee657612ee5614ae8565b5b04945060008503612e9d575b819350505050919050565b60009392505050565b612f1083836130f6565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612f9e57600080549050600083820390505b612f506000868380600101945086612cdf565b612f86576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612f3d578160005414612f9b57600080fd5b50505b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613001577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612ff757612ff6614ae8565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061303e576d04ee2d6d415b85acef8100000000838161303457613033614ae8565b5b0492506020810190505b662386f26fc10000831061306d57662386f26fc10000838161306357613062614ae8565b5b0492506010810190505b6305f5e1008310613096576305f5e100838161308c5761308b614ae8565b5b0492506008810190505b61271083106130bb5761271083816130b1576130b0614ae8565b5b0492506004810190505b606483106130de57606483816130d4576130d3614ae8565b5b0492506002810190505b600a83106130ed576001810190505b80915050919050565b60008054905060008203613136576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131436000848385612c5a565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506131ba836131ab6000866000612c60565b6131b4856132b1565b17612c88565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461325b57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050613220565b5060008203613296576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506132ac6000848385612cb3565b505050565b60006001821460e11b9050919050565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613332816132fd565b811461333d57600080fd5b50565b60008135905061334f81613329565b92915050565b60006020828403121561336b5761336a6132f3565b5b600061337984828501613340565b91505092915050565b60008115159050919050565b61339781613382565b82525050565b60006020820190506133b2600083018461338e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133f25780820151818401526020810190506133d7565b60008484015250505050565b6000601f19601f8301169050919050565b600061341a826133b8565b61342481856133c3565b93506134348185602086016133d4565b61343d816133fe565b840191505092915050565b60006020820190508181036000830152613462818461340f565b905092915050565b6000819050919050565b61347d8161346a565b811461348857600080fd5b50565b60008135905061349a81613474565b92915050565b6000602082840312156134b6576134b56132f3565b5b60006134c48482850161348b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134f8826134cd565b9050919050565b613508816134ed565b82525050565b600060208201905061352360008301846134ff565b92915050565b613532816134ed565b811461353d57600080fd5b50565b60008135905061354f81613529565b92915050565b6000806040838503121561356c5761356b6132f3565b5b600061357a85828601613540565b925050602061358b8582860161348b565b9150509250929050565b61359e8161346a565b82525050565b60006020820190506135b96000830184613595565b92915050565b6000602082840312156135d5576135d46132f3565b5b60006135e384828501613540565b91505092915050565b600080600060608486031215613605576136046132f3565b5b600061361386828701613540565b935050602061362486828701613540565b92505060406136358682870161348b565b9150509250925092565b600080600060608486031215613658576136576132f3565b5b60006136668682870161348b565b935050602061367786828701613540565b925050604061368886828701613540565b9150509250925092565b6000819050919050565b60006136b76136b26136ad846134cd565b613692565b6134cd565b9050919050565b60006136c98261369c565b9050919050565b60006136db826136be565b9050919050565b6136eb816136d0565b82525050565b600060208201905061370660008301846136e2565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613749826133fe565b810181811067ffffffffffffffff8211171561376857613767613711565b5b80604052505050565b600061377b6132e9565b90506137878282613740565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156137b6576137b5613711565b5b6137bf826133fe565b9050602081019050919050565b82818337600083830152505050565b60006137ee6137e98461379b565b613771565b90508281526020810184848401111561380a57613809613796565b5b6138158482856137cc565b509392505050565b600082601f83011261383257613831613791565b5b81356138428482602086016137db565b91505092915050565b6000608082840312156138615761386061370c565b5b61386b6080613771565b9050600082013567ffffffffffffffff81111561388b5761388a61378c565b5b6138978482850161381d565b600083015250602082013567ffffffffffffffff8111156138bb576138ba61378c565b5b6138c78482850161381d565b602083015250604082013567ffffffffffffffff8111156138eb576138ea61378c565b5b6138f78482850161381d565b604083015250606082013567ffffffffffffffff81111561391b5761391a61378c565b5b6139278482850161381d565b60608301525092915050565b600060208284031215613949576139486132f3565b5b600082013567ffffffffffffffff811115613967576139666132f8565b5b6139738482850161384b565b91505092915050565b600060208284031215613992576139916132f3565b5b600082013567ffffffffffffffff8111156139b0576139af6132f8565b5b6139bc8482850161381d565b91505092915050565b60006139d0826134ed565b9050919050565b6139e0816139c5565b81146139eb57600080fd5b50565b6000813590506139fd816139d7565b92915050565b600080600060608486031215613a1c57613a1b6132f3565b5b6000613a2a8682870161348b565b9350506020613a3b868287016139ee565b9250506040613a4c8682870161348b565b9150509250925092565b613a5f81613382565b8114613a6a57600080fd5b50565b600081359050613a7c81613a56565b92915050565b60008060408385031215613a9957613a986132f3565b5b6000613aa785828601613540565b9250506020613ab885828601613a6d565b9150509250929050565b6000613acd826136be565b9050919050565b613add81613ac2565b82525050565b6000602082019050613af86000830184613ad4565b92915050565b6000613b09826134ed565b9050919050565b613b1981613afe565b8114613b2457600080fd5b50565b600081359050613b3681613b10565b92915050565b600060208284031215613b5257613b516132f3565b5b6000613b6084828501613b27565b91505092915050565b600067ffffffffffffffff821115613b8457613b83613711565b5b613b8d826133fe565b9050602081019050919050565b6000613bad613ba884613b69565b613771565b905082815260208101848484011115613bc957613bc8613796565b5b613bd48482856137cc565b509392505050565b600082601f830112613bf157613bf0613791565b5b8135613c01848260208601613b9a565b91505092915050565b60008060008060808587031215613c2457613c236132f3565b5b6000613c3287828801613540565b9450506020613c4387828801613540565b9350506040613c548782880161348b565b925050606085013567ffffffffffffffff811115613c7557613c746132f8565b5b613c8187828801613bdc565b91505092959194509250565b60006040820190508181036000830152613ca7818561340f565b9050613cb66020830184613595565b9392505050565b60008060408385031215613cd457613cd36132f3565b5b6000613ce285828601613540565b9250506020613cf385828601613540565b9150509250929050565b600082825260208201905092915050565b6000613d19826133b8565b613d238185613cfd565b9350613d338185602086016133d4565b613d3c816133fe565b840191505092915050565b60006080830160008301518482036000860152613d648282613d0e565b91505060208301518482036020860152613d7e8282613d0e565b91505060408301518482036040860152613d988282613d0e565b91505060608301518482036060860152613db28282613d0e565b9150508091505092915050565b60006020820190508181036000830152613dd98184613d47565b905092915050565b60008060408385031215613df857613df76132f3565b5b6000613e068582860161348b565b9250506020613e178582860161348b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e6857607f821691505b602082108103613e7b57613e7a613e21565b5b50919050565b6000604082019050613e9660008301856134ff565b613ea360208301846134ff565b9392505050565b600081519050613eb981613a56565b92915050565b600060208284031215613ed557613ed46132f3565b5b6000613ee384828501613eaa565b91505092915050565b7f6d757374206e6f742063616c6c00000000000000000000000000000000000000600082015250565b6000613f22600d836133c3565b9150613f2d82613eec565b602082019050919050565b60006020820190508181036000830152613f5181613f15565b9050919050565b7f546f6b656e206973206e6f74206f6e2073616c65000000000000000000000000600082015250565b6000613f8e6014836133c3565b9150613f9982613f58565b602082019050919050565b60006020820190508181036000830152613fbd81613f81565b9050919050565b7f4e6f7420656e6f7567682066756e640000000000000000000000000000000000600082015250565b6000613ffa600f836133c3565b915061400582613fc4565b602082019050919050565b6000602082019050818103600083015261402981613fed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061406a8261346a565b91506140758361346a565b925082820390508181111561408d5761408c614030565b5b92915050565b6000815190506140a281613474565b92915050565b6000602082840312156140be576140bd6132f3565b5b60006140cc84828501614093565b91505092915050565b60006140e86140e38461379b565b613771565b90508281526020810184848401111561410457614103613796565b5b61410f8482856133d4565b509392505050565b600082601f83011261412c5761412b613791565b5b815161413c8482602086016140d5565b91505092915050565b60006020828403121561415b5761415a6132f3565b5b600082015167ffffffffffffffff811115614179576141786132f8565b5b61418584828501614117565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026141f07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826141b3565b6141fa86836141b3565b95508019841693508086168417925050509392505050565b600061422d6142286142238461346a565b613692565b61346a565b9050919050565b6000819050919050565b61424783614212565b61425b61425382614234565b8484546141c0565b825550505050565b600090565b614270614263565b61427b81848461423e565b505050565b5b8181101561429f57614294600082614268565b600181019050614281565b5050565b601f8211156142e4576142b58161418e565b6142be846141a3565b810160208510156142cd578190505b6142e16142d9856141a3565b830182614280565b50505b505050565b600082821c905092915050565b6000614307600019846008026142e9565b1980831691505092915050565b600061432083836142f6565b9150826002028217905092915050565b614339826133b8565b67ffffffffffffffff81111561435257614351613711565b5b61435c8254613e50565b6143678282856142a3565b600060209050601f83116001811461439a5760008415614388578287015190505b6143928582614314565b8655506143fa565b601f1984166143a88661418e565b60005b828110156143d0578489015182556001820191506020850194506020810190506143ab565b868310156143ed57848901516143e9601f8916826142f6565b8355505b6001600288020188555050505b505050505050565b600061440d826136be565b9050919050565b61441d81614402565b82525050565b60006060820190506144386000830186614414565b6144456020830185613595565b6144526040830184613595565b949350505050565b7f4d657373616765546f6b656e2e746f6b656e5552493a206e6f6e65786973746560008201527f6e7420746f6b656e000000000000000000000000000000000000000000000000602082015250565b60006144b66028836133c3565b91506144c18261445a565b604082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b600081905092915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b600061452d6009836144ec565b9150614538826144f7565b600982019050919050565b600061454e826133b8565b61455881856144ec565b93506145688185602086016133d4565b80840191505092915050565b7f222c226465736372697074696f6e223a22000000000000000000000000000000600082015250565b60006145aa6011836144ec565b91506145b582614574565b601182019050919050565b600081546145cd81613e50565b6145d781866144ec565b945060018216600081146145f257600181146146075761463a565b60ff198316865281151582028601935061463a565b6146108561418e565b60005b8381101561463257815481890152600182019150602081019050614613565b838801955050505b50505092915050565b7f222c2261747472696275746573223a5b00000000000000000000000000000000600082015250565b60006146796010836144ec565b915061468482614643565b601082019050919050565b600081519050919050565b600081905092915050565b60006146b08261468f565b6146ba818561469a565b93506146ca8185602086016133d4565b80840191505092915050565b7f5d2c22696d616765223a22646174613a696d6167652f7376672b786d6c3b626160008201527f736536342c000000000000000000000000000000000000000000000000000000602082015250565b60006147326025836144ec565b915061473d826146d6565b602582019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061477e6002836144ec565b915061478982614748565b600282019050919050565b600061479f82614520565b91506147ab8287614543565b91506147b68261459d565b91506147c282866145c0565b91506147cd8261466c565b91506147d982856146a5565b91506147e482614725565b91506147f08284614543565b91506147fb82614771565b915081905095945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b600061483f601d836144ec565b915061484a82614809565b601d82019050919050565b600061486082614832565b915061486c8284614543565b915081905092915050565b60006080828403121561488d5761488c61370c565b5b6148976080613771565b9050600082015167ffffffffffffffff8111156148b7576148b661378c565b5b6148c384828501614117565b600083015250602082015167ffffffffffffffff8111156148e7576148e661378c565b5b6148f384828501614117565b602083015250604082015167ffffffffffffffff8111156149175761491661378c565b5b61492384828501614117565b604083015250606082015167ffffffffffffffff8111156149475761494661378c565b5b61495384828501614117565b60608301525092915050565b600060208284031215614975576149746132f3565b5b600082015167ffffffffffffffff811115614993576149926132f8565b5b61499f84828501614877565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a046026836133c3565b9150614a0f826149a8565b604082019050919050565b60006020820190508181036000830152614a33816149f7565b9050919050565b7f4f6e6c7920746865206f6e7765722063616e2073657420746865207072696365600082015250565b6000614a706020836133c3565b9150614a7b82614a3a565b602082019050919050565b60006020820190508181036000830152614a9f81614a63565b9050919050565b6000614ab18261346a565b9150614abc8361346a565b9250828202614aca8161346a565b91508282048414831517614ae157614ae0614030565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b228261346a565b9150614b2d8361346a565b925082614b3d57614b3c614ae8565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b7e6020836133c3565b9150614b8982614b48565b602082019050919050565b60006020820190508181036000830152614bad81614b71565b9050919050565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b6000614bea6008836133c3565b9150614bf582614bb4565b602082019050919050565b60006020820190508181036000830152614c1981614bdd565b9050919050565b60008060408385031215614c3757614c366132f3565b5b600083015167ffffffffffffffff811115614c5557614c546132f8565b5b614c6185828601614117565b925050602083015167ffffffffffffffff811115614c8257614c816132f8565b5b614c8e85828601614117565b9150509250929050565b7f3c2f646566733e0a3c75736520687265663d2223000000000000000000000000600082015250565b6000614cce6014836144ec565b9150614cd982614c98565b601482019050919050565b7f22202f3e0a3c2f7376673e0a0000000000000000000000000000000000000000600082015250565b6000614d1a600c836144ec565b9150614d2582614ce4565b600c82019050919050565b6000614d3c8286614543565b9150614d488285614543565b9150614d5382614cc1565b9150614d5f8284614543565b9150614d6a82614d0d565b9150819050949350505050565b7f4d65737361676520546f6b656e20563120000000000000000000000000000000600082015250565b6000614dad6011836144ec565b9150614db882614d77565b601182019050919050565b6000614dce82614da0565b9150614dda8284614543565b915081905092915050565b6000614df08261346a565b9150614dfb8361346a565b9250828201905080821115614e1357614e12614030565b5b92915050565b600082825260208201905092915050565b6000614e358261468f565b614e3f8185614e19565b9350614e4f8185602086016133d4565b614e58816133fe565b840191505092915050565b6000608082019050614e7860008301876134ff565b614e8560208301866134ff565b614e926040830185613595565b8181036060830152614ea48184614e2a565b905095945050505050565b600081519050614ebe81613329565b92915050565b600060208284031215614eda57614ed96132f3565b5b6000614ee884828501614eaf565b9150509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672076696577426f783d2230203020313032342031303234222020786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e0a3c646566733e0aa264697066735822122040a9759d2fb9bd8af28184bf5253f85ba7e6b677baf0563b0006afa9d1baa71e64736f6c63430008110033", + "deployedBytecode": "0x6080604052600436106102255760003560e01c80638da5cb5b11610123578063b54b4fb9116100ab578063eac8f5b81161006f578063eac8f5b814610818578063f2fde38b14610855578063f4a0a5281461087e578063fba49e4f146108a7578063fdd2732e146108d057610225565b8063b54b4fb914610707578063b88d4fde14610744578063c87b56dd14610760578063cc44ab411461079d578063e985e9c5146107db57610225565b8063996517cf116100f2578063996517cf146106365780639e6a1d7d14610661578063a22cb4651461068a578063a370f7d7146106b3578063b212cfc7146106de57610225565b80638da5cb5b1461058e57806390c3f38f146105b95780639589d7b9146105e257806395d89b411461060b57610225565b806341f43434116101b157806370a082311161017557806370a0823114610495578063715018a6146104d25780637284e416146104e957806373a56e6c1461051457806386f79edb1461055157610225565b806341f43434146103a957806342842e0e146103d457806361f547fd146103f05780636352211e1461042d5780636817c76c1461046a57610225565b80631249c58b116101f85780631249c58b146102eb5780631346d8ea1461030957806318160ddd1461034657806323b872dd146103715780633b7f8f151461038d57610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613355565b6108fb565b60405161025e919061339d565b60405180910390f35b34801561027357600080fd5b5061027c610975565b6040516102899190613448565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906134a0565b610a07565b6040516102c6919061350e565b60405180910390f35b6102e960048036038101906102e49190613555565b610a86565b005b6102f3610b90565b60405161030091906135a4565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b91906135bf565b610bd5565b60405161033d91906135a4565b60405180910390f35b34801561035257600080fd5b5061035b610be1565b60405161036891906135a4565b60405180910390f35b61038b600480360381019061038691906135ec565b610bf0565b005b6103a760048036038101906103a2919061363f565b610d40565b005b3480156103b557600080fd5b506103be610e97565b6040516103cb91906136f1565b60405180910390f35b6103ee60048036038101906103e991906135ec565b610ea9565b005b3480156103fc57600080fd5b50610417600480360381019061041291906134a0565b610ff9565b60405161042491906135a4565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f91906134a0565b611016565b604051610461919061350e565b60405180910390f35b34801561047657600080fd5b5061047f611028565b60405161048c91906135a4565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b791906135bf565b61102e565b6040516104c991906135a4565b60405180910390f35b3480156104de57600080fd5b506104e76110e6565b005b3480156104f557600080fd5b506104fe6110fa565b60405161050b9190613448565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613933565b611188565b60405161054891906135a4565b60405180910390f35b34801561055d57600080fd5b50610578600480360381019061057391906134a0565b611251565b6040516105859190613448565b60405180910390f35b34801561059a57600080fd5b506105a361130c565b6040516105b0919061350e565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061397c565b611336565b005b3480156105ee57600080fd5b5061060960048036038101906106049190613a03565b611351565b005b34801561061757600080fd5b506106206113cf565b60405161062d9190613448565b60405180910390f35b34801561064257600080fd5b5061064b611461565b60405161065891906135a4565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906134a0565b611467565b005b34801561069657600080fd5b506106b160048036038101906106ac9190613a82565b611479565b005b3480156106bf57600080fd5b506106c8611583565b6040516106d59190613ae3565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190613b3c565b6115a9565b005b34801561071357600080fd5b5061072e600480360381019061072991906134a0565b6115f5565b60405161073b91906135a4565b60405180910390f35b61075e60048036038101906107599190613c0a565b611612565b005b34801561076c57600080fd5b50610787600480360381019061078291906134a0565b611765565b6040516107949190613448565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf91906134a0565b611843565b6040516107d2929190613c8d565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190613cbd565b611868565b60405161080f919061339d565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a91906134a0565b6118fc565b60405161084c9190613dbf565b60405180910390f35b34801561086157600080fd5b5061087c600480360381019061087791906135bf565b6119bd565b005b34801561088a57600080fd5b506108a560048036038101906108a091906134a0565b611a40565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613de1565b611a52565b005b3480156108dc57600080fd5b506108e5611ae4565b6040516108f29190613448565b60405180910390f35b60007fe019895a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096e575061096d82611bb0565b5b9050919050565b60606002805461098490613e50565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090613e50565b80156109fd5780601f106109d2576101008083540402835291602001916109fd565b820191906000526020600020905b8154815290600101906020018083116109e057829003601f168201915b5050505050905090565b6000610a1282611c42565b610a48576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610b81576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610afe929190613e81565b602060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f9190613ebf565b610b8057806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610b77919061350e565b60405180910390fd5b5b610b8b8383611ca1565b505050565b600080610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613f38565b60405180910390fd5b90565b6000600b549050919050565b6000610beb611de5565b905090565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d2e573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c6257610c5d848484611dee565b610d3a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cab929190613e81565b602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190613ebf565b610d2d57336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d24919061350e565b60405180910390fd5b5b610d39848484611dee565b5b50505050565b60006009600085815260200190815260200160002054905060008111610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613fa4565b60405180910390fd5b80341015610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590614010565b60405180910390fd5b6000610dea3484612110565b90506000610df834876121b5565b90506000610e0587611016565b905060008190508073ffffffffffffffffffffffffffffffffffffffff166108fc848634610e33919061405f565b610e3d919061405f565b9081150290604051600060405180830381858888f19350505050158015610e68573d6000803e3d6000fd5b506000600960008a815260200190815260200160002081905550610e8d82888a6121bd565b5050505050505050565b6daaeb6d7670e522a718067333cd4e81565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fe7573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f1b57610f16848484612481565b610ff3565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f64929190613e81565b602060405180830381865afa158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190613ebf565b610fe657336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fdd919061350e565b60405180910390fd5b5b610ff2848484612481565b5b50505050565b6000600e6000838152602001908152602001600020549050919050565b6000611021826124a1565b9050919050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611095576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6110ee61256d565b6110f860006125eb565b565b600a805461110790613e50565b80601f016020809104026020016040519081016040528092919081815260200182805461113390613e50565b80156111805780601f1061115557610100808354040283529160200191611180565b820191906000526020600020905b81548152906001019060200180831161116357829003601f168201915b505050505081565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634e2849c6846040518263ffffffff1660e01b81526004016111e49190613dbf565b6020604051808303816000875af1158015611203573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122791906140a8565b90506112316126b1565b915080600e60008481526020019081526020016000208190555050919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166386f79edb600e6000858152602001908152602001600020546040518263ffffffff1660e01b81526004016112bf91906135a4565b600060405180830381865afa1580156112dc573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113059190614145565b9050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61133e61256d565b80600a908161134d9190614330565b5050565b61135b8382611a52565b8173ffffffffffffffffffffffffffffffffffffffff16633c6fc8173085846040518463ffffffff1660e01b815260040161139893929190614423565b600060405180830381600087803b1580156113b257600080fd5b505af11580156113c6573d6000803e3d6000fd5b50505050505050565b6060600380546113de90613e50565b80601f016020809104026020016040519081016040528092919081815260200182805461140a90613e50565b80156114575780601f1061142c57610100808354040283529160200191611457565b820191906000526020600020905b81548152906001019060200180831161143a57829003601f168201915b5050505050905090565b600c5481565b61146f61256d565b80600c8190555050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611574576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016114f1929190613e81565b602060405180830381865afa15801561150e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115329190613ebf565b61157357806040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161156a919061350e565b60405180910390fd5b5b61157e8383612722565b505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115b161256d565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060096000838152602001908152602001600020549050919050565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611751573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611685576116808585858561282d565b61175e565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016116ce929190613e81565b602060405180830381865afa1580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f9190613ebf565b61175057336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611747919061350e565b60405180910390fd5b5b61175d8585858561282d565b5b5050505050565b60606000600e600084815260200190815260200160002054905061178883611c42565b6117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be906144cc565b60405180910390fd5b60006117d2826128a0565b905061181b6117e08561298f565b600a6117eb856129c0565b6117f485612a6a565b6040516020016118079493929190614794565b604051602081830303815290604052612a6a565b60405160200161182b9190614855565b60405160208183030381529060405292505050919050565b606060005a905061185383611765565b91505a81611861919061405f565b9050915091565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119046132c1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663eac8f5b8600e6000858152602001908152602001600020546040518263ffffffff1660e01b815260040161197091906135a4565b600060405180830381865afa15801561198d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906119b6919061495f565b9050919050565b6119c561256d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90614a1a565b60405180910390fd5b611a3d816125eb565b50565b611a4861256d565b80600b8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16611a7283611016565b73ffffffffffffffffffffffffffffffffffffffff1614611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90614a86565b60405180910390fd5b8060096000848152602001908152602001600020819055505050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166386f79edb600e60006001611b30611de5565b611b3a919061405f565b8152602001908152602001600020546040518263ffffffff1660e01b8152600401611b6591906135a4565b600060405180830381865afa158015611b82573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bab9190614145565b905090565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c0b57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c3b5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600081611c4d612be2565b11158015611c5c575060005482105b8015611c9a575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b6000611cac82611016565b90508073ffffffffffffffffffffffffffffffffffffffff16611ccd612be7565b73ffffffffffffffffffffffffffffffffffffffff1614611d3057611cf981611cf4612be7565b611868565b611d2f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60008054905090565b6000611df9826124a1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e60576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611e6c84612bef565b91509150611e828187611e7d612be7565b612c16565b611ece57611e9786611e92612be7565b611868565b611ecd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f34576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f418686866001612c5a565b8015611f4c57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061201a85611ff6888887612c60565b7c020000000000000000000000000000000000000000000000000000000017612c88565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036120a0576000600185019050600060046000838152602001908152602001600020540361209e57600054811461209d578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121088686866001612cb3565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121af576103e86019846121559190614aa6565b61215f9190614b17565b905060008290508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156121ac573d6000803e3d6000fd5b50505b92915050565b600092915050565b60006121c8826124a1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461222f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061223b84612bef565b91509150600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122a5576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122b28686866001612c5a565b80156122bd57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061238b85612367888887612c60565b7c020000000000000000000000000000000000000000000000000000000017612c88565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603612411576000600185019050600060046000838152602001908152602001600020540361240f57600054811461240e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124798686866001612cb3565b505050505050565b61249c83838360405180602001604052806000815250611612565b505050565b600080829050806124b0612be2565b11612536576000548110156125355760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612533575b600081036125295760046000836001900393508381526020019081526020016000205490506124ff565b8092505050612568565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b612575612cb9565b73ffffffffffffffffffffffffffffffffffffffff1661259361130c565b73ffffffffffffffffffffffffffffffffffffffff16146125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e090614b94565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600c546126be611de5565b106126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f590614c00565b60405180910390fd5b612709336001612cc1565b6001612713611de5565b61271d919061405f565b905090565b806007600061272f612be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166127dc612be7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612821919061339d565b60405180910390a35050565b612838848484610bf0565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461289a5761286384848484612cdf565b612899576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3f24f02856040518263ffffffff1660e01b815260040161290091906135a4565b600060405180830381865afa15801561291d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906129469190614c20565b91509150604051806080016040528060498152602001614f3260499139828260405160200161297793929190614d30565b60405160208183030381529060405292505050919050565b606061299a82612e2f565b6040516020016129aa9190614dc3565b6040516020818303038152906040529050919050565b6060600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379b92f27836040518263ffffffff1660e01b8152600401612a1d91906135a4565b600060405180830381865afa158015612a3a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612a639190614145565b9050919050565b60606000825103612a8c57604051806020016040528060008152509050612bdd565b6000604051806060016040528060408152602001614ef26040913990506000600360028551612abb9190614de5565b612ac59190614b17565b6004612ad19190614aa6565b90506000602082612ae29190614de5565b67ffffffffffffffff811115612afb57612afa613711565b5b6040519080825280601f01601f191660200182016040528015612b2d5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612b9c576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050612b41565b600389510660018114612bb65760028114612bc657612bd1565b613d3d60f01b6002830352612bd1565b603d60f81b60018303525b50505050508093505050505b919050565b600090565b600033905090565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612c77868684612efd565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b612cdb828260405180602001604052806000815250612f06565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d05612be7565b8786866040518563ffffffff1660e01b8152600401612d279493929190614e63565b6020604051808303816000875af1925050508015612d6357506040513d601f19601f82011682018060405250810190612d609190614ec4565b60015b612ddc573d8060008114612d93576040519150601f19603f3d011682016040523d82523d6000602084013e612d98565b606091505b506000815103612dd4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060006001612e3e84612fa3565b01905060008167ffffffffffffffff811115612e5d57612e5c613711565b5b6040519080825280601f01601f191660200182016040528015612e8f5781602001600182028036833780820191505090505b509050600082602001820190505b600115612ef2578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612ee657612ee5614ae8565b5b04945060008503612e9d575b819350505050919050565b60009392505050565b612f1083836130f6565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612f9e57600080549050600083820390505b612f506000868380600101945086612cdf565b612f86576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612f3d578160005414612f9b57600080fd5b50505b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613001577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612ff757612ff6614ae8565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061303e576d04ee2d6d415b85acef8100000000838161303457613033614ae8565b5b0492506020810190505b662386f26fc10000831061306d57662386f26fc10000838161306357613062614ae8565b5b0492506010810190505b6305f5e1008310613096576305f5e100838161308c5761308b614ae8565b5b0492506008810190505b61271083106130bb5761271083816130b1576130b0614ae8565b5b0492506004810190505b606483106130de57606483816130d4576130d3614ae8565b5b0492506002810190505b600a83106130ed576001810190505b80915050919050565b60008054905060008203613136576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131436000848385612c5a565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506131ba836131ab6000866000612c60565b6131b4856132b1565b17612c88565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461325b57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050613220565b5060008203613296576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506132ac6000848385612cb3565b505050565b60006001821460e11b9050919050565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613332816132fd565b811461333d57600080fd5b50565b60008135905061334f81613329565b92915050565b60006020828403121561336b5761336a6132f3565b5b600061337984828501613340565b91505092915050565b60008115159050919050565b61339781613382565b82525050565b60006020820190506133b2600083018461338e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133f25780820151818401526020810190506133d7565b60008484015250505050565b6000601f19601f8301169050919050565b600061341a826133b8565b61342481856133c3565b93506134348185602086016133d4565b61343d816133fe565b840191505092915050565b60006020820190508181036000830152613462818461340f565b905092915050565b6000819050919050565b61347d8161346a565b811461348857600080fd5b50565b60008135905061349a81613474565b92915050565b6000602082840312156134b6576134b56132f3565b5b60006134c48482850161348b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134f8826134cd565b9050919050565b613508816134ed565b82525050565b600060208201905061352360008301846134ff565b92915050565b613532816134ed565b811461353d57600080fd5b50565b60008135905061354f81613529565b92915050565b6000806040838503121561356c5761356b6132f3565b5b600061357a85828601613540565b925050602061358b8582860161348b565b9150509250929050565b61359e8161346a565b82525050565b60006020820190506135b96000830184613595565b92915050565b6000602082840312156135d5576135d46132f3565b5b60006135e384828501613540565b91505092915050565b600080600060608486031215613605576136046132f3565b5b600061361386828701613540565b935050602061362486828701613540565b92505060406136358682870161348b565b9150509250925092565b600080600060608486031215613658576136576132f3565b5b60006136668682870161348b565b935050602061367786828701613540565b925050604061368886828701613540565b9150509250925092565b6000819050919050565b60006136b76136b26136ad846134cd565b613692565b6134cd565b9050919050565b60006136c98261369c565b9050919050565b60006136db826136be565b9050919050565b6136eb816136d0565b82525050565b600060208201905061370660008301846136e2565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613749826133fe565b810181811067ffffffffffffffff8211171561376857613767613711565b5b80604052505050565b600061377b6132e9565b90506137878282613740565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156137b6576137b5613711565b5b6137bf826133fe565b9050602081019050919050565b82818337600083830152505050565b60006137ee6137e98461379b565b613771565b90508281526020810184848401111561380a57613809613796565b5b6138158482856137cc565b509392505050565b600082601f83011261383257613831613791565b5b81356138428482602086016137db565b91505092915050565b6000608082840312156138615761386061370c565b5b61386b6080613771565b9050600082013567ffffffffffffffff81111561388b5761388a61378c565b5b6138978482850161381d565b600083015250602082013567ffffffffffffffff8111156138bb576138ba61378c565b5b6138c78482850161381d565b602083015250604082013567ffffffffffffffff8111156138eb576138ea61378c565b5b6138f78482850161381d565b604083015250606082013567ffffffffffffffff81111561391b5761391a61378c565b5b6139278482850161381d565b60608301525092915050565b600060208284031215613949576139486132f3565b5b600082013567ffffffffffffffff811115613967576139666132f8565b5b6139738482850161384b565b91505092915050565b600060208284031215613992576139916132f3565b5b600082013567ffffffffffffffff8111156139b0576139af6132f8565b5b6139bc8482850161381d565b91505092915050565b60006139d0826134ed565b9050919050565b6139e0816139c5565b81146139eb57600080fd5b50565b6000813590506139fd816139d7565b92915050565b600080600060608486031215613a1c57613a1b6132f3565b5b6000613a2a8682870161348b565b9350506020613a3b868287016139ee565b9250506040613a4c8682870161348b565b9150509250925092565b613a5f81613382565b8114613a6a57600080fd5b50565b600081359050613a7c81613a56565b92915050565b60008060408385031215613a9957613a986132f3565b5b6000613aa785828601613540565b9250506020613ab885828601613a6d565b9150509250929050565b6000613acd826136be565b9050919050565b613add81613ac2565b82525050565b6000602082019050613af86000830184613ad4565b92915050565b6000613b09826134ed565b9050919050565b613b1981613afe565b8114613b2457600080fd5b50565b600081359050613b3681613b10565b92915050565b600060208284031215613b5257613b516132f3565b5b6000613b6084828501613b27565b91505092915050565b600067ffffffffffffffff821115613b8457613b83613711565b5b613b8d826133fe565b9050602081019050919050565b6000613bad613ba884613b69565b613771565b905082815260208101848484011115613bc957613bc8613796565b5b613bd48482856137cc565b509392505050565b600082601f830112613bf157613bf0613791565b5b8135613c01848260208601613b9a565b91505092915050565b60008060008060808587031215613c2457613c236132f3565b5b6000613c3287828801613540565b9450506020613c4387828801613540565b9350506040613c548782880161348b565b925050606085013567ffffffffffffffff811115613c7557613c746132f8565b5b613c8187828801613bdc565b91505092959194509250565b60006040820190508181036000830152613ca7818561340f565b9050613cb66020830184613595565b9392505050565b60008060408385031215613cd457613cd36132f3565b5b6000613ce285828601613540565b9250506020613cf385828601613540565b9150509250929050565b600082825260208201905092915050565b6000613d19826133b8565b613d238185613cfd565b9350613d338185602086016133d4565b613d3c816133fe565b840191505092915050565b60006080830160008301518482036000860152613d648282613d0e565b91505060208301518482036020860152613d7e8282613d0e565b91505060408301518482036040860152613d988282613d0e565b91505060608301518482036060860152613db28282613d0e565b9150508091505092915050565b60006020820190508181036000830152613dd98184613d47565b905092915050565b60008060408385031215613df857613df76132f3565b5b6000613e068582860161348b565b9250506020613e178582860161348b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e6857607f821691505b602082108103613e7b57613e7a613e21565b5b50919050565b6000604082019050613e9660008301856134ff565b613ea360208301846134ff565b9392505050565b600081519050613eb981613a56565b92915050565b600060208284031215613ed557613ed46132f3565b5b6000613ee384828501613eaa565b91505092915050565b7f6d757374206e6f742063616c6c00000000000000000000000000000000000000600082015250565b6000613f22600d836133c3565b9150613f2d82613eec565b602082019050919050565b60006020820190508181036000830152613f5181613f15565b9050919050565b7f546f6b656e206973206e6f74206f6e2073616c65000000000000000000000000600082015250565b6000613f8e6014836133c3565b9150613f9982613f58565b602082019050919050565b60006020820190508181036000830152613fbd81613f81565b9050919050565b7f4e6f7420656e6f7567682066756e640000000000000000000000000000000000600082015250565b6000613ffa600f836133c3565b915061400582613fc4565b602082019050919050565b6000602082019050818103600083015261402981613fed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061406a8261346a565b91506140758361346a565b925082820390508181111561408d5761408c614030565b5b92915050565b6000815190506140a281613474565b92915050565b6000602082840312156140be576140bd6132f3565b5b60006140cc84828501614093565b91505092915050565b60006140e86140e38461379b565b613771565b90508281526020810184848401111561410457614103613796565b5b61410f8482856133d4565b509392505050565b600082601f83011261412c5761412b613791565b5b815161413c8482602086016140d5565b91505092915050565b60006020828403121561415b5761415a6132f3565b5b600082015167ffffffffffffffff811115614179576141786132f8565b5b61418584828501614117565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026141f07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826141b3565b6141fa86836141b3565b95508019841693508086168417925050509392505050565b600061422d6142286142238461346a565b613692565b61346a565b9050919050565b6000819050919050565b61424783614212565b61425b61425382614234565b8484546141c0565b825550505050565b600090565b614270614263565b61427b81848461423e565b505050565b5b8181101561429f57614294600082614268565b600181019050614281565b5050565b601f8211156142e4576142b58161418e565b6142be846141a3565b810160208510156142cd578190505b6142e16142d9856141a3565b830182614280565b50505b505050565b600082821c905092915050565b6000614307600019846008026142e9565b1980831691505092915050565b600061432083836142f6565b9150826002028217905092915050565b614339826133b8565b67ffffffffffffffff81111561435257614351613711565b5b61435c8254613e50565b6143678282856142a3565b600060209050601f83116001811461439a5760008415614388578287015190505b6143928582614314565b8655506143fa565b601f1984166143a88661418e565b60005b828110156143d0578489015182556001820191506020850194506020810190506143ab565b868310156143ed57848901516143e9601f8916826142f6565b8355505b6001600288020188555050505b505050505050565b600061440d826136be565b9050919050565b61441d81614402565b82525050565b60006060820190506144386000830186614414565b6144456020830185613595565b6144526040830184613595565b949350505050565b7f4d657373616765546f6b656e2e746f6b656e5552493a206e6f6e65786973746560008201527f6e7420746f6b656e000000000000000000000000000000000000000000000000602082015250565b60006144b66028836133c3565b91506144c18261445a565b604082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b600081905092915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b600061452d6009836144ec565b9150614538826144f7565b600982019050919050565b600061454e826133b8565b61455881856144ec565b93506145688185602086016133d4565b80840191505092915050565b7f222c226465736372697074696f6e223a22000000000000000000000000000000600082015250565b60006145aa6011836144ec565b91506145b582614574565b601182019050919050565b600081546145cd81613e50565b6145d781866144ec565b945060018216600081146145f257600181146146075761463a565b60ff198316865281151582028601935061463a565b6146108561418e565b60005b8381101561463257815481890152600182019150602081019050614613565b838801955050505b50505092915050565b7f222c2261747472696275746573223a5b00000000000000000000000000000000600082015250565b60006146796010836144ec565b915061468482614643565b601082019050919050565b600081519050919050565b600081905092915050565b60006146b08261468f565b6146ba818561469a565b93506146ca8185602086016133d4565b80840191505092915050565b7f5d2c22696d616765223a22646174613a696d6167652f7376672b786d6c3b626160008201527f736536342c000000000000000000000000000000000000000000000000000000602082015250565b60006147326025836144ec565b915061473d826146d6565b602582019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061477e6002836144ec565b915061478982614748565b600282019050919050565b600061479f82614520565b91506147ab8287614543565b91506147b68261459d565b91506147c282866145c0565b91506147cd8261466c565b91506147d982856146a5565b91506147e482614725565b91506147f08284614543565b91506147fb82614771565b915081905095945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b600061483f601d836144ec565b915061484a82614809565b601d82019050919050565b600061486082614832565b915061486c8284614543565b915081905092915050565b60006080828403121561488d5761488c61370c565b5b6148976080613771565b9050600082015167ffffffffffffffff8111156148b7576148b661378c565b5b6148c384828501614117565b600083015250602082015167ffffffffffffffff8111156148e7576148e661378c565b5b6148f384828501614117565b602083015250604082015167ffffffffffffffff8111156149175761491661378c565b5b61492384828501614117565b604083015250606082015167ffffffffffffffff8111156149475761494661378c565b5b61495384828501614117565b60608301525092915050565b600060208284031215614975576149746132f3565b5b600082015167ffffffffffffffff811115614993576149926132f8565b5b61499f84828501614877565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a046026836133c3565b9150614a0f826149a8565b604082019050919050565b60006020820190508181036000830152614a33816149f7565b9050919050565b7f4f6e6c7920746865206f6e7765722063616e2073657420746865207072696365600082015250565b6000614a706020836133c3565b9150614a7b82614a3a565b602082019050919050565b60006020820190508181036000830152614a9f81614a63565b9050919050565b6000614ab18261346a565b9150614abc8361346a565b9250828202614aca8161346a565b91508282048414831517614ae157614ae0614030565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b228261346a565b9150614b2d8361346a565b925082614b3d57614b3c614ae8565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b7e6020836133c3565b9150614b8982614b48565b602082019050919050565b60006020820190508181036000830152614bad81614b71565b9050919050565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b6000614bea6008836133c3565b9150614bf582614bb4565b602082019050919050565b60006020820190508181036000830152614c1981614bdd565b9050919050565b60008060408385031215614c3757614c366132f3565b5b600083015167ffffffffffffffff811115614c5557614c546132f8565b5b614c6185828601614117565b925050602083015167ffffffffffffffff811115614c8257614c816132f8565b5b614c8e85828601614117565b9150509250929050565b7f3c2f646566733e0a3c75736520687265663d2223000000000000000000000000600082015250565b6000614cce6014836144ec565b9150614cd982614c98565b601482019050919050565b7f22202f3e0a3c2f7376673e0a0000000000000000000000000000000000000000600082015250565b6000614d1a600c836144ec565b9150614d2582614ce4565b600c82019050919050565b6000614d3c8286614543565b9150614d488285614543565b9150614d5382614cc1565b9150614d5f8284614543565b9150614d6a82614d0d565b9150819050949350505050565b7f4d65737361676520546f6b656e20563120000000000000000000000000000000600082015250565b6000614dad6011836144ec565b9150614db882614d77565b601182019050919050565b6000614dce82614da0565b9150614dda8284614543565b915081905092915050565b6000614df08261346a565b9150614dfb8361346a565b9250828201905080821115614e1357614e12614030565b5b92915050565b600082825260208201905092915050565b6000614e358261468f565b614e3f8185614e19565b9350614e4f8185602086016133d4565b614e58816133fe565b840191505092915050565b6000608082019050614e7860008301876134ff565b614e8560208301866134ff565b614e926040830185613595565b8181036060830152614ea48184614e2a565b905095945050505050565b600081519050614ebe81613329565b92915050565b600060208284031215614eda57614ed96132f3565b5b6000614ee884828501614eaf565b9150509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672076696577426f783d2230203020313032342031303234222020786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e0a3c646566733e0aa264697066735822122040a9759d2fb9bd8af28184bf5253f85ba7e6b677baf0563b0006afa9d1baa71e64736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index 9e8dd243..cb621e09 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -71,6 +71,15 @@ import { addresses as dynamic_goerli } from "./addresses/dynamic_goerli"; import { addresses as dynamic_localhost } from "./addresses/dynamic_localhost"; import { addresses as message_pnouns_goerli } from "./addresses/message_pnouns_goerli"; import { addresses as message_splatter_goerli } from "./addresses/message_splatter_goerli"; +import { addresses as messagestore2_goerli } from "./addresses/messagestore2_goerli"; +import { addresses as messagestore2_localhost } from "./addresses/messagestore2_localhost"; +import { addresses as messagestore2_mumbai } from "./addresses/messagestore2_mumbai"; +import { addresses as messageprovider_goerli } from "./addresses/messageprovider_goerli"; +import { addresses as messageprovider_localhost } from "./addresses/messageprovider_localhost"; +import { addresses as messageprovider_mumbai } from "./addresses/messageprovider_mumbai"; +import { addresses as messagetoken_goerli } from "./addresses/messagetoken_goerli"; +import { addresses as messagetoken_localhost } from "./addresses/messagetoken_localhost"; +import { addresses as messagetoken_mumbai } from "./addresses/messagetoken_mumbai"; export interface Addresses { [key: string]: { [key: string]: string }; @@ -86,6 +95,21 @@ export const addresses: Addresses = { messageSplatter: { goerli: message_splatter_goerli.messageSplatterToken, }, + messageStore: { + localhost: messagestore2_localhost.messageStore, + goerli: messagestore2_goerli.messageStore, + mumbai: messagestore2_mumbai.messageStore, + }, + messageProvider: { + localhost: messageprovider_localhost.messageProvider, + goerli: messageprovider_goerli.messageProvider, + mumbai: messageprovider_mumbai.messageProvider, + }, + messageToken: { + localhost: messagetoken_localhost.messageToken, + goerli: messagetoken_goerli.messageToken, + mumbai: messagetoken_mumbai.messageToken, + }, svgHelper: { goerli: splatter_goerli.svgHelperAddress, mumbai: color_mumbai.svgHelper, diff --git a/src/utils/addresses/messageprovider_goerli.ts b/src/utils/addresses/messageprovider_goerli.ts new file mode 100644 index 00000000..648098ef --- /dev/null +++ b/src/utils/addresses/messageprovider_goerli.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageProvider: "0xaf5902C67Ff32b6Bc971Fb732888A8fdB9CECf48", +}; diff --git a/src/utils/addresses/messageprovider_localhost.ts b/src/utils/addresses/messageprovider_localhost.ts new file mode 100644 index 00000000..60848c49 --- /dev/null +++ b/src/utils/addresses/messageprovider_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageProvider: "0xd4416aE65D7Ad86405D2D97e9DE5Bf6675A5ACaC", +} diff --git a/src/utils/addresses/messageprovider_mumbai.ts b/src/utils/addresses/messageprovider_mumbai.ts new file mode 100644 index 00000000..a6423cfb --- /dev/null +++ b/src/utils/addresses/messageprovider_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageProvider: "0x0a55020dB260079B5853C3817ba60Fd1CB3528f2", +} diff --git a/src/utils/addresses/messagestore2_goerli.ts b/src/utils/addresses/messagestore2_goerli.ts new file mode 100644 index 00000000..db3deda3 --- /dev/null +++ b/src/utils/addresses/messagestore2_goerli.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageStore: "0xEfdE86a24ac55D9AcCEDdAc5f0357949a2c1BD3a", +}; diff --git a/src/utils/addresses/messagestore2_localhost.ts b/src/utils/addresses/messagestore2_localhost.ts new file mode 100644 index 00000000..52c923f6 --- /dev/null +++ b/src/utils/addresses/messagestore2_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageStore: "0x7De52d6d12044AcfD720D2C7f3BC679c68673BEE", +} diff --git a/src/utils/addresses/messagestore2_mumbai.ts b/src/utils/addresses/messagestore2_mumbai.ts new file mode 100644 index 00000000..b7070003 --- /dev/null +++ b/src/utils/addresses/messagestore2_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageStore: "0x923747177065d5c267a57DB6b64AD89ee099F672", +} diff --git a/src/utils/addresses/messagetoken_goerli.ts b/src/utils/addresses/messagetoken_goerli.ts new file mode 100644 index 00000000..7fa50564 --- /dev/null +++ b/src/utils/addresses/messagetoken_goerli.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageToken: "0x8C4aa1A2887bD3abC110CB91aC198569b6f92E76", +}; diff --git a/src/utils/addresses/messagetoken_localhost.ts b/src/utils/addresses/messagetoken_localhost.ts new file mode 100644 index 00000000..7efbcd88 --- /dev/null +++ b/src/utils/addresses/messagetoken_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageToken: "0x1025d7bCcE981D9808C05d51151DCeFD747Edc02", +} diff --git a/src/utils/addresses/messagetoken_mumbai.ts b/src/utils/addresses/messagetoken_mumbai.ts new file mode 100644 index 00000000..4600f5c9 --- /dev/null +++ b/src/utils/addresses/messagetoken_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + messageToken: "0x4718CfA8DbC4A5C57490f47d6877750bBab3B22B", +} diff --git a/src/utils/const.ts b/src/utils/const.ts index 01164aa2..e1bef9fa 100644 --- a/src/utils/const.ts +++ b/src/utils/const.ts @@ -84,10 +84,13 @@ const ProviderSVGTokenEx = { wabi: require("@/abis/SVGTokenV1.json"), // wrapped abi }; const ProviderMessageTokenEx = { - wabi: require("@/abis/MessageToken.json"), // wrapped abi + wabi: require("@/abis/MessageTokenV2.json"), // wrapped abi +}; +const ProviderMessageProviderEx = { + wabi: require("@/abis/MessageProvider3.json"), // wrapped abi }; const ProviderMessageStoreEx = { - wabi: require("@/abis/MessageStoreV1.json"), // wrapped abi + wabi: require("@/abis/MessageStoreV2.json"), // wrapped abi }; const IAssetProvider = { wabi: require("@/abis/IAssetProvider.json"), // wrapped abi @@ -161,6 +164,18 @@ export const getMessageTokenContract = ( return tokenContract; }; +export const getMessageProviderContract = ( + address: string, + provider: ProviderOrSigner +): ethers.Contract => { + const tokenContract = new ethers.Contract( + address, + ProviderMessageProviderEx.wabi.abi, + provider + ); + return tokenContract; +}; + export const getMessageStoreContract = ( address: string, provider: ProviderOrSigner diff --git a/src/views/Message.vue b/src/views/Message.vue index 9caa56f4..8605ade7 100644 --- a/src/views/Message.vue +++ b/src/views/Message.vue @@ -27,6 +27,12 @@ {{ option.text }} + Asset: +
Preview
@@ -58,7 +64,7 @@
See NFTs on OpenSea ({ + value: c, + text: c, + })); + + const assets = [ + "Splatter", + "Snow", ].map((c) => ({ value: c, text: c, })); - const network = "goerli"; + const network = "mumbai"; - const tokenAddress = addresses.messageSplatter.goerli; + const tokenAddress = addresses.messageToken.mumbai; + const providerAddress = addresses.messageProvider.mumbai; + console.log("tokenAddress:", tokenAddress); + console.log("providerAddress:", providerAddress); const chainId = ChainIdMap[network]; @@ -138,6 +157,28 @@ export default defineComponent({ const messageSVG = ref(null); + const alchemyKey = process.env.VUE_APP_ALCHEMY_API_KEY; + const provider = getProvider(network, alchemyKey); + const tokens = ref([]); + + const tokenContract = getMessageTokenContract(tokenAddress, provider); + + const providerContract = getMessageProviderContract(providerAddress, provider); + + const loadSVGMessage = async () => { + messageSVG.value = await providerContract.generateSVGMessage( + message.value, + color.value, + font.value, + asset.value, + box + ); + }; + const updateSVGMessage = () => { + loadSVGMessage(); + }; + loadSVGMessage(); + const { networkContext } = useMessageTokenNetworkContext( chainId, tokenAddress @@ -154,14 +195,16 @@ export default defineComponent({ const { contract } = networkContext.value; isMinting.value = true; - const ret = { - message: message.value, - color: color.value, - }; try { + const ret = { + message: message.value, + color: color.value, + fontName: font.value, + assetName: asset.value, + }; const tx = await contract.functions.mintWithAsset(ret); - console.log("mint:tx"); const result = await tx.wait(); + console.log("mint:tx"); console.log("mint:gasUsed", result.gasUsed.toNumber()); } catch (e) { alert("We are sorry, but something went wrong."); @@ -170,17 +213,13 @@ export default defineComponent({ } }; - const alchemyKey = process.env.VUE_APP_ALCHEMY_API_KEY; - const provider = getProvider(network, alchemyKey); - const tokenContract = getMessageTokenContract(tokenAddress, provider); - const tokens = ref([]); - const fetchTokens = () => { tokenContract.totalSupply().then(async (nextId: BigNumber) => { const token = nextId.toNumber() - 1; + console.log("fetchTokens:token", token); tokens.value = []; for (let i = 0; i < 10; i++) { - if (token - i > 0) { + if (token - i >= 0) { const ret = await tokenContract.tokenURI(token - i); const data = JSON.parse(atob(ret.split(",")[1])); tokens.value.push(data); @@ -190,21 +229,6 @@ export default defineComponent({ }; fetchTokens(); - - const messageStore_addresses: { [key: string]: string } = { - "londrina_solid": "0x7c56D603Eb7976ee6592F7DDa8118576a9FDfeA3", - "noto_sans": "0x9bF2831b806CEbD0B09d490c90C88bcb47515C62" - }; - - const loadSVGMessage = async () => { - const fontStore = getMessageStoreContract(messageStore_addresses[font.value], provider); - messageSVG.value = await fontStore.getSVGMessage(message.value, color.value, box); - }; - const updateSVGMessage = () => { - loadSVGMessage(); - }; - loadSVGMessage(); - provider.once("block", () => { tokenContract.on( tokenContract.filters.Transfer(), @@ -222,6 +246,8 @@ export default defineComponent({ colors, font, fonts, + asset, + assets, messageSVG, updateSVGMessage, // mint From d0b565ca947d43c21dc8fc1280c2a1d39e267af2 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sat, 5 Aug 2023 09:03:42 +0900 Subject: [PATCH 053/146] =?UTF-8?q?NounsDescriptorV1=E3=83=87=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=82=A4=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../external/nouns/NounsDescripter.sol | 4 +- .../contracts/external/nouns/NounsSeeder.sol | 57 +++++++++++ .../pNouns/interfaces/INounsDescriptor.sol | 99 +++++++++++++++++++ .../interfaces/INounsDescriptorMinimal.sol | 44 +++++++++ .../pNouns/interfaces/INounsSeeder.sol | 32 ++++++ contract/hardhat.config.ts | 7 ++ contract/scripts/deploy_nounsDescriptorV1.ts | 7 +- contract/scripts/populate_nounsV1.ts | 50 ++++++---- contract/scripts/test_nounsV1.ts | 43 ++++++++ .../addresses/londrina_solid_localhost.ts | 4 +- src/utils/addresses/londrina_solid_mumbai.ts | 4 +- src/utils/addresses/londrina_solid_polygon.ts | 3 + 12 files changed, 326 insertions(+), 28 deletions(-) create mode 100644 contract/contracts/external/nouns/NounsSeeder.sol create mode 100644 contract/contracts/pNouns/interfaces/INounsDescriptor.sol create mode 100644 contract/contracts/pNouns/interfaces/INounsDescriptorMinimal.sol create mode 100644 contract/contracts/pNouns/interfaces/INounsSeeder.sol create mode 100644 contract/scripts/test_nounsV1.ts create mode 100644 src/utils/addresses/londrina_solid_polygon.ts diff --git a/contract/contracts/external/nouns/NounsDescripter.sol b/contract/contracts/external/nouns/NounsDescripter.sol index 55361dee..f62d6fd3 100644 --- a/contract/contracts/external/nouns/NounsDescripter.sol +++ b/contract/contracts/external/nouns/NounsDescripter.sol @@ -261,8 +261,8 @@ contract NounsDescriptor is INounsDescriptor, Ownable { */ function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) public view override returns (string memory) { string memory nounId = tokenId.toString(); - string memory name = string(abi.encodePacked('Noun ', nounId)); - string memory description = string(abi.encodePacked('Noun ', nounId, ' is a member of the Nouns DAO')); + string memory name = string(abi.encodePacked('Aid pNoun ', nounId)); + string memory description = string(abi.encodePacked('Aid pNoun ', nounId, ' is proof of contribution to pNouns DAO.')); return genericDataURI(name, description, seed); } diff --git a/contract/contracts/external/nouns/NounsSeeder.sol b/contract/contracts/external/nouns/NounsSeeder.sol new file mode 100644 index 00000000..5351bec8 --- /dev/null +++ b/contract/contracts/external/nouns/NounsSeeder.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title The NounsToken pseudo-random seed generator + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { INounsDescriptorMinimal } from './interfaces/INounsDescriptorMinimal.sol'; + +contract NounsSeeder is INounsSeeder { + /** + * @notice Generate a pseudo-random Noun seed using the previous blockhash and noun ID. + */ + // prettier-ignore + function generateSeed(uint256 nounId, INounsDescriptorMinimal descriptor) external view override returns (Seed memory) { + uint256 pseudorandomness = uint256( + keccak256(abi.encodePacked(blockhash(block.number - 1), nounId)) + ); + + uint256 backgroundCount = descriptor.backgroundCount(); + uint256 bodyCount = descriptor.bodyCount(); + uint256 accessoryCount = descriptor.accessoryCount(); + uint256 headCount = descriptor.headCount(); + uint256 glassesCount = descriptor.glassesCount(); + + return Seed({ + background: uint48( + uint48(pseudorandomness) % backgroundCount + ), + body: uint48( + uint48(pseudorandomness >> 48) % bodyCount + ), + accessory: uint48( + uint48(pseudorandomness >> 96) % accessoryCount + ), + head: uint48( + uint48(pseudorandomness >> 144) % headCount + ), + glasses: uint48( + uint48(pseudorandomness >> 192) % glassesCount + ) + }); + } +} diff --git a/contract/contracts/pNouns/interfaces/INounsDescriptor.sol b/contract/contracts/pNouns/interfaces/INounsDescriptor.sol new file mode 100644 index 00000000..6c676f6a --- /dev/null +++ b/contract/contracts/pNouns/interfaces/INounsDescriptor.sol @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsDescriptor + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsSeeder } from './INounsSeeder.sol'; +import { INounsDescriptorMinimal } from './INounsDescriptorMinimal.sol'; + +interface INounsDescriptor is INounsDescriptorMinimal { + event PartsLocked(); + + event DataURIToggled(bool enabled); + + event BaseURIUpdated(string baseURI); + + function arePartsLocked() external returns (bool); + + function isDataURIEnabled() external returns (bool); + + function baseURI() external returns (string memory); + + function palettes(uint8 paletteIndex, uint256 colorIndex) external view returns (string memory); + + function backgrounds(uint256 index) external view returns (string memory); + + function bodies(uint256 index) external view returns (bytes memory); + + function accessories(uint256 index) external view returns (bytes memory); + + function heads(uint256 index) external view returns (bytes memory); + + function glasses(uint256 index) external view returns (bytes memory); + + function backgroundCount() external view override returns (uint256); + + function bodyCount() external view override returns (uint256); + + function accessoryCount() external view override returns (uint256); + + function headCount() external view override returns (uint256); + + function glassesCount() external view override returns (uint256); + + function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external; + + function addManyBackgrounds(string[] calldata backgrounds) external; + + function addManyBodies(bytes[] calldata bodies) external; + + function addManyAccessories(bytes[] calldata accessories) external; + + function addManyHeads(bytes[] calldata heads) external; + + function addManyGlasses(bytes[] calldata glasses) external; + + function addColorToPalette(uint8 paletteIndex, string calldata color) external; + + function addBackground(string calldata background) external; + + function addBody(bytes calldata body) external; + + function addAccessory(bytes calldata accessory) external; + + function addHead(bytes calldata head) external; + + function addGlasses(bytes calldata glasses) external; + + function lockParts() external; + + function toggleDataURIEnabled() external; + + function setBaseURI(string calldata baseURI) external; + + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory); + + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory); + + function genericDataURI( + string calldata name, + string calldata description, + INounsSeeder.Seed memory seed + ) external view returns (string memory); + + function generateSVGImage(INounsSeeder.Seed memory seed) external view returns (string memory); +} diff --git a/contract/contracts/pNouns/interfaces/INounsDescriptorMinimal.sol b/contract/contracts/pNouns/interfaces/INounsDescriptorMinimal.sol new file mode 100644 index 00000000..c49d4c86 --- /dev/null +++ b/contract/contracts/pNouns/interfaces/INounsDescriptorMinimal.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Common interface for NounsDescriptor versions, as used by NounsToken and NounsSeeder. + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsSeeder } from './INounsSeeder.sol'; + +interface INounsDescriptorMinimal { + /// + /// USED BY TOKEN + /// + + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view returns (string memory); + + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view returns (string memory); + + /// + /// USED BY SEEDER + /// + + function backgroundCount() external view returns (uint256); + + function bodyCount() external view returns (uint256); + + function accessoryCount() external view returns (uint256); + + function headCount() external view returns (uint256); + + function glassesCount() external view returns (uint256); +} diff --git a/contract/contracts/pNouns/interfaces/INounsSeeder.sol b/contract/contracts/pNouns/interfaces/INounsSeeder.sol new file mode 100644 index 00000000..8b1b3f62 --- /dev/null +++ b/contract/contracts/pNouns/interfaces/INounsSeeder.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsSeeder + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsDescriptorMinimal } from './INounsDescriptorMinimal.sol'; + +interface INounsSeeder { + struct Seed { + uint48 background; + uint48 body; + uint48 accessory; + uint48 head; + uint48 glasses; + } + + function generateSeed(uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory); +} diff --git a/contract/hardhat.config.ts b/contract/hardhat.config.ts index f1ebb4b3..588312a0 100644 --- a/contract/hardhat.config.ts +++ b/contract/hardhat.config.ts @@ -15,6 +15,13 @@ const config: HardhatUserConfig = { solidity: "0.8.17", defaultNetwork: "localhost", networks: { + polygon: { + url: "https://polygon-mainnet.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY, + // gasMultiplier: 1.7, + gasPrice: 110_000_000_000, // 100 Gwei in wei + accounts: + process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], + }, mumbai: { // url: "https://rpc-mumbai.maticvigil.com", url: "https://polygon-mumbai.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY, diff --git a/contract/scripts/deploy_nounsDescriptorV1.ts b/contract/scripts/deploy_nounsDescriptorV1.ts index 9836f38e..5aeee6ed 100644 --- a/contract/scripts/deploy_nounsDescriptorV1.ts +++ b/contract/scripts/deploy_nounsDescriptorV1.ts @@ -9,13 +9,18 @@ import addresses from '@nouns/sdk/dist/contract/addresses.json'; async function main() { + const factoryNounsSeeder = await ethers.getContractFactory('NounsSeeder'); + const nounsSeeder = await factoryNounsSeeder.deploy(); + await nounsSeeder.deployed(); + console.log(`##nounsSeeder="${nounsSeeder.address}"`); + await runCommand(`npx hardhat verify ${nounsSeeder.address} --network ${network.name} &`); + const factoryNFTDescriptor = await ethers.getContractFactory('NFTDescriptor'); const nftDescriptor = await factoryNFTDescriptor.deploy(); await nftDescriptor.deployed(); console.log(`##nftDescriptor="${nftDescriptor.address}"`); await runCommand(`npx hardhat verify ${nftDescriptor.address} --network ${network.name} &`); - const factoryNounsDescriptor = await ethers.getContractFactory('NounsDescriptor', { libraries: { NFTDescriptor: nftDescriptor.address, diff --git a/contract/scripts/populate_nounsV1.ts b/contract/scripts/populate_nounsV1.ts index 6b0825eb..7fbee025 100644 --- a/contract/scripts/populate_nounsV1.ts +++ b/contract/scripts/populate_nounsV1.ts @@ -7,52 +7,60 @@ import { abi as nounsDescriptorABI } from "../artifacts/contracts/external/nouns dotenv.config(); -const nounsDescriptorAddress: string = '0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107'; +const nounsDescriptorAddress: string = '0x3578311a15f23a290ED8CAE2ed3DA096a6F9d943'; async function main() { - const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + var privateKey; + if (network.name == "localhost") { + privateKey = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'; + } else { + privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + } const wallet = new ethers.Wallet(privateKey, ethers.provider); // const [wallet] = await ethers.getSigners(); // localhost // ethers.Contract オブジェクトのインスタンスを作成 const nounsDescriptor = new ethers.Contract(nounsDescriptorAddress, nounsDescriptorABI, wallet); + const feeData = await ethers.provider.getFeeData(); + console.log("feeData:" + feeData.gasPrice); + if (true) { - console.log(`set Palette start`); - await nounsDescriptor.addManyColorsToPalette(0, palette); - console.log(`set Palette end`); + // console.log(`set Palette start`); + // await nounsDescriptor.addManyColorsToPalette(0, palette, { gasPrice: feeData.gasPrice }); + // console.log(`set Palette end`); - console.log(`set Accessories start`); - const accessoryChunk = chunkArray(images.accessories, 10); - for (const chunk of accessoryChunk) { - await nounsDescriptor.addManyAccessories(chunk.map(({ data }) => data)); - } - console.log(`set Accessories end`); + // console.log(`set Accessories start`); + // const accessoryChunk = chunkArray(images.accessories, 10); + // for (const chunk of accessoryChunk) { + // await nounsDescriptor.addManyAccessories(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); + // } + // console.log(`set Accessories end`); - console.log(`set Bodies start`); - const bodiesChunk = chunkArray(images.bodies, 10); - for (const chunk of bodiesChunk) { - await nounsDescriptor.addManyBodies(chunk.map(({ data }) => data)); - } - console.log(`set Bodies end`); + // console.log(`set Bodies start`); + // const bodiesChunk = chunkArray(images.bodies, 10); + // for (const chunk of bodiesChunk) { + // await nounsDescriptor.addManyBodies(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); + // } + // console.log(`set Bodies end`); console.log(`set heads start`); - const headChunk = chunkArray(images.heads, 10); + const headChunk = chunkArray(images.heads, 5); for (const chunk of headChunk) { - await nounsDescriptor.addManyHeads(chunk.map(({ data }) => data)); + await nounsDescriptor.addManyHeads(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); } console.log(`set heads end`); console.log(`set glasses start`); const glassesChunk = chunkArray(images.glasses, 10); for (const chunk of glassesChunk) { - await nounsDescriptor.addManyGlasses(chunk.map(({ data }) => data)); + await nounsDescriptor.addManyGlasses(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); } console.log(`set glasses end`); console.log(`set backgrounds start`); - await nounsDescriptor.addManyBackgrounds(bgcolors); + await nounsDescriptor.addManyBackgrounds(bgcolors, { gasPrice: feeData.gasPrice }); console.log(`set backgrounds end`); } diff --git a/contract/scripts/test_nounsV1.ts b/contract/scripts/test_nounsV1.ts new file mode 100644 index 00000000..6915c86d --- /dev/null +++ b/contract/scripts/test_nounsV1.ts @@ -0,0 +1,43 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; + +import { images, palette, bgcolors } from "../test/image-original-nouns-data"; +// import { abi as nounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as nounsDescriptorABI } from "../artifacts/contracts/external/nouns/NounsDescripter.sol/NounsDescriptor"; + +dotenv.config(); + +const nounsDescriptorAddress: string = '0x4DCD10c8Da99C062E06dc28f7a26917B3D45dC73'; + +async function main() { + var privateKey; + if (network.name == "localhost") { + privateKey = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'; + } else { + privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + } + const wallet = new ethers.Wallet(privateKey, ethers.provider); + // const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const nounsDescriptor = new ethers.Contract(nounsDescriptorAddress, nounsDescriptorABI, wallet); + + const seed = { + background: 0, body: 14, accessory: 132, head: 94, glasses: 18 + }; + + const svg = await nounsDescriptor.generateSVGImage(seed); + console.log(svg); + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + + +interface ImageData { + filename: string; + data: string; +} diff --git a/src/utils/addresses/londrina_solid_localhost.ts b/src/utils/addresses/londrina_solid_localhost.ts index 164a2604..d68f9caa 100644 --- a/src/utils/addresses/londrina_solid_localhost.ts +++ b/src/utils/addresses/londrina_solid_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - font: "0xDDa0648FA8c9cD593416EC37089C2a2E6060B45c", -}; + font:"0x15cAbd0536f9707d1c03b21dDdC556726D7FF136", +} diff --git a/src/utils/addresses/londrina_solid_mumbai.ts b/src/utils/addresses/londrina_solid_mumbai.ts index 13758194..294b4592 100644 --- a/src/utils/addresses/londrina_solid_mumbai.ts +++ b/src/utils/addresses/londrina_solid_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - font: "0xF3636358069588D2A16a81d27e7e8cB15Eb3827B", -}; + font:"0xD0A75dF37c7E40361789886740287FbFB8cF6cd3", +} diff --git a/src/utils/addresses/londrina_solid_polygon.ts b/src/utils/addresses/londrina_solid_polygon.ts new file mode 100644 index 00000000..64349bc4 --- /dev/null +++ b/src/utils/addresses/londrina_solid_polygon.ts @@ -0,0 +1,3 @@ +export const addresses = { + font:"0x1183F445E209051ecB8f0c062153F2b2110F806A", +} From e61cb0177136afce0b330a39703a5a64313d7628 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sat, 5 Aug 2023 09:44:36 +0900 Subject: [PATCH 054/146] write to address file --- contract/scripts/deploy_localNouns.ts | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index 811ad549..986df9ff 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -1,10 +1,6 @@ import { ethers, network } from 'hardhat'; import { exec } from 'child_process'; -import addresses from '@nouns/sdk/dist/contract/addresses.json'; - -// const nounsDescriptor: string = network.name == 'goerli' ? addresses[5].nounsDescriptor : addresses[1].nounsDescriptor; -// const nounsSeeder: string = network.name == 'goerli' ? addresses[5].nounsSeeder : addresses[1].nounsSeeder; -// const nftDescriptor: string = network.name == 'goerli' ? addresses[5].nftDescriptor : addresses[1].nftDescriptor; +import { writeFile } from 'fs'; const nounsDescriptor: string = '0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107'; // mumbai const nounsSeeder: string = '0x5f5C984E0BAf150D5a74ae21f4777Fd1947DE8c9'; // mumbai @@ -25,6 +21,10 @@ async function main() { console.log(`##localseeder="${localseeder.address}"`); await runCommand(`npx hardhat verify ${localseeder.address} --network ${network.name} &`); + const addresses = `export const addresses = {\n` + ` localseeder:"${localseeder.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localseeder_${network.name}.ts`, addresses, () => {}); + + const factoryLocalNounsDescriptor = await ethers.getContractFactory('LocalNounsDescriptor', { libraries: { NFTDescriptor: nftDescriptor, @@ -37,18 +37,29 @@ async function main() { console.log(`##localNounsDescriptor="${localNounsDescriptor.address}"`); await runCommand(`npx hardhat verify ${localNounsDescriptor.address} ${nounsDescriptor} --network ${network.name} &`); + const addresses2 = `export const addresses = {\n` + ` localNounsDescriptor:"${localNounsDescriptor.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsDescriptor_${network.name}.ts`, addresses2, () => {}); + + const factorySVGStore = await ethers.getContractFactory('LocalNounsProvider'); const provider = await factorySVGStore.deploy(nounsDescriptor, localNounsDescriptor.address, nounsSeeder, localseeder.address); await provider.deployed(); console.log(`##LocalNounsProvider="${provider.address}"`); await runCommand(`npx hardhat verify ${provider.address} ${nounsDescriptor} ${localNounsDescriptor.address} ${nounsSeeder} ${localseeder.address} --network ${network.name} &`); + const addresses3 = `export const addresses = {\n` + ` localNounsProvider:"${provider.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsProvider_${network.name}.ts`, addresses3, () => {}); + + const factoryToken = await ethers.getContractFactory('LocalNounsToken'); const token = await factoryToken.deploy(provider.address, committee, committee, committee); await token.deployed(); console.log(`##LocalNounsToken="${token.address}"`); await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${committee} ${committee} ${committee} --network ${network.name} &`); + const addresses4 = `export const addresses = {\n` + ` localNounsToken:"${token.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsToken${network.name}.ts`, addresses4, () => {}); + } async function runCommand(command: string) { From 0f06cc067d639e212e95ba3ee6386c8de55718ef Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 10 Aug 2023 06:21:06 +0900 Subject: [PATCH 055/146] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA=E3=82=B3?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/deploy_localNouns.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index 986df9ff..e20c8c5f 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -1,14 +1,11 @@ import { ethers, network } from 'hardhat'; import { exec } from 'child_process'; import { writeFile } from 'fs'; +import { addresses } from '../../src/utils/addresses'; -const nounsDescriptor: string = '0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107'; // mumbai -const nounsSeeder: string = '0x5f5C984E0BAf150D5a74ae21f4777Fd1947DE8c9'; // mumbai -const nftDescriptor: string = '0xC93218fF7C44cbEB57c7661DCa886deCBc0E07C0'; // mumbai - -// const nounsDescriptor: string = '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0'; // localhost -// const nounsSeeder: string = '0x5FC8d32690cc91D4c39d9d3abcBD16989F875707'; // localhost -// const nftDescriptor: string = '0x5FbDB2315678afecb367f032d93F642f64180aa3'; // localhost +const nounsDescriptor = addresses.nounsDescriptor[network.name]; +const nounsSeeder = addresses.nounsSeeder[network.name]; +const nftDescriptor = addresses.nftDescriptor[network.name]; const committee = "0x52A76a606AC925f7113B4CC8605Fe6bCad431EbB"; // const committee = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"; // localhost From 0325add97fccd6e5e62e6f3102f3a92062fd5b61 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 10 Aug 2023 08:05:01 +0900 Subject: [PATCH 056/146] set contract address to external file --- src/utils/addresses.ts | 12 ++++++++++++ src/utils/addresses/localNounsDescriptor_mumbai.ts | 3 +++ src/utils/addresses/localNounsProvider_mumbai.ts | 3 +++ src/utils/addresses/localNounsTokenmumbai.ts | 3 +++ src/utils/addresses/localseeder_mumbai.ts | 3 +++ src/utils/addresses/nftDescriptor_mumbai.ts | 3 +++ src/utils/addresses/nounsDescriptor_mumbai.ts | 3 +++ src/utils/addresses/nounsSeeder_mumbai.ts | 3 +++ 8 files changed, 33 insertions(+) create mode 100644 src/utils/addresses/localNounsDescriptor_mumbai.ts create mode 100644 src/utils/addresses/localNounsProvider_mumbai.ts create mode 100644 src/utils/addresses/localNounsTokenmumbai.ts create mode 100644 src/utils/addresses/localseeder_mumbai.ts create mode 100644 src/utils/addresses/nftDescriptor_mumbai.ts create mode 100644 src/utils/addresses/nounsDescriptor_mumbai.ts create mode 100644 src/utils/addresses/nounsSeeder_mumbai.ts diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index cb621e09..ce10e4ea 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -80,6 +80,9 @@ import { addresses as messageprovider_mumbai } from "./addresses/messageprovider import { addresses as messagetoken_goerli } from "./addresses/messagetoken_goerli"; import { addresses as messagetoken_localhost } from "./addresses/messagetoken_localhost"; import { addresses as messagetoken_mumbai } from "./addresses/messagetoken_mumbai"; +import { addresses as nounsDescriptor_mumbai } from "./addresses/nounsDescriptor_mumbai"; +import { addresses as nounsSeeder_mumbai } from "./addresses/nounsSeeder_mumbai"; +import { addresses as nftDescriptor_mumbai } from "./addresses/nftDescriptor_mumbai"; export interface Addresses { [key: string]: { [key: string]: string }; @@ -295,4 +298,13 @@ export const addresses: Addresses = { mainnet: dynamic_mainnet.tokenGate, goerli: dynamic_goerli.tokenGate, }, + nounsDescriptor: { + mumbai: nounsDescriptor_mumbai.nounsDescriptor, + }, + nounsSeeder: { + mumbai: nounsSeeder_mumbai.nounsSeeder, + }, + nftDescriptor: { + mumbai: nftDescriptor_mumbai.nftDescriptor, + }, }; diff --git a/src/utils/addresses/localNounsDescriptor_mumbai.ts b/src/utils/addresses/localNounsDescriptor_mumbai.ts new file mode 100644 index 00000000..c0fa5448 --- /dev/null +++ b/src/utils/addresses/localNounsDescriptor_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsDescriptor:"0x1A88f19d94ceCe2A352E8178ddF570855317C15d", +} diff --git a/src/utils/addresses/localNounsProvider_mumbai.ts b/src/utils/addresses/localNounsProvider_mumbai.ts new file mode 100644 index 00000000..458b6da9 --- /dev/null +++ b/src/utils/addresses/localNounsProvider_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsProvider:"0x6AE64719EB925B7a1d935d45F24A30094a12C9D4", +} diff --git a/src/utils/addresses/localNounsTokenmumbai.ts b/src/utils/addresses/localNounsTokenmumbai.ts new file mode 100644 index 00000000..7525e8d9 --- /dev/null +++ b/src/utils/addresses/localNounsTokenmumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsToken:"0x1f26A1E07bF4e939144EE85833EFdEB46859AbBB", +} diff --git a/src/utils/addresses/localseeder_mumbai.ts b/src/utils/addresses/localseeder_mumbai.ts new file mode 100644 index 00000000..de28d0f1 --- /dev/null +++ b/src/utils/addresses/localseeder_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + localseeder:"0x6eE769B88423F0bddAEdb4Cd8C188b5a4366814D", +} diff --git a/src/utils/addresses/nftDescriptor_mumbai.ts b/src/utils/addresses/nftDescriptor_mumbai.ts new file mode 100644 index 00000000..0631487f --- /dev/null +++ b/src/utils/addresses/nftDescriptor_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + nftDescriptor: "0xC93218fF7C44cbEB57c7661DCa886deCBc0E07C0", +} diff --git a/src/utils/addresses/nounsDescriptor_mumbai.ts b/src/utils/addresses/nounsDescriptor_mumbai.ts new file mode 100644 index 00000000..b62e697d --- /dev/null +++ b/src/utils/addresses/nounsDescriptor_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + nounsDescriptor: "0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107", +} diff --git a/src/utils/addresses/nounsSeeder_mumbai.ts b/src/utils/addresses/nounsSeeder_mumbai.ts new file mode 100644 index 00000000..aa8f7c21 --- /dev/null +++ b/src/utils/addresses/nounsSeeder_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + nounsSeeder: "0x5f5C984E0BAf150D5a74ae21f4777Fd1947DE8c9", +} From d3e4ec67b16ae1e6706c2af43553301de7b9d81a Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 10 Aug 2023 08:08:55 +0900 Subject: [PATCH 057/146] add underscore --- contract/scripts/deploy_localNouns.ts | 2 +- .../{localNounsTokenmumbai.ts => localNounsToken_mumbai.ts} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/utils/addresses/{localNounsTokenmumbai.ts => localNounsToken_mumbai.ts} (100%) diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index e20c8c5f..7e930546 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -55,7 +55,7 @@ async function main() { await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${committee} ${committee} ${committee} --network ${network.name} &`); const addresses4 = `export const addresses = {\n` + ` localNounsToken:"${token.address}",\n` + `}\n`; - await writeFile(`../src/utils/addresses/localNounsToken${network.name}.ts`, addresses4, () => {}); + await writeFile(`../src/utils/addresses/localNounsToken_${network.name}.ts`, addresses4, () => {}); } diff --git a/src/utils/addresses/localNounsTokenmumbai.ts b/src/utils/addresses/localNounsToken_mumbai.ts similarity index 100% rename from src/utils/addresses/localNounsTokenmumbai.ts rename to src/utils/addresses/localNounsToken_mumbai.ts From 350e98dd45afbc3e2cd4c557c4a2e67da97af5db Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 10 Aug 2023 09:02:54 +0900 Subject: [PATCH 058/146] format --- .../localNouns/LocalNounsProvider.sol | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index e78f59f7..4d852ef1 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -23,26 +23,26 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { address public receiver; uint256 public nextTokenId; - + INounsDescriptor public immutable descriptor; INounsDescriptor public immutable localDescriptor; INounsSeeder public immutable seeder; ILocalNounsSeeder public immutable localSeader; - + mapping(uint256 => INounsSeeder.Seed) public seeds; constructor( - INounsDescriptor _descriptor, - INounsDescriptor _localDescriptor, - INounsSeeder _seeder, - ILocalNounsSeeder _localSeader - ) { - receiver = owner(); - - descriptor = _descriptor; - localDescriptor = _localDescriptor; - seeder = _seeder; - localSeader = _localSeader; + INounsDescriptor _descriptor, + INounsDescriptor _localDescriptor, + INounsSeeder _seeder, + ILocalNounsSeeder _localSeader + ) { + receiver = owner(); + + descriptor = _descriptor; + localDescriptor = _localDescriptor; + seeder = _seeder; + localSeader = _localSeader; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { @@ -71,27 +71,30 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { receiver = _receiver; } - function generateSeed(uint256 prefectureId, uint256 _assetId) internal view returns (INounsSeeder.Seed memory mixedSeed) { - INounsSeeder.Seed memory seed1 = seeder.generateSeed(_assetId, descriptor); - ILocalNounsSeeder.Seed memory seed2 = localSeader.generateSeed(prefectureId, _assetId, localDescriptor); - - mixedSeed = INounsSeeder.Seed({ - background: seed1.background, - body: seed1.body, - accessory: seed2.accessory, - head: seed2.head, - glasses: seed1.glasses - }); - + function generateSeed( + uint256 prefectureId, + uint256 _assetId + ) internal view returns (INounsSeeder.Seed memory mixedSeed) { + INounsSeeder.Seed memory seed1 = seeder.generateSeed(_assetId, descriptor); + ILocalNounsSeeder.Seed memory seed2 = localSeader.generateSeed(prefectureId, _assetId, localDescriptor); + + mixedSeed = INounsSeeder.Seed({ + background: seed1.background, + body: seed1.body, + accessory: seed2.accessory, + head: seed2.head, + glasses: seed1.glasses + }); } + function generateSVGPart(uint256 _assetId) public view override returns (string memory svgPart, string memory tag) { - // INounsSeeder.Seed memory seed = generateSeed(_assetId); - INounsSeeder.Seed memory seed = seeds[_assetId]; - svgPart = localDescriptor.generateSVGImage(seed); + // INounsSeeder.Seed memory seed = generateSeed(_assetId); + INounsSeeder.Seed memory seed = seeds[_assetId]; + svgPart = localDescriptor.generateSVGImage(seed); - // generateSVGImage - tag = string(""); - // svgPart = string(""); + // generateSVGImage + tag = string(''); + // svgPart = string(""); } function generateTraits(uint256 _assetId) external pure override returns (string memory traits) { @@ -99,14 +102,11 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { } function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256) { - if (nextTokenId == _assetId) { - seeds[_assetId] = generateSeed(prefectureId, _assetId); - nextTokenId ++; - } - - return _assetId; - } - - + if (nextTokenId == _assetId) { + seeds[_assetId] = generateSeed(prefectureId, _assetId); + nextTokenId++; + } + return _assetId; + } } From 97e7f11edf76d0cb121b1b0e191e0c3c24a8e512 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 10 Aug 2023 10:00:29 +0900 Subject: [PATCH 059/146] set prefecture name to Trait --- .../localNouns/LocalNounsProvider.sol | 57 ++++++++++++++++++- contract/scripts/populate_localNouns.ts | 14 +++-- src/utils/addresses.ts | 17 ++++++ 3 files changed, 81 insertions(+), 7 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index 4d852ef1..ac2cb77e 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -30,6 +30,8 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { ILocalNounsSeeder public immutable localSeader; mapping(uint256 => INounsSeeder.Seed) public seeds; + mapping(uint256 => uint256) public tokenIdToPrefectureId; + mapping(uint256 => string) public prefectureName; constructor( INounsDescriptor _descriptor, @@ -43,6 +45,54 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { localDescriptor = _localDescriptor; seeder = _seeder; localSeader = _localSeader; + + prefectureName[1] = 'Hokkaido'; + prefectureName[2] = 'Aomori'; + prefectureName[3] = 'Iwate'; + prefectureName[4] = 'Miyagi'; + prefectureName[5] = 'Akita'; + prefectureName[6] = 'Yamagata'; + prefectureName[7] = 'Fukushima'; + prefectureName[8] = 'Ibaraki'; + prefectureName[9] = 'Tochigi'; + prefectureName[10] = 'Gunma'; + prefectureName[11] = 'Saitama'; + prefectureName[12] = 'Chiba'; + prefectureName[13] = 'Tokyo'; + prefectureName[14] = 'Kanagawa'; + prefectureName[15] = 'Niigata'; + prefectureName[16] = 'Toyama'; + prefectureName[17] = 'Ishikawa'; + prefectureName[18] = 'Fukui'; + prefectureName[19] = 'Yamanashi'; + prefectureName[20] = 'Nagano'; + prefectureName[21] = 'Gifu'; + prefectureName[22] = 'Shizuoka'; + prefectureName[23] = 'Aichi'; + prefectureName[24] = 'Mie'; + prefectureName[25] = 'Shiga'; + prefectureName[26] = 'Kyoto'; + prefectureName[27] = 'Osaka'; + prefectureName[28] = 'Hyogo'; + prefectureName[29] = 'Nara'; + prefectureName[30] = 'Wakayama'; + prefectureName[31] = 'Tottori'; + prefectureName[32] = 'Shimane'; + prefectureName[33] = 'Okayama'; + prefectureName[34] = 'Hiroshima'; + prefectureName[35] = 'Yamaguchi'; + prefectureName[36] = 'Tokushima'; + prefectureName[37] = 'Kagawa'; + prefectureName[38] = 'Ehime'; + prefectureName[39] = 'Kochi'; + prefectureName[40] = 'Fukuoka'; + prefectureName[41] = 'Saga'; + prefectureName[42] = 'Nagasaki'; + prefectureName[43] = 'Kumamoto'; + prefectureName[44] = 'Oita'; + prefectureName[45] = 'Miyazaki'; + prefectureName[46] = 'Kagoshima'; + prefectureName[47] = 'Okinawa'; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { @@ -97,13 +147,16 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { // svgPart = string(""); } - function generateTraits(uint256 _assetId) external pure override returns (string memory traits) { - // nothing to return + function generateTraits(uint256 _assetId) external view override returns (string memory traits) { + traits = string( + abi.encodePacked('{"trait_type": "prefecture" , "value":"', prefectureName[tokenIdToPrefectureId[_assetId]], '"}') + ); } function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256) { if (nextTokenId == _assetId) { seeds[_assetId] = generateSeed(prefectureId, _assetId); + tokenIdToPrefectureId[_assetId] = prefectureId; nextTokenId++; } diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts index 40d853fa..b17ca273 100644 --- a/contract/scripts/populate_localNouns.ts +++ b/contract/scripts/populate_localNouns.ts @@ -1,6 +1,8 @@ import * as dotenv from "dotenv"; import { ethers, network } from 'hardhat'; -import * as fs from 'fs'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; import { images, palette } from "../test/image-local-data"; import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; @@ -10,12 +12,14 @@ import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol dotenv.config(); -const localSeederAddress: string = '0xD00fa9C531CEE42ba319B5Bda19c60e54BEddA41'; -const localNounsDescriptorAddress: string = '0xA4D4793f2fFafb1E7278C80565FA7252Ef146623'; -const localProviderAddress: string = '0xDC00D91b1FE2bc91C241Ae1E03b30F867789E83e'; -const localTokenAddress: string = '0x4958bb35e1aEA77133E46f042d0b5d373141E759'; + +const localSeederAddress = addresses.localSeeder[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const localProviderAddress = addresses.localProvider[network.name]; +const localTokenAddress = addresses.localNounsToken[network.name]; async function main() { + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; const wallet = new ethers.Wallet(privateKey, ethers.provider); // const [wallet] = await ethers.getSigners(); // localhost diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index ce10e4ea..d0e62ddc 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -83,6 +83,10 @@ import { addresses as messagetoken_mumbai } from "./addresses/messagetoken_mumba import { addresses as nounsDescriptor_mumbai } from "./addresses/nounsDescriptor_mumbai"; import { addresses as nounsSeeder_mumbai } from "./addresses/nounsSeeder_mumbai"; import { addresses as nftDescriptor_mumbai } from "./addresses/nftDescriptor_mumbai"; +import { addresses as localSeeder_mumbai } from "./addresses/localseeder_mumbai"; +import { addresses as localNounsDescriptor_mumbai } from "./addresses/localNounsDescriptor_mumbai"; +import { addresses as localProvider_mumbai } from "./addresses/localNounsProvider_mumbai"; +import { addresses as localNounsToken_mumbai } from "./addresses/localNounsToken_mumbai"; export interface Addresses { [key: string]: { [key: string]: string }; @@ -307,4 +311,17 @@ export const addresses: Addresses = { nftDescriptor: { mumbai: nftDescriptor_mumbai.nftDescriptor, }, + + localSeeder: { + mumbai: localSeeder_mumbai.localseeder, + }, + localNounsDescriptor: { + mumbai: localNounsDescriptor_mumbai.localNounsDescriptor, + }, + localProvider: { + mumbai: localProvider_mumbai.localNounsProvider, + }, + localNounsToken: { + mumbai: localNounsToken_mumbai.localNounsToken, + }, }; From 234898d37cd1d3e91f29627b8cabb5e8746d9c76 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 10 Aug 2023 10:32:02 +0900 Subject: [PATCH 060/146] Correct typos --- contract/contracts/localNouns/LocalNounsProvider.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index ac2cb77e..50503993 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -27,7 +27,7 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { INounsDescriptor public immutable descriptor; INounsDescriptor public immutable localDescriptor; INounsSeeder public immutable seeder; - ILocalNounsSeeder public immutable localSeader; + ILocalNounsSeeder public immutable localSeeder; mapping(uint256 => INounsSeeder.Seed) public seeds; mapping(uint256 => uint256) public tokenIdToPrefectureId; @@ -37,14 +37,14 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { INounsDescriptor _descriptor, INounsDescriptor _localDescriptor, INounsSeeder _seeder, - ILocalNounsSeeder _localSeader + ILocalNounsSeeder _localSeeder ) { receiver = owner(); descriptor = _descriptor; localDescriptor = _localDescriptor; seeder = _seeder; - localSeader = _localSeader; + localSeeder = _localSeeder; prefectureName[1] = 'Hokkaido'; prefectureName[2] = 'Aomori'; @@ -126,7 +126,7 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { uint256 _assetId ) internal view returns (INounsSeeder.Seed memory mixedSeed) { INounsSeeder.Seed memory seed1 = seeder.generateSeed(_assetId, descriptor); - ILocalNounsSeeder.Seed memory seed2 = localSeader.generateSeed(prefectureId, _assetId, localDescriptor); + ILocalNounsSeeder.Seed memory seed2 = localSeeder.generateSeed(prefectureId, _assetId, localDescriptor); mixedSeed = INounsSeeder.Seed({ background: seed1.background, From a30e9b8b417685e614f531fbca38c56cbaf1c2b3 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sun, 13 Aug 2023 08:04:09 +0900 Subject: [PATCH 061/146] =?UTF-8?q?commitie,developper,desighner=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 47 ++++++++------------------ 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index ea32159a..230f2cd0 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -14,38 +14,26 @@ import './localNouns/interfaces/IAssetProviderExMint.sol'; contract LocalNounsToken is ProviderTokenA1 { using Strings for uint256; - // fes committee - address public committee; - address public designer; - address public developper; - IAssetProviderExMint public assetProvider2; - constructor( - IAssetProviderExMint _assetProvider, - address _committee, - address _designer, - address _developper - ) ProviderTokenA1(_assetProvider, 'Local Nouns', 'Local Nouns') { + constructor(IAssetProviderExMint _assetProvider) ProviderTokenA1(_assetProvider, 'Local Nouns', 'Local Nouns') { description = 'Local Nouns Token.'; assetProvider2 = _assetProvider; - mintPrice = 1e13; // 0.001 + mintPrice = 1e13; // 0.001 mintLimit = 5000; - committee = _committee; - designer = _designer; - developper = _developper; } function tokenName(uint256 _tokenId) internal pure override returns (string memory) { return string(abi.encodePacked('Local Nouns ', _tokenId.toString())); } + function tokenURI(uint256 _tokenId) public view override returns (string memory) { - require(_tokenId < _nextTokenId(), 'LocalNounsToken.tokenURI: nonexistent token'); + require(_tokenId < _nextTokenId(), 'LocalNounsToken.tokenURI: nonexistent token'); + + (string memory svgPart, string memory tag) = assetProvider2.generateSVGPart(_tokenId); + bytes memory image = bytes(svgPart); - (string memory svgPart, string memory tag) = assetProvider2.generateSVGPart(_tokenId); - bytes memory image = bytes(svgPart); - - return + return string( abi.encodePacked( 'data:application/json;base64,', @@ -67,19 +55,12 @@ contract LocalNounsToken is ProviderTokenA1 { ) ); } + function mint(uint256 prefectureId) public payable virtual returns (uint256 tokenId) { - require(msg.value >= mintPrice, 'Must send the mint price'); - assetProvider2.mint(prefectureId, _nextTokenId()); - super.mint(); - address payable payableTo = payable(committee); - payableTo.transfer(address(this).balance); - - // if ((_nextTokenId() % 10) == 8) { - // assetProvider2.mint(_nextTokenId()); - // _safeMint(designer, 1); - // assetProvider2.mint(_nextTokenId()); - // _safeMint(developper, 1); - // } - return _nextTokenId() - 1; + require(msg.value >= mintPrice, 'Must send the mint price'); + assetProvider2.mint(prefectureId, _nextTokenId()); + super.mint(); + + return _nextTokenId() - 1; } } From aeb569c30bd156a2fbe22ad9c8d0d0be7d5cd91a Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sun, 13 Aug 2023 09:00:23 +0900 Subject: [PATCH 062/146] =?UTF-8?q?minter=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 8 ++++++-- contract/scripts/deploy_localNouns.ts | 10 +++++----- contract/scripts/populate_localNouns.ts | 6 +++--- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 230f2cd0..8725e088 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -15,12 +15,15 @@ contract LocalNounsToken is ProviderTokenA1 { using Strings for uint256; IAssetProviderExMint public assetProvider2; + address public minter; - constructor(IAssetProviderExMint _assetProvider) ProviderTokenA1(_assetProvider, 'Local Nouns', 'Local Nouns') { + constructor(IAssetProviderExMint _assetProvider, address _minter) ProviderTokenA1(_assetProvider, 'Local Nouns', 'Local Nouns') { description = 'Local Nouns Token.'; assetProvider2 = _assetProvider; - mintPrice = 1e13; // 0.001 + // mintPrice = 1e13; // 0.001 + mintPrice = 0; mintLimit = 5000; + minter = _minter; } function tokenName(uint256 _tokenId) internal pure override returns (string memory) { @@ -58,6 +61,7 @@ contract LocalNounsToken is ProviderTokenA1 { function mint(uint256 prefectureId) public payable virtual returns (uint256 tokenId) { require(msg.value >= mintPrice, 'Must send the mint price'); + require(msg.sender != minter, 'sender is not the minter'); assetProvider2.mint(prefectureId, _nextTokenId()); super.mint(); diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index 7e930546..122daf65 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -7,11 +7,11 @@ const nounsDescriptor = addresses.nounsDescriptor[network.name]; const nounsSeeder = addresses.nounsSeeder[network.name]; const nftDescriptor = addresses.nftDescriptor[network.name]; -const committee = "0x52A76a606AC925f7113B4CC8605Fe6bCad431EbB"; -// const committee = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"; // localhost - async function main() { + const [minter] = await ethers.getSigners(); + console.log(`##minter="${minter}"`); + const factorySeeder = await ethers.getContractFactory('LocalNounsSeeder'); const localseeder = await factorySeeder.deploy(); await localseeder.deployed(); @@ -49,10 +49,10 @@ async function main() { const factoryToken = await ethers.getContractFactory('LocalNounsToken'); - const token = await factoryToken.deploy(provider.address, committee, committee, committee); + const token = await factoryToken.deploy(provider.address, minter.address); await token.deployed(); console.log(`##LocalNounsToken="${token.address}"`); - await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${committee} ${committee} ${committee} --network ${network.name} &`); + await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${minter} --network ${network.name} &`); const addresses4 = `export const addresses = {\n` + ` localNounsToken:"${token.address}",\n` + `}\n`; await writeFile(`../src/utils/addresses/localNounsToken_${network.name}.ts`, addresses4, () => {}); diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts index b17ca273..5ed59aad 100644 --- a/contract/scripts/populate_localNouns.ts +++ b/contract/scripts/populate_localNouns.ts @@ -60,9 +60,9 @@ async function main() { for (var i: number = 1; i <= 47; i++) { try { - await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); - await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); - await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); + await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i))); + await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i))); + console.log(`mint [`, i, `]`); } catch (error) { console.error(error); From 32fe1427f60cb46a5fd9beef8e992fe986007dce Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sun, 13 Aug 2023 09:04:02 +0900 Subject: [PATCH 063/146] =?UTF-8?q?verify=E3=82=B3=E3=83=9E=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=81=AEaddress=E6=8C=87=E5=AE=9A=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/deploy_localNouns.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index 122daf65..a40ffc55 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -52,7 +52,7 @@ async function main() { const token = await factoryToken.deploy(provider.address, minter.address); await token.deployed(); console.log(`##LocalNounsToken="${token.address}"`); - await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${minter} --network ${network.name} &`); + await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${minter.address} --network ${network.name} &`); const addresses4 = `export const addresses = {\n` + ` localNounsToken:"${token.address}",\n` + `}\n`; await writeFile(`../src/utils/addresses/localNounsToken_${network.name}.ts`, addresses4, () => {}); From de72d6ab9dc92ac8d8d28c4aaba5e812a64d2477 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Tue, 15 Aug 2023 09:01:43 +0900 Subject: [PATCH 064/146] =?UTF-8?q?Minter=E3=82=B3=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=83=A9=E3=82=AF=E3=83=88=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 12 ++++-- .../contracts/localNouns/LocalNounsMinter.sol | 37 +++++++++++++++++++ .../interfaces/ILocalNounsToken.sol | 24 ++++++++++++ contract/scripts/deploy_localNouns.ts | 22 ++++++++--- contract/scripts/populate_localNouns.ts | 16 ++++---- src/utils/addresses.ts | 9 +++++ .../localNounsDescriptor_localhost.ts | 3 ++ .../addresses/localNounsDescriptor_mumbai.ts | 2 +- .../addresses/localNounsMinter_localhost.ts | 3 ++ .../addresses/localNounsMinter_mumbai.ts | 3 ++ .../addresses/localNounsProvider_localhost.ts | 3 ++ .../addresses/localNounsProvider_mumbai.ts | 2 +- .../addresses/localNounsToken_localhost.ts | 3 ++ src/utils/addresses/localNounsToken_mumbai.ts | 2 +- src/utils/addresses/localseeder_localhost.ts | 3 ++ src/utils/addresses/localseeder_mumbai.ts | 2 +- 16 files changed, 125 insertions(+), 21 deletions(-) create mode 100644 contract/contracts/localNouns/LocalNounsMinter.sol create mode 100644 contract/contracts/localNouns/interfaces/ILocalNounsToken.sol create mode 100644 src/utils/addresses/localNounsDescriptor_localhost.ts create mode 100644 src/utils/addresses/localNounsMinter_localhost.ts create mode 100644 src/utils/addresses/localNounsMinter_mumbai.ts create mode 100644 src/utils/addresses/localNounsProvider_localhost.ts create mode 100644 src/utils/addresses/localNounsToken_localhost.ts create mode 100644 src/utils/addresses/localseeder_localhost.ts diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 8725e088..f0b696db 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -10,8 +10,9 @@ import '@openzeppelin/contracts/utils/Strings.sol'; import './libs/ProviderTokenA1.sol'; import { INounsSeeder } from './localNouns/interfaces/INounsSeeder.sol'; import './localNouns/interfaces/IAssetProviderExMint.sol'; +import './localNouns/interfaces/ILocalNounsToken.sol'; -contract LocalNounsToken is ProviderTokenA1 { +contract LocalNounsToken is ProviderTokenA1, ILocalNounsToken { using Strings for uint256; IAssetProviderExMint public assetProvider2; @@ -59,12 +60,15 @@ contract LocalNounsToken is ProviderTokenA1 { ); } - function mint(uint256 prefectureId) public payable virtual returns (uint256 tokenId) { - require(msg.value >= mintPrice, 'Must send the mint price'); - require(msg.sender != minter, 'sender is not the minter'); + function mintSelectedPrefecture(uint256 prefectureId) public virtual returns (uint256 tokenId) { + require(msg.sender == minter, 'Sender is not the minter'); assetProvider2.mint(prefectureId, _nextTokenId()); super.mint(); return _nextTokenId() - 1; } + + function setMinter(address _minter) public onlyOwner { + minter = _minter; + } } diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol new file mode 100644 index 00000000..1d981dcf --- /dev/null +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsSeeder + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +import './interfaces/ILocalNounsToken.sol'; + +contract LocalNounsMinter is Ownable { + ILocalNounsToken public token; + + constructor(ILocalNounsToken _token) { + token = _token; + } + + function setLocalNounsToken(ILocalNounsToken _token) external onlyOwner { + token = _token; + } + + function mintSelectedPrefecture(uint256 _prefectureId) public payable returns (uint256 tokenId) { + return token.mintSelectedPrefecture(_prefectureId); + } +} diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol new file mode 100644 index 00000000..ccc78ce6 --- /dev/null +++ b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsSeeder + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +interface ILocalNounsToken { + function mintSelectedPrefecture(uint256 prefectureId) external returns (uint256 tokenId); + + function setMinter(address _minter) external; +} diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index a40ffc55..6f3357b4 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -10,7 +10,7 @@ const nftDescriptor = addresses.nftDescriptor[network.name]; async function main() { const [minter] = await ethers.getSigners(); - console.log(`##minter="${minter}"`); + console.log(`##minter="${minter.address}"`); const factorySeeder = await ethers.getContractFactory('LocalNounsSeeder'); const localseeder = await factorySeeder.deploy(); @@ -19,7 +19,7 @@ async function main() { await runCommand(`npx hardhat verify ${localseeder.address} --network ${network.name} &`); const addresses = `export const addresses = {\n` + ` localseeder:"${localseeder.address}",\n` + `}\n`; - await writeFile(`../src/utils/addresses/localseeder_${network.name}.ts`, addresses, () => {}); + await writeFile(`../src/utils/addresses/localseeder_${network.name}.ts`, addresses, () => { }); const factoryLocalNounsDescriptor = await ethers.getContractFactory('LocalNounsDescriptor', { @@ -35,7 +35,7 @@ async function main() { await runCommand(`npx hardhat verify ${localNounsDescriptor.address} ${nounsDescriptor} --network ${network.name} &`); const addresses2 = `export const addresses = {\n` + ` localNounsDescriptor:"${localNounsDescriptor.address}",\n` + `}\n`; - await writeFile(`../src/utils/addresses/localNounsDescriptor_${network.name}.ts`, addresses2, () => {}); + await writeFile(`../src/utils/addresses/localNounsDescriptor_${network.name}.ts`, addresses2, () => { }); const factorySVGStore = await ethers.getContractFactory('LocalNounsProvider'); @@ -45,8 +45,7 @@ async function main() { await runCommand(`npx hardhat verify ${provider.address} ${nounsDescriptor} ${localNounsDescriptor.address} ${nounsSeeder} ${localseeder.address} --network ${network.name} &`); const addresses3 = `export const addresses = {\n` + ` localNounsProvider:"${provider.address}",\n` + `}\n`; - await writeFile(`../src/utils/addresses/localNounsProvider_${network.name}.ts`, addresses3, () => {}); - + await writeFile(`../src/utils/addresses/localNounsProvider_${network.name}.ts`, addresses3, () => { }); const factoryToken = await ethers.getContractFactory('LocalNounsToken'); const token = await factoryToken.deploy(provider.address, minter.address); @@ -55,7 +54,18 @@ async function main() { await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${minter.address} --network ${network.name} &`); const addresses4 = `export const addresses = {\n` + ` localNounsToken:"${token.address}",\n` + `}\n`; - await writeFile(`../src/utils/addresses/localNounsToken_${network.name}.ts`, addresses4, () => {}); + await writeFile(`../src/utils/addresses/localNounsToken_${network.name}.ts`, addresses4, () => { }); + + const factoryMinter = await ethers.getContractFactory('LocalNounsMinter'); + const minterContract = await factoryMinter.deploy(token.address); + await minterContract.deployed(); + console.log(`##LocalNounsMinter="${minterContract.address}"`); + await runCommand(`npx hardhat verify ${minterContract.address} ${token.address} --network ${network.name} &`); + + const addresses5 = `export const addresses = {\n` + ` localNounsMinter:"${minterContract.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsMinter_${network.name}.ts`, addresses5, () => { }); + + await token.setMinter(minterContract.address); } diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts index 5ed59aad..d5720711 100644 --- a/contract/scripts/populate_localNouns.ts +++ b/contract/scripts/populate_localNouns.ts @@ -9,6 +9,7 @@ import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNo import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; +import { abi as localMinterABI } from "../artifacts/contracts/localNouns/LocalNounsMinter.sol/LocalNounsMinter"; dotenv.config(); @@ -17,20 +18,22 @@ const localSeederAddress = addresses.localSeeder[network.name]; const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; const localProviderAddress = addresses.localProvider[network.name]; const localTokenAddress = addresses.localNounsToken[network.name]; +const localMinterAddress = addresses.localNounsMinter[network.name]; async function main() { - const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; - const wallet = new ethers.Wallet(privateKey, ethers.provider); - // const [wallet] = await ethers.getSigners(); // localhost + // const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + // const wallet = new ethers.Wallet(privateKey, ethers.provider); + const [wallet] = await ethers.getSigners(); // localhost // ethers.Contract オブジェクトのインスタンスを作成 const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); - if (true) { + if (false) { // set Palette console.log(`set Palette start`); await localNounsDescriptor.addManyColorsToPalette(0, palette); @@ -58,10 +61,9 @@ async function main() { } - for (var i: number = 1; i <= 47; i++) { + for (var i: number = 1; i <= 1; i++) { try { - await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i))); - await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i))); + await localMinter.functions['mintSelectedPrefecture(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.000001') }); console.log(`mint [`, i, `]`); } catch (error) { diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index d0e62ddc..8d222927 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -87,6 +87,7 @@ import { addresses as localSeeder_mumbai } from "./addresses/localseeder_mumbai" import { addresses as localNounsDescriptor_mumbai } from "./addresses/localNounsDescriptor_mumbai"; import { addresses as localProvider_mumbai } from "./addresses/localNounsProvider_mumbai"; import { addresses as localNounsToken_mumbai } from "./addresses/localNounsToken_mumbai"; +import { addresses as localNounsMinter_mumbai } from "./addresses/localNounsMinter_mumbai"; export interface Addresses { [key: string]: { [key: string]: string }; @@ -314,14 +315,22 @@ export const addresses: Addresses = { localSeeder: { mumbai: localSeeder_mumbai.localseeder, + localhost: localSeeder_mumbai.localseeder, }, localNounsDescriptor: { mumbai: localNounsDescriptor_mumbai.localNounsDescriptor, + localhost: localNounsDescriptor_mumbai.localNounsDescriptor, }, localProvider: { mumbai: localProvider_mumbai.localNounsProvider, + localhost: localProvider_mumbai.localNounsProvider, }, localNounsToken: { mumbai: localNounsToken_mumbai.localNounsToken, + localhost: localNounsToken_mumbai.localNounsToken, + }, + localNounsMinter: { + mumbai: localNounsMinter_mumbai.localNounsMinter, + localhost: localNounsMinter_mumbai.localNounsMinter, }, }; diff --git a/src/utils/addresses/localNounsDescriptor_localhost.ts b/src/utils/addresses/localNounsDescriptor_localhost.ts new file mode 100644 index 00000000..e434919b --- /dev/null +++ b/src/utils/addresses/localNounsDescriptor_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsDescriptor:"0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", +} diff --git a/src/utils/addresses/localNounsDescriptor_mumbai.ts b/src/utils/addresses/localNounsDescriptor_mumbai.ts index c0fa5448..1091d558 100644 --- a/src/utils/addresses/localNounsDescriptor_mumbai.ts +++ b/src/utils/addresses/localNounsDescriptor_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsDescriptor:"0x1A88f19d94ceCe2A352E8178ddF570855317C15d", + localNounsDescriptor:"0xc0ce1B8DCd1045Ded1aBc983eb0577C91Dc67e0f", } diff --git a/src/utils/addresses/localNounsMinter_localhost.ts b/src/utils/addresses/localNounsMinter_localhost.ts new file mode 100644 index 00000000..327519a1 --- /dev/null +++ b/src/utils/addresses/localNounsMinter_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsMinter:"0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", +} diff --git a/src/utils/addresses/localNounsMinter_mumbai.ts b/src/utils/addresses/localNounsMinter_mumbai.ts new file mode 100644 index 00000000..0ff65870 --- /dev/null +++ b/src/utils/addresses/localNounsMinter_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsMinter:"0x461F5E3658380593E9a08D84c9074a8C9FE1fe1F", +} diff --git a/src/utils/addresses/localNounsProvider_localhost.ts b/src/utils/addresses/localNounsProvider_localhost.ts new file mode 100644 index 00000000..f732037f --- /dev/null +++ b/src/utils/addresses/localNounsProvider_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsProvider:"0x0165878A594ca255338adfa4d48449f69242Eb8F", +} diff --git a/src/utils/addresses/localNounsProvider_mumbai.ts b/src/utils/addresses/localNounsProvider_mumbai.ts index 458b6da9..a54f793c 100644 --- a/src/utils/addresses/localNounsProvider_mumbai.ts +++ b/src/utils/addresses/localNounsProvider_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsProvider:"0x6AE64719EB925B7a1d935d45F24A30094a12C9D4", + localNounsProvider:"0x8d65Dd27E7910C18E6B83976753e912137f97454", } diff --git a/src/utils/addresses/localNounsToken_localhost.ts b/src/utils/addresses/localNounsToken_localhost.ts new file mode 100644 index 00000000..4e2cbbb0 --- /dev/null +++ b/src/utils/addresses/localNounsToken_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsToken:"0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", +} diff --git a/src/utils/addresses/localNounsToken_mumbai.ts b/src/utils/addresses/localNounsToken_mumbai.ts index 7525e8d9..78b569d3 100644 --- a/src/utils/addresses/localNounsToken_mumbai.ts +++ b/src/utils/addresses/localNounsToken_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsToken:"0x1f26A1E07bF4e939144EE85833EFdEB46859AbBB", + localNounsToken:"0xbf1028b9CE3A40b1C13329dcb8a17ab9B96ffdA5", } diff --git a/src/utils/addresses/localseeder_localhost.ts b/src/utils/addresses/localseeder_localhost.ts new file mode 100644 index 00000000..a901ddde --- /dev/null +++ b/src/utils/addresses/localseeder_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + localseeder:"0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", +} diff --git a/src/utils/addresses/localseeder_mumbai.ts b/src/utils/addresses/localseeder_mumbai.ts index de28d0f1..ce9db790 100644 --- a/src/utils/addresses/localseeder_mumbai.ts +++ b/src/utils/addresses/localseeder_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localseeder:"0x6eE769B88423F0bddAEdb4Cd8C188b5a4366814D", + localseeder:"0x87ca24C18dC424Bc3018F4955aca1AC123d52A97", } From 7cd933378bd567364388a334e5635153f13dbbad Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 17 Aug 2023 09:17:48 +0900 Subject: [PATCH 065/146] =?UTF-8?q?ProviderTokenA1=E3=81=AEmint=E3=82=92?= =?UTF-8?q?=E7=84=A1=E5=8A=B9=E3=81=AB=E3=81=99=E3=82=8B=E3=81=9F=E3=82=81?= =?UTF-8?q?=E3=81=AEmint=E9=96=A2=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index f0b696db..24a6f949 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -68,6 +68,10 @@ contract LocalNounsToken is ProviderTokenA1, ILocalNounsToken { return _nextTokenId() - 1; } + function mint() public payable override returns (uint256 tokenId) { + revert('Cannot use this function'); + } + function setMinter(address _minter) public onlyOwner { minter = _minter; } From 949311ed47aa7cc3b7aea1aecc98576f9809c05e Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 17 Aug 2023 10:23:17 +0900 Subject: [PATCH 066/146] =?UTF-8?q?localhost=E3=81=AE=E3=82=A2=E3=83=89?= =?UTF-8?q?=E3=83=AC=E3=82=B9=E8=87=AA=E5=8B=95=E8=AA=AD=E8=BE=BC=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/deploy_nounsDescriptorV1.ts | 10 +++++ contract/scripts/populate_nounsV1.ts | 39 ++++++++++---------- src/utils/addresses.ts | 21 ++++++++--- 3 files changed, 46 insertions(+), 24 deletions(-) diff --git a/contract/scripts/deploy_nounsDescriptorV1.ts b/contract/scripts/deploy_nounsDescriptorV1.ts index 5aeee6ed..284ee072 100644 --- a/contract/scripts/deploy_nounsDescriptorV1.ts +++ b/contract/scripts/deploy_nounsDescriptorV1.ts @@ -1,6 +1,7 @@ import { ethers, network } from 'hardhat'; import { exec } from 'child_process'; import addresses from '@nouns/sdk/dist/contract/addresses.json'; +import { writeFile } from 'fs'; // const nftDescriptor: string = network.name == 'goerli' ? addresses[5].nftDescriptor : addresses[1].nftDescriptor; // const nftDescriptor: string = '0x1881c541E9d83880008B3720de0E537C34052ecf'; // mumbai @@ -15,12 +16,18 @@ async function main() { console.log(`##nounsSeeder="${nounsSeeder.address}"`); await runCommand(`npx hardhat verify ${nounsSeeder.address} --network ${network.name} &`); + const addresses = `export const addresses = {\n` + ` nounsSeeder:"${nounsSeeder.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/nounsSeeder_${network.name}.ts`, addresses, () => { }); + const factoryNFTDescriptor = await ethers.getContractFactory('NFTDescriptor'); const nftDescriptor = await factoryNFTDescriptor.deploy(); await nftDescriptor.deployed(); console.log(`##nftDescriptor="${nftDescriptor.address}"`); await runCommand(`npx hardhat verify ${nftDescriptor.address} --network ${network.name} &`); + const addresses2 = `export const addresses = {\n` + ` nftDescriptor:"${nftDescriptor.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/nftDescriptor_${network.name}.ts`, addresses2, () => { }); + const factoryNounsDescriptor = await ethers.getContractFactory('NounsDescriptor', { libraries: { NFTDescriptor: nftDescriptor.address, @@ -31,6 +38,9 @@ async function main() { console.log(`##nounsDescriptor="${nounsDescriptor.address}"`); await runCommand(`npx hardhat verify ${nounsDescriptor.address} --network ${network.name} &`); + const addresses3 = `export const addresses = {\n` + ` nounsDescriptor:"${nounsDescriptor.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/nounsDescriptor_${network.name}.ts`, addresses3, () => { }); + } async function runCommand(command: string) { diff --git a/contract/scripts/populate_nounsV1.ts b/contract/scripts/populate_nounsV1.ts index 7fbee025..2124e07e 100644 --- a/contract/scripts/populate_nounsV1.ts +++ b/contract/scripts/populate_nounsV1.ts @@ -4,14 +4,15 @@ import { ethers, network } from 'hardhat'; import { images, palette, bgcolors } from "../test/image-original-nouns-data"; // import { abi as nounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; import { abi as nounsDescriptorABI } from "../artifacts/contracts/external/nouns/NounsDescripter.sol/NounsDescriptor"; +import { addresses } from '../../src/utils/addresses'; dotenv.config(); -const nounsDescriptorAddress: string = '0x3578311a15f23a290ED8CAE2ed3DA096a6F9d943'; +const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; async function main() { var privateKey; - if (network.name == "localhost") { + if (network.name == "localhost" || network.name == "hardhat") { privateKey = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'; } else { privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; @@ -27,23 +28,23 @@ async function main() { if (true) { - // console.log(`set Palette start`); - // await nounsDescriptor.addManyColorsToPalette(0, palette, { gasPrice: feeData.gasPrice }); - // console.log(`set Palette end`); - - // console.log(`set Accessories start`); - // const accessoryChunk = chunkArray(images.accessories, 10); - // for (const chunk of accessoryChunk) { - // await nounsDescriptor.addManyAccessories(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); - // } - // console.log(`set Accessories end`); - - // console.log(`set Bodies start`); - // const bodiesChunk = chunkArray(images.bodies, 10); - // for (const chunk of bodiesChunk) { - // await nounsDescriptor.addManyBodies(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); - // } - // console.log(`set Bodies end`); + console.log(`set Palette start`); + await nounsDescriptor.addManyColorsToPalette(0, palette, { gasPrice: feeData.gasPrice }); + console.log(`set Palette end`); + + console.log(`set Accessories start`); + const accessoryChunk = chunkArray(images.accessories, 10); + for (const chunk of accessoryChunk) { + await nounsDescriptor.addManyAccessories(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); + } + console.log(`set Accessories end`); + + console.log(`set Bodies start`); + const bodiesChunk = chunkArray(images.bodies, 10); + for (const chunk of bodiesChunk) { + await nounsDescriptor.addManyBodies(chunk.map(({ data }) => data), { gasPrice: feeData.gasPrice }); + } + console.log(`set Bodies end`); console.log(`set heads start`); const headChunk = chunkArray(images.heads, 5); diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index 8d222927..20119641 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -81,13 +81,21 @@ import { addresses as messagetoken_goerli } from "./addresses/messagetoken_goerl import { addresses as messagetoken_localhost } from "./addresses/messagetoken_localhost"; import { addresses as messagetoken_mumbai } from "./addresses/messagetoken_mumbai"; import { addresses as nounsDescriptor_mumbai } from "./addresses/nounsDescriptor_mumbai"; +import { addresses as nounsDescriptor_localhost } from "./addresses/nounsDescriptor_localhost"; import { addresses as nounsSeeder_mumbai } from "./addresses/nounsSeeder_mumbai"; +import { addresses as nounsSeeder_localhost } from "./addresses/nounsSeeder_localhost"; import { addresses as nftDescriptor_mumbai } from "./addresses/nftDescriptor_mumbai"; +import { addresses as nftDescriptor_localhost } from "./addresses/nftDescriptor_localhost"; import { addresses as localSeeder_mumbai } from "./addresses/localseeder_mumbai"; +import { addresses as localSeeder_localhost } from "./addresses/localseeder_localhost"; import { addresses as localNounsDescriptor_mumbai } from "./addresses/localNounsDescriptor_mumbai"; +import { addresses as localNounsDescriptor_localhost } from "./addresses/localNounsDescriptor_localhost"; import { addresses as localProvider_mumbai } from "./addresses/localNounsProvider_mumbai"; +import { addresses as localProvider_localhost } from "./addresses/localNounsProvider_localhost"; import { addresses as localNounsToken_mumbai } from "./addresses/localNounsToken_mumbai"; +import { addresses as localNounsToken_localhost } from "./addresses/localNounsToken_localhost"; import { addresses as localNounsMinter_mumbai } from "./addresses/localNounsMinter_mumbai"; +import { addresses as localNounsMinter_localhost } from "./addresses/localNounsMinter_localhost"; export interface Addresses { [key: string]: { [key: string]: string }; @@ -305,32 +313,35 @@ export const addresses: Addresses = { }, nounsDescriptor: { mumbai: nounsDescriptor_mumbai.nounsDescriptor, + localhost: nounsDescriptor_localhost.nounsDescriptor, }, nounsSeeder: { mumbai: nounsSeeder_mumbai.nounsSeeder, + localhost: nounsSeeder_localhost.nounsSeeder, }, nftDescriptor: { mumbai: nftDescriptor_mumbai.nftDescriptor, + localhost: nftDescriptor_localhost.nftDescriptor, }, localSeeder: { mumbai: localSeeder_mumbai.localseeder, - localhost: localSeeder_mumbai.localseeder, + localhost: localSeeder_localhost.localseeder, }, localNounsDescriptor: { mumbai: localNounsDescriptor_mumbai.localNounsDescriptor, - localhost: localNounsDescriptor_mumbai.localNounsDescriptor, + localhost: localNounsDescriptor_localhost.localNounsDescriptor, }, localProvider: { mumbai: localProvider_mumbai.localNounsProvider, - localhost: localProvider_mumbai.localNounsProvider, + localhost: localProvider_localhost.localNounsProvider, }, localNounsToken: { mumbai: localNounsToken_mumbai.localNounsToken, - localhost: localNounsToken_mumbai.localNounsToken, + localhost: localNounsToken_localhost.localNounsToken, }, localNounsMinter: { mumbai: localNounsMinter_mumbai.localNounsMinter, - localhost: localNounsMinter_mumbai.localNounsMinter, + localhost: localNounsMinter_localhost.localNounsMinter, }, }; From 8343e340bbe0b966cf1bf93644fa59be9fcd28be Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 17 Aug 2023 10:55:29 +0900 Subject: [PATCH 067/146] =?UTF-8?q?Minter=E7=B5=8C=E7=94=B1=E3=81=A0?= =?UTF-8?q?=E3=81=A8msg.sender=E3=81=8CMinter=E3=81=AB=E3=81=AA=E3=82=8B?= =?UTF-8?q?=E3=81=9F=E3=82=81=E3=80=81=5Fto=E3=82=92=E6=8C=87=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 14 +++++++++----- contract/contracts/localNouns/LocalNounsMinter.sol | 2 +- .../localNouns/interfaces/ILocalNounsToken.sol | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 24a6f949..7f08e2d8 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -18,11 +18,14 @@ contract LocalNounsToken is ProviderTokenA1, ILocalNounsToken { IAssetProviderExMint public assetProvider2; address public minter; - constructor(IAssetProviderExMint _assetProvider, address _minter) ProviderTokenA1(_assetProvider, 'Local Nouns', 'Local Nouns') { + constructor( + IAssetProviderExMint _assetProvider, + address _minter + ) ProviderTokenA1(_assetProvider, 'Local Nouns', 'Local Nouns') { description = 'Local Nouns Token.'; assetProvider2 = _assetProvider; // mintPrice = 1e13; // 0.001 - mintPrice = 0; + mintPrice = 0; mintLimit = 5000; minter = _minter; } @@ -60,10 +63,11 @@ contract LocalNounsToken is ProviderTokenA1, ILocalNounsToken { ); } - function mintSelectedPrefecture(uint256 prefectureId) public virtual returns (uint256 tokenId) { + function mintSelectedPrefecture(address _to, uint256 _prefectureId) public virtual returns (uint256 tokenId) { require(msg.sender == minter, 'Sender is not the minter'); - assetProvider2.mint(prefectureId, _nextTokenId()); - super.mint(); + assetProvider2.mint(_prefectureId, _nextTokenId()); + + _safeMint(_to, 1); return _nextTokenId() - 1; } diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol index 1d981dcf..0ef9bb29 100644 --- a/contract/contracts/localNouns/LocalNounsMinter.sol +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -32,6 +32,6 @@ contract LocalNounsMinter is Ownable { } function mintSelectedPrefecture(uint256 _prefectureId) public payable returns (uint256 tokenId) { - return token.mintSelectedPrefecture(_prefectureId); + return token.mintSelectedPrefecture(msg.sender, _prefectureId); } } diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol index ccc78ce6..d0a1d8ab 100644 --- a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol +++ b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol @@ -18,7 +18,7 @@ pragma solidity ^0.8.6; interface ILocalNounsToken { - function mintSelectedPrefecture(uint256 prefectureId) external returns (uint256 tokenId); + function mintSelectedPrefecture(address to, uint256 prefectureId) external returns (uint256 tokenId); function setMinter(address _minter) external; } From 5e9566e1265f049fd97d48dc8940f1662c1342db Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Mon, 21 Aug 2023 09:23:05 +0900 Subject: [PATCH 068/146] =?UTF-8?q?=E8=87=AA=E5=8B=95=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/test/localNouns.ts | 56 +++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 contract/test/localNouns.ts diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts new file mode 100644 index 00000000..3b885679 --- /dev/null +++ b/contract/test/localNouns.ts @@ -0,0 +1,56 @@ +import { expect } from 'chai'; +import { ethers, network, SignerWithAddress, Contract } from "hardhat"; +import { addresses } from '../../src/utils/addresses'; +import { ethers } from 'ethers'; + +let owner: SignerWithAddress, user1: SignerWithAddress; +let token: Contract, minter: Contract; +const localProviderAddress = addresses.localProvider[network.name]; + +before(async () => { + /* `npx hardhat node`実行後、このスクリプトを実行する前に、Nouns,LocalNounsの関連するコントラクトを + * デプロイする必要があります。(一度実行すると、node停止までは再実施する必要なし) + # cd contract + # npx hardhat run scripts/deploy_nounsDescriptorV1.ts + # npx hardhat run scripts/populate_nounsV1.ts + # npx hardhat run scripts/deploy_localNouns.ts + # npx hardhat run scripts/populate_localNouns.ts + */ + + [owner, user1] = await ethers.getSigners(); + + const factoryToken = await ethers.getContractFactory('LocalNounsToken'); + token = await factoryToken.deploy(localProviderAddress, owner.address); + await token.deployed(); + console.log(`##LocalNounsToken="${token.address}"`); + + const factoryMinter = await ethers.getContractFactory('LocalNounsMinter'); + minter = await factoryMinter.deploy(token.address); + await minter.deployed(); + console.log(`##LocalNounsMinter="${minter.address}"`); + + await token.setMinter(minter.address); + +}); + +describe('mint functions', function () { + let result, tx; + it('mint from non-minter', async function () { + await expect(token.connect(user1).functions.mint()) + .revertedWith('Cannot use this function'); + + await expect(token.connect(user1).functions.mintSelectedPrefecture(user1.address, 1)) + .revertedWith('Sender is not the minter'); + + }); + + it('mint from minter', async function () { + await minter.connect(user1).functions.mintSelectedPrefecture(1); + + const [balance] = await token.functions.balanceOf(user1.address); + expect(balance.toNumber()).to.equal(1); // user1は1つ保持 + + const [totalSupply] = await token.functions.totalSupply(); + expect(totalSupply.toNumber()).to.equal(1); // tokenId=1 + }); +}); From 0ba8567e1ae6603b588c83cb07d9b2616db35348 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Mon, 21 Aug 2023 09:24:12 +0900 Subject: [PATCH 069/146] =?UTF-8?q?=E7=94=BB=E5=83=8F=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E4=BF=AE=E6=AD=A3(=E6=9C=AB=E5=B0=BE=E3=81=AB?= =?UTF-8?q?=E3=82=AA=E3=83=96=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88=E3=82=BF?= =?UTF-8?q?=E3=82=A4=E3=83=97=E3=82=92=E8=BF=BD=E5=8A=A0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/test/image-local-data.json | 3094 ++++++++++++++------------- 1 file changed, 1650 insertions(+), 1444 deletions(-) diff --git a/contract/test/image-local-data.json b/contract/test/image-local-data.json index 100d84ea..eaced8a0 100644 --- a/contract/test/image-local-data.json +++ b/contract/test/image-local-data.json @@ -1,1447 +1,1653 @@ { - "bgcolors": [ - "d5d7e1", - "e1d7d5" + "bgcolors": [ + "d5d7e1", + "e1d7d5" + ], + "palette": [ + "", + "ffffff", + "c5b9a1", + "cfc2ab", + "63a0f9", + "807f7e", + "caeff9", + "5648ed", + "5a423f", + "b9185c", + "b87b11", + "fffdf2", + "4b4949", + "343235", + "1f1d29", + "068940", + "867c1d", + "ae3208", + "9f21a0", + "f98f30", + "fe500c", + "d26451", + "fd8b5b", + "5a65fa", + "d22209", + "e9265c", + "c54e38", + "80a72d", + "4bea69", + "34ac80", + "eed811", + "62616d", + "ff638d", + "8bc0c5", + "c4da53", + "000000", + "f3322c", + "ffae1a", + "ffc110", + "505a5c", + "ffef16", + "fff671", + "fff449", + "db8323", + "df2c39", + "f938d8", + "5c25fb", + "2a86fd", + "45faff", + "38dd56", + "ff3a0e", + "d32a09", + "903707", + "6e3206", + "552e05", + "e8705b", + "f38b7c", + "e4a499", + "667af9", + "648df9", + "7cc4f2", + "97f2fb", + "a3efd0", + "87e4d9", + "71bde4", + "ff1a0b", + "f78a18", + "2b83f6", + "d62149", + "834398", + "ffc925", + "d9391f", + "bd2d24", + "ff7216", + "254efb", + "e5e5de", + "00a556", + "c5030e", + "abf131", + "fb4694", + "e7a32c", + "fff0ee", + "009c59", + "0385eb", + "00499c", + "e11833", + "26b1f3", + "fff0be", + "d8dadf", + "d7d3cd", + "1929f4", + "eab118", + "0b5027", + "f9f5cb", + "cfc9b8", + "feb9d5", + "f8d689", + "5d6061", + "76858b", + "757576", + "ff0e0e", + "0adc4d", + "fdf8ff", + "70e890", + "f7913d", + "ff1ad2", + "ff82ad", + "535a15", + "fa6fe2", + "ffe939", + "ab36be", + "adc8cc", + "604666", + "f20422", + "abaaa8", + "4b65f7", + "a19c9a", + "58565c", + "da42cb", + "027c92", + "cec189", + "909b0e", + "74580d", + "027ee6", + "b2958d", + "efad81", + "7d635e", + "eff2fa", + "6f597a", + "d4b7b2", + "d18687", + "cd916d", + "6b3f39", + "4d271b", + "85634f", + "f9f4e6", + "f8ddb0", + "b92b3c", + "d08b11", + "257ced", + "a3baed", + "5fd4fb", + "c16710", + "a28ef4", + "3a085b", + "67b1e3", + "1e3445", + "ffd067", + "962236", + "769ca9", + "5a6b7b", + "7e5243", + "a86f60", + "8f785e", + "cc0595", + "42ffb0", + "d56333", + "b8ced2", + "b91b43", + "f39713", + "e8e8e2", + "ec5b43", + "235476", + "b2a8a5", + "d6c3be", + "49b38b", + "fccf25", + "f59b34", + "375dfc", + "99e6de", + "27a463", + "554543", + "b19e00", + "d4a015", + "9f4b27", + "f9e8dd", + "6b7212", + "9d8e6e", + "4243f8", + "fa5e20", + "f82905", + "555353", + "876f69", + "410d66", + "552d1d", + "f71248", + "fee3f3", + "c16923", + "2b2834", + "0079fc", + "d31e14", + "f83001", + "8dd122", + "fffdf4", + "ffa21e", + "e4afa3", + "fbc311", + "aa940c", + "eedc00", + "fff006", + "9cb4b8", + "a38654", + "ae6c0a", + "2bb26b", + "e2c8c0", + "f89865", + "f86100", + "dcd8d3", + "049d43", + "d0aea9", + "f39d44", + "eeb78c", + "f9f5e9", + "5d3500", + "c3a199", + "aaa6a4", + "caa26a", + "fde7f5", + "fdf008", + "fdcef2", + "f681e6", + "018146", + "d19a54", + "9eb5e1", + "f5fcff", + "3f9323", + "00fcff", + "4a5358", + "fbc800", + "d596a6", + "ffb913", + "e9ba12", + "767c0e", + "f9f6d1", + "d29607", + "f8ce47", + "395ed1", + "ffc5f0", + "cbc1bc", + "d4cfc0", + "fe6612", + "fe6412", + "fe6b14", + "fff5cb", + "544e4a", + "01499c", + "1f3445", + "282728", + "d3ad78", + "f9e1ba", + "d5d7e1" + ], + "images": { + "bodies": [ + { + "filename": "body-bege-bsod-bodies", + "data": "0x0015171f090e020e020e020e02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02" + }, + { + "filename": "body-bege-crt-bodies", + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + }, + { + "filename": "body-blue-sky-bodies", + "data": "0x0015171f090e040e040e040e04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04" + }, + { + "filename": "body-bluegrey-bodies", + "data": "0x0015171f090e050e050e050e05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05" + }, + { + "filename": "body-cold-bodies", + "data": "0x0015171f090e060e060e060e06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06" + }, + { + "filename": "body-computerblue-bodies", + "data": "0x0015171f090e070e070e070e07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07" + }, + { + "filename": "body-darkbrown-bodies", + "data": "0x0015171f090e080e080e080e08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08" + }, + { + "filename": "body-darkpink-bodies", + "data": "0x0015171f090e090e090e090e09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09" + }, + { + "filename": "body-foggrey-bodies", + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + }, + { + "filename": "body-gold-bodies", + "data": "0x0015171f090e0a0e0a0e0a0e0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a" + }, + { + "filename": "body-grayscale-1-bodies", + "data": "0x0015171f090e0b0e0b0e0b0e0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b" + }, + { + "filename": "body-grayscale-7-bodies", + "data": "0x0015171f090e0c0e0c0e0c0e0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c" + }, + { + "filename": "body-grayscale-8-bodies", + "data": "0x0015171f090e0d0e0d0e0d0e0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d" + }, + { + "filename": "body-grayscale-9-bodies", + "data": "0x0015171f090e0e0e0e0e0e0e0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e" + }, + { + "filename": "body-green-bodies", + "data": "0x0015171f090e0f0e0f0e0f0e0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f" + }, + { + "filename": "body-gunk-bodies", + "data": "0x0015171f090e100e100e100e10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10" + }, + { + "filename": "body-hotbrown-bodies", + "data": "0x0015171f090e110e110e110e11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11" + }, + { + "filename": "body-magenta-bodies", + "data": "0x0015171f090e120e120e120e12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12" + }, + { + "filename": "body-orange-yellow-bodies", + "data": "0x0015171f090e130e130e130e13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13" + }, + { + "filename": "body-orange-bodies", + "data": "0x0015171f090e140e140e140e14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14" + }, + { + "filename": "body-peachy-B-bodies", + "data": "0x0015171f090e150e150e150e15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15" + }, + { + "filename": "body-peachy-a-bodies", + "data": "0x0015171f090e160e160e160e16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16" + }, + { + "filename": "body-purple-bodies", + "data": "0x0015171f090e170e170e170e17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17" + }, + { + "filename": "body-red-bodies", + "data": "0x0015171f090e180e180e180e18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18" + }, + { + "filename": "body-redpinkish-bodies", + "data": "0x0015171f090e190e190e190e19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19" + }, + { + "filename": "body-rust-bodies", + "data": "0x0015171f090e1a0e1a0e1a0e1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a" + }, + { + "filename": "body-slimegreen-bodies", + "data": "0x0015171f090e1b0e1b0e1b0e1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b" + }, + { + "filename": "body-teal-light-bodies", + "data": "0x0015171f090e1c0e1c0e1c0e1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c" + }, + { + "filename": "body-teal-bodies", + "data": "0x0015171f090e1d0e1d0e1d0e1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d" + }, + { + "filename": "body-yellow-bodies", + "data": "0x0015171f090e1e0e1e0e1e0e1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e" + } ], - "palette": [ - "", - "ffffff", - "c5b9a1", - "cfc2ab", - "63a0f9", - "807f7e", - "caeff9", - "5648ed", - "5a423f", - "b9185c", - "b87b11", - "fffdf2", - "4b4949", - "343235", - "1f1d29", - "068940", - "867c1d", - "ae3208", - "9f21a0", - "f98f30", - "fe500c", - "d26451", - "fd8b5b", - "5a65fa", - "d22209", - "e9265c", - "c54e38", - "80a72d", - "4bea69", - "34ac80", - "eed811", - "62616d", - "ff638d", - "8bc0c5", - "c4da53", - "000000", - "f3322c", - "ffae1a", - "ffc110", - "505a5c", - "ffef16", - "fff671", - "fff449", - "db8323", - "df2c39", - "f938d8", - "5c25fb", - "2a86fd", - "45faff", - "38dd56", - "ff3a0e", - "d32a09", - "903707", - "6e3206", - "552e05", - "e8705b", - "f38b7c", - "e4a499", - "667af9", - "648df9", - "7cc4f2", - "97f2fb", - "a3efd0", - "87e4d9", - "71bde4", - "ff1a0b", - "f78a18", - "2b83f6", - "d62149", - "834398", - "ffc925", - "d9391f", - "bd2d24", - "ff7216", - "254efb", - "e5e5de", - "00a556", - "c5030e", - "abf131", - "fb4694", - "e7a32c", - "fff0ee", - "009c59", - "0385eb", - "00499c", - "e11833", - "26b1f3", - "fff0be", - "d8dadf", - "d7d3cd", - "1929f4", - "eab118", - "0b5027", - "f9f5cb", - "cfc9b8", - "feb9d5", - "f8d689", - "5d6061", - "76858b", - "757576", - "ff0e0e", - "0adc4d", - "fdf8ff", - "70e890", - "f7913d", - "ff1ad2", - "ff82ad", - "535a15", - "fa6fe2", - "ffe939", - "ab36be", - "adc8cc", - "604666", - "f20422", - "abaaa8", - "4b65f7", - "a19c9a", - "58565c", - "da42cb", - "027c92", - "cec189", - "909b0e", - "74580d", - "027ee6", - "b2958d", - "efad81", - "7d635e", - "eff2fa", - "6f597a", - "d4b7b2", - "d18687", - "cd916d", - "6b3f39", - "4d271b", - "85634f", - "f9f4e6", - "f8ddb0", - "b92b3c", - "d08b11", - "257ced", - "a3baed", - "5fd4fb", - "c16710", - "a28ef4", - "3a085b", - "67b1e3", - "1e3445", - "ffd067", - "962236", - "769ca9", - "5a6b7b", - "7e5243", - "a86f60", - "8f785e", - "cc0595", - "42ffb0", - "d56333", - "b8ced2", - "b91b43", - "f39713", - "e8e8e2", - "ec5b43", - "235476", - "b2a8a5", - "d6c3be", - "49b38b", - "fccf25", - "f59b34", - "375dfc", - "99e6de", - "27a463", - "554543", - "b19e00", - "d4a015", - "9f4b27", - "f9e8dd", - "6b7212", - "9d8e6e", - "4243f8", - "fa5e20", - "f82905", - "555353", - "876f69", - "410d66", - "552d1d", - "f71248", - "fee3f3", - "c16923", - "2b2834", - "0079fc", - "d31e14", - "f83001", - "8dd122", - "fffdf4", - "ffa21e", - "e4afa3", - "fbc311", - "aa940c", - "eedc00", - "fff006", - "9cb4b8", - "a38654", - "ae6c0a", - "2bb26b", - "e2c8c0", - "f89865", - "f86100", - "dcd8d3", - "049d43", - "d0aea9", - "f39d44", - "eeb78c", - "f9f5e9", - "5d3500", - "c3a199", - "aaa6a4", - "caa26a", - "fde7f5", - "fdf008", - "fdcef2", - "f681e6", - "018146", - "d19a54", - "9eb5e1", - "f5fcff", - "3f9323", - "00fcff", - "4a5358", - "fbc800", - "d596a6", - "ffb913", - "e9ba12", - "767c0e", - "f9f6d1", - "d29607", - "f8ce47", - "395ed1", - "ffc5f0", - "cbc1bc", - "d4cfc0", - "fe6612", - "fe6412", - "fe6b14", - "fff5cb", - "544e4a", - "01499c", - "1f3445", - "282728", - "d3ad78", - "f9e1ba", - "d5d7e1" + "accessories": [ + { + "filename": "01-hokkaido-crab-accessories", + "data": "0x0019161c0d0113010001130100011301000113010001130100011301000108011301080100011301000200051302000100011301000313010001130100" + }, + { + "filename": "01-hokkaido-melon-accessories", + "data": "0x0018131a0e014203000142012203420122010003220100" + }, + { + "filename": "01-hokkaido-sheep-accessories", + "data": "0x0018141d0e020001c1010e020003c10300010e0100010e0300040001c1010e020003c101000200010e0100010e0100" + }, + { + "filename": "02-aomori-jade-accessories", + "data": "0x0015141e090400010205000102050001020300010201000500017f0102011c01020101010004000101010001dd0102019b0100017f0700015203000b000b000b000b0002010900" + }, + { + "filename": "02-aomori-squid-accessories", + "data": "0x0018151d0f0300010802000100010102080101010002000208020001010100010801330200010001010123013301000101010101000101010001010100" + }, + { + "filename": "02-aomori-tsugaru-shamisen-accessories", + "data": "0x0018121c0f010001360123012301360123010001360100020b0100020b0100" + }, + { + "filename": "03-iwate-egg-accessories", + "data": "0x0018141b100100020101000101021e01010101021e0101010002010100" + }, + { + "filename": "03-iwate-fujiwara-accessories", + "data": "0x0017141c0f0100012303000200012302000200015d02000100026701cd0100046701310101013101670201" + }, + { + "filename": "04-miyagi-beeftongue-accessories", + "data": "0x0019131a0e013501a1013501a10135018501a1018501a10135" + }, + { + "filename": "04-miyagi-matsushima-accessories", + "data": "0x0016171f0c0600022901010100010104000301012903000b000b00025c0100025c01000129010003a205b106000300015c0100015c01290100025c0100030004b1010002b1010001a20a00020002a2010002290400" + }, + { + "filename": "04-miyagi-zunda-accessories", + "data": "0x0019131b10024e0100034e014e0101014e" + }, + { + "filename": "05-akita-fireworks-accessories", + "data": "0x0015171f0c060001c7010001c70200030001c101c7020001c1010001c10100050001c7010001c7020001c7020001c101c7050001c70100040001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c703000100014a010001c1010001c7020001c702000400014a010001c1020001c101000300014a0100014a05000400014a0600" + }, + { + "filename": "05-akita-hatahata-accessories", + "data": "0x0018141b0e011005000100015d021001230110011001000101025d01010300015d0200" + }, + { + "filename": "05-akita-raspberry-accessories", + "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e02b906b9020002b90200" + }, + { + "filename": "06-yamagata-cherry-accessories", + "data": "0x0018131c0e02c0030001c0010001c0020001c0020001c0010002410100024101e40141010001e40141" + }, + { + "filename": "06-yamagata-lafrance-accessories", + "data": "0x0019131c10010001840100010001840122022201c601de0222" + }, + { + "filename": "06-yamagata-shogi-accessories", + "data": "0x0018131b10010001230100010002230123020001000223" + }, + { + "filename": "07-fukushima-akabeko-accessories", + "data": "0x0019141b0f01230133010101230100013301230133010101330133010001330200" + }, + { + "filename": "07-fukushima-inawashiro-accessories", + "data": "0x0018171e0c030001e0010001a2019504000200029203a202950200039208a20b000b000400010101230500030002010600" + }, + { + "filename": "07-fukushima-train-accessories", + "data": "0x0018131b0f015802570158010e0285010e0485016a0258016a" + }, + { + "filename": "08-ibaraki-bellpepper-accessories", + "data": "0x0018121b0f01dd01e101dd01dd010f01dd01dd010f01dd0100010f0100" + }, + { + "filename": "08-ibaraki-natto-accessories", + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + }, + { + "filename": "08-ibaraki-rokkakudo-accessories", + "data": "0x0017171f09070001860400029107000186060004000161050001860300010001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d408000a0002910200050002910700" + }, + { + "filename": "09-tochigi-gyoza-accessories", + "data": "0x0018141b0e0100013401000134010001340134012501340125013401250188022501880225010001340100013401000134" + }, + { + "filename": "09-tochigi-lemon-accessories", + "data": "0x0018131c100152020103c701c7015201c7010101c701010352" + }, + { + "filename": "09-tochigi-shimotsukare-accessories", + "data": "0x0019131b0f016001930150014901500187019301600193014901ce0187" + }, + { + "filename": "10-gunma-akagiyama-accessories", + "data": "0x0019171b0c0100014901bf020002bf020001bf014901bf0149011b014901460149011b014901bf011b01460b06" + }, + { + "filename": "10-gunma-tomiokasilkmill-accessories", + "data": "0x001717190902320137033201370332013703320137010102b4010102b40101013701b4010101b4013701010232010003320137033201370332" + }, + { + "filename": "10-gunma-yakimanjyu-accessories", + "data": "0x0017161e0e04000236011101220300023401230101010003000136011101340136010002000134011101230101020001000134013601340101013602000100011101340123013403000100012201360134040001220700" + }, + { + "filename": "11-saitama-icicle-accessories", + "data": "0x0015171c090e0104000101010001010100010101000101010001010100040001e0010001010100010101000101010001010100060001010100010101000101010001e0010006000101010001e001000101030006000101030001e00300060001e0030001e00300060001e00700" + }, + { + "filename": "11-saitama-soka-senbei-accessories", + "data": "0x0018131b0f0100016001e6010002e601110160011103e60100011101e60100" + }, + { + "filename": "12-chiba-inubosaki-accessories", + "data": "0x0018171f0d0128010001280100042802000700010102000700010102000600040f04000154010104b105000254010102b103000354010102b101000354010103b10300" + }, + { + "filename": "12-chiba-orca-accessories", + "data": "0x0018151c0d0100010d0600020d0200010d03000200050d01000300020d020b01000100025601000156010d01000156" + }, + { + "filename": "12-chiba-peanuts-accessories", + "data": "0x0018131b100100016001d8010002600260010001d801600100" + }, + { + "filename": "13-tokyo-tower-accessories", + "data": "0x0016151d0e060001da02000141020001da010002000101030001da02000141020001da010001000301030001000341030001000141010001410300014101000141010001410200" + }, + { + "filename": "13-tokyo-yamanote-accessories", + "data": "0x0018141c0f010001c0010101c00100010103bc010101c003bc01c00101010001bc01000101010001c0010101c00100" + }, + { + "filename": "14-ibaraki-natto-accessories", + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + }, + { + "filename": "14-kanagawa-baybridge-accessories", + "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010001a201a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" + }, + { + "filename": "14-kanagawa-yacht-accessories", + "data": "0x0018141c100100015402000254014301000254024302000243037f0100" + }, + { + "filename": "15-nigata-edamame-accessories", + "data": "0x0019141b0e0200014e0200014e0100014e01c00100014e01c0011e01c00100011e01c00100" + }, + { + "filename": "15-niigata-riceear-accessories", + "data": "0x0018131d0f02000128010001000128020001c001280100012801c001000128010002c0020002c00200" + }, + { + "filename": "16-toyama-kutabe-accessories", + "data": "0x0019141e030100010e0200030e0a00010e0200020e0201010e0400011803bf0188020e0100020e0201010e0400011801bf020e01bf0100060e0500011804bf0100060e0a000100010e0100010e0100020e0a00" + }, + { + "filename": "16-toyama-shiroebi-accessories", + "data": "0x0018131a0e0400010e010002ba010e01ba01ba0400" + }, + { + "filename": "16-toyama-tateyama-accessories", + "data": "0x0019171c090100017f020001a2017f0300027f01a20100017f027f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" + }, + { + "filename": "17-ishikawa-kotoji-accessories", + "data": "0x0018131c0e02000172020001000372010002000158020001000158010001580100015803000158" + }, + { + "filename": "17-ishikawa-kutani-kaga-gosai-accessories", + "data": "0x0018121a0f0118010f01c401a201e0018001c4010f0118" + }, + { + "filename": "17-ishikawa-oyster-accessories", + "data": "0x0017151c0e030001a0026b01a002000301016b01a0010001a0040101a001000401015d010001a00201015d01990200019901c301990400" + }, + { + "filename": "18-fukui-echizen-crab-accessories", + "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b80414020001000114010001b80214010001b80100" + }, + { + "filename": "18-fukui-heshiko-accessories", + "data": "0x0019131a0f018303e3029c0185019c" + }, + { + "filename": "18-fukui-yokan-accessories", + "data": "0x0018131b0e02000385020003850200038502570385" + }, + { + "filename": "19-yamanashi-fuji-accessories", + "data": "0x0017171e0c0600020b03000500020b01eb010b0200030007eb01000beb0b58010007580300020001e0015802e00500030002e0030002a90100" + }, + { + "filename": "19-yamanashi-grape-accessories", + "data": "0x0018121b0e0200019a01220100019a0112019a019a0112016e01120112016e01450100" + }, + { + "filename": "20-nagano-kappa-accessories", + "data": "0x0018131a0e020f0201010f0100013e0123013e01000100023e022a" + }, + { + "filename": "20-nagano-oyaki-accessories", + "data": "0x0018121b0e01b0011b02000157011b01b0011b0157028a0157010002570100" + }, + { + "filename": "21-gifu-gero-accessories", + "data": "0x0018141c0e020001010100010101000100010101000101020001c8013d0101013d010101c801c8043d01c8010004c80100" + }, + { + "filename": "21-gifu-gohei-mochi-accessories", + "data": "0x0019141b0d020004110100020101600111011a0111010102000260021a0100" + }, + { + "filename": "21-gifu-sarubobo-accessories", + "data": "0x0018131d0f010002230100012302440123017102440171010002230100010002230100017102000171" + }, + { + "filename": "21-gifu-ukaibody-accessories", + "data": "0x0015171f090592075402920592075402920592075402920592075402920292010002920754029202920100029207540292029201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" + }, + { + "filename": "22-shizuoka-fuji-accessories", + "data": "0x0017171d0c090002e0020003e0020001010300060002320101020003e0020005320100040001e10632020001dd04e1043204dd07e1" + }, + { + "filename": "23-aichi-oguratoast-accessories", + "data": "0x0018131c0e0293028401930193028401b80193019301b8028401930193018401b8018401930593" + }, + { + "filename": "23-aichi-tebasaki-accessories", + "data": "0x0017131a0e010001480300014804000548010003480100" + }, + { + "filename": "24-mie-iseebi-accessories", + "data": "0x0017151e0d02000132020001320200010001320100023201000132010001000132010002320100013201000132021802320218013201320100011802b40118010001320100011801000232010001180100030002b40300020001180132011801320200" + }, + { + "filename": "24-mie-mochi-accessories", + "data": "0x0019121a0f018401b80184018401b80184" + }, + { + "filename": "25-shiga-funazushi-accessories", + "data": "0x0018151a0e01420100013701000137020001420100014201000137010001370142010001420100014201000142" + }, + { + "filename": "25-shiga-hieizan-accessories", + "data": "0x0018171b090700020f05000500070f0200020f01000b0f028d01000b8d" + }, + { + "filename": "26-kyoto-daimonji-accessories", + "data": "0x0017161d0d0300011405000200011401490114040003140149031402000749020002000114014901140400021401490100014904140249030003490100" + }, + { + "filename": "26-kyoto-yatsuhashi-accessories", + "data": "0x0018131a0e02000157020001000157018601570100015702860257" + }, + { + "filename": "27-osaka-cheesecake-accessories", + "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b015707570100015701b7015701b701570100" + }, + { + "filename": "27-osaka-jinbezame-accessories", + "data": "0x0018161c0d010001a2020001a20400010601a2010002a20400020001a2010602a20106020002a2012302a20106012302a202000206025f01060200" + }, + { + "filename": "28-hyogo-akashiyaki-accessories", + "data": "0x0019141b0f02000260010001000160015d016001ae015d016002ae0160" + }, + { + "filename": "28-hyogo-tower-museum-accessories", + "data": "0x0017171e0c020001010800020001490200013f0500020001c20200026f0100013e0200020001490100013e016f023e0300020001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" + }, + { + "filename": "29-nara-kakinohasushi-accessories", + "data": "0x0019141c0f010001c0011b01c0011b0100011b02c0011b019501a2019501a2010002cc019701cc0100" + }, + { + "filename": "29-nara-narazuke-accessories", + "data": "0x0019121a0f03b801b8010001b8" + }, + { + "filename": "30-wakayama-mikan-kaki-accessories", + "data": "0x0018121a0f03c201c201e101c203c2" + }, + { + "filename": "30-wakayama-nankoume-accessories", + "data": "0x001a151b0d024e010002a60100029c024e010002a60100029c" + }, + { + "filename": "33-oakayama-mamakari-accessories", + "data": "0x0019151b0e01a2019d01a2019d01a201000157019d01a2019d01a2019d01060100050601000157" + }, + { + "filename": "33-okauama-muscat-accessories", + "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" + }, + { + "filename": "33-okayama-denim-jacket01-accessories", + "data": "0x0015171f090354049201000492025404540392010103920354055401920354019204540e540754010106540a54019201010192015402540100075403920154025401000454010102540392015402540100085401920254025401000b5402540100045401010654" + }, + { + "filename": "33-okayama-denim-jacket02-accessories", + "data": "0x0015171f0903540392040003920154045402920400029202540554019204000192035406540400045405540101040004540654040001540192010101920254010003540400015403920254010002540101040001540392025401000354040002540192015402540100035404000454025401000254010104000454" + }, + { + "filename": "33-okayama-denim-jacket03-accessories", + "data": "0x0015171f09035302540700025403530254070002540453025405000254015306530500035306530500010102530653050003530253010003530500010102530253010003530500035302530c0002530c0002530c00" + }, + { + "filename": "33-okayama-kibidango-accessories", + "data": "0x0018131b0f010002570100015703eb04eb010002eb0100" + }, + { + "filename": "33-okayama-momotaro-accessories", + "data": "0x0015171f080100054d010105040101024d0100054d010105040101024d01000204034d010105040101024d01000204034d010105040101024d010002040100024d010105040101024d010002040100024d010105040101024d01000204010001eb014d010105740101024d01eb020401eb010a01eb010105740101024d01eb020402eb014d010105540101024d01eb020402eb014d010105540101024d01eb020402eb014d010105540101024d" + }, + { + "filename": "33-okayama-peach02-accessories", + "data": "0x0018151c0e0300015f03000200035f02000100055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" + }, + { + "filename": "33-okayama-retainer-accessories", + "data": "0x0015171f09054d010105040101024d054d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" + }, + { + "filename": "34-hiroshima-battleship-accessories", + "data": "0x0019171f09060001d70700030001d7010002d7070001d7020004d7010001d7010001d7020001d702d701000ad70100024801000b4802a201000ba202a201000ba2" + }, + { + "filename": "34-hiroshima-lemon-accessories", + "data": "0x0019131c0f0100022901220429042903290100" + }, + { + "filename": "34-hiroshima-oyster-accessories", + "data": "0x0018131c0e020001d901060101010001060288010101e9038801010106020c0101010003010200" + }, + { + "filename": "34-hiroshima-rice-scoop-accessories", + "data": "0x0018131c10036003600360010001600100010001600100" + }, + { + "filename": "34-hiroshima-shrine-accessories", + "data": "0x0018171f09040008770200050006bf0300060001bf020001bf0400050006bf0300060001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" + }, + { + "filename": "34-hiroshima-wani-accessories", + "data": "0x0017141d0d04560300015602000156030003000156030001000256040003000456070003000456" + }, + { + "filename": "35-yamaguchi-kintaikyo-accessories", + "data": "0x001b171f09010001ca020002ca010002ca010002ca010001ca01ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188013f023f01000b3f023f01000b3f" + }, + { + "filename": "35-yamaguchi-motonosumiinari-accessories", + "data": "0x0017171f090e53055303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" + }, + { + "filename": "35-yamaguchi-white -snake-accessories", + "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" + }, + { + "filename": "35-yamaguhchi-tsunoshima-big-bridge-accessories", + "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" + }, + { + "filename": "36-tokushima-awaodori-accessories", + "data": "0x0018131b0f0220015a01010100022301000100025f01000100025f0100" + }, + { + "filename": "36-tokushima-citrus-sudachi-accessories", + "data": "0x0018131c0e0100035c0100015c010101c70101015c015c01c7010101c7015c015c010101c70101015c0100035c0100" + }, + { + "filename": "36-tokushima-narutomaki-accessories", + "data": "0x0017141c0d02000301020001000101034f010101000101014f0301014f01010101014f0101014f0101014f01010101034f0101014f0101010005010100" + }, + { + "filename": "37-kagawa-oliveoil-accessories", + "data": "0x0017121c0f010001ac01000100015c0100035c015c01c6015c015c01c6015c035c" + }, + { + "filename": "38-ehime-dango-accessories", + "data": "0x0018131c0e0300021b020002a6011b0100027001a60100010001570170020001570400" + }, + { + "filename": "38-ehime-juice-accessories", + "data": "0x0018131f0c02000106018d01060200010602000140030001060140040601010106010003060100010606000142060001420600014206000142" + }, + { + "filename": "38-ehime-mandarin-orange-accessories", + "data": "0x0019121a0f014201e101420342" + }, + { + "filename": "38-ehime-turt-accessories", + "data": "0x0018141c0e0100045701000157037002570157017001570270015701570270015701700157010004570100" + }, + { + "filename": "39-kochi-seared-bonito-accessories", + "data": "0x0019131b0f0378010001780294017801780394" + }, + { + "filename": "40-fukuoka-mentaiko-accessories", + "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf016a026a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" + }, + { + "filename": "40-fukuoka-umegaeda-accessories", + "data": "0x0018131c0e010003c1010002c1019702c101c1019701c1019701c101c1029702c1010003c10100" + }, + { + "filename": "41-saga-saga-accessories", + "data": "0x0017151d0e010002560200015601000100015602000156010001560256020001560100015607000156040001560100015601000156010001560100015603560100015601000156" + }, + { + "filename": "41-saga-yobuko-squid-accessories", + "data": "0x0017131c0e020001510200010003510100010003510100055101000123015101230100025101000251" + }, + { + "filename": "42-nagasaki-castella-accessories", + "data": "0x0018131b0f04ae0428042804ae" + }, + { + "filename": "42-nagasaki-gunkanto-accessories", + "data": "0x0016171f09020001010b000e00010001010c00050002620200016204000400036201000262040001000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" + }, + { + "filename": "42-nagasaki-milkshake-accessories", + "data": "0x0018121d0f014d02000157017101570357037f0100017f0100037f" + }, + { + "filename": "43-kumamoto-hitomojiguruguru-accessories", + "data": "0x001913190e014e01e101c001e1014e" + }, + { + "filename": "43-kumamoto-ikinaridango-accessories", + "data": "0x0018131b0e01000351010001d401b8028401d401d40129012a012901d4010003d40100" + }, + { + "filename": "44-oita-toriten-accessories", + "data": "0x0019121b0f01000293039301930200" + }, + { + "filename": "44-oita-yaseuma-accessories", + "data": "0x0018121a0e026002880288026002600288" + }, + { + "filename": "45-miyazaki-mango-accessories", + "data": "0x0018131a0e0100014601e601460100014601e6014601e601460100014601e601460100" + }, + { + "filename": "45-miyazaki-takachihokyo-accessories", + "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e10127010501270106010101050127012701050201013d010501270127053d0127" + }, + { + "filename": "46-kagoshima-senganen-accessories", + "data": "0x0016171f0907000201050005000101019d0500020103000461070001000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" + }, + { + "filename": "46-kagoshima-shochu-accessories", + "data": "0x0017121c0f0100012301000100013401000334017f01b7017f01b7027f0334" + }, + { + "filename": "47-okinawa-fish-accessories", + "data": "0x0017171d0d012401000224060001000224010001240500012401000224010001280100022801000600022801000128019b0100029b010001280100022801000100029b0100019b0500019b0100029b0600" + }, + { + "filename": "47-okinawa-satokibi-accessories", + "data": "0x0018161c0d0100011e010001c00100011e0100011e0100010001c00100011e010001c00100011e01c001c0011e010001c00100011e010001c00100010001c0010001c0010001c00100011e01000100011e0100011e0100011e0100011e0100" + }, + { + "filename": "47-okinawa-sukugarasu-accessories", + "data": "0x0018141d0e0200020102000100040101000101010e02b101ef01010101039d0201010004010100020002010200" + } ], - "images": { - "glasses": [ - { - "filename": "glasses-hip-rose", - "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" - }, - { - "filename": "glasses-square-black-eyes-red", - "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" - }, - { - "filename": "glasses-square-black-rgb", - "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" - }, - { - "filename": "glasses-square-black", - "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" - }, - { - "filename": "glasses-square-blue-med-saturated", - "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" - }, - { - "filename": "glasses-square-blue", - "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" - }, - { - "filename": "glasses-square-frog-green", - "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" - }, - { - "filename": "glasses-square-fullblack", - "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" - }, - { - "filename": "glasses-square-green-blue-multi", - "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" - }, - { - "filename": "glasses-square-grey-light", - "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" - }, - { - "filename": "glasses-square-guava", - "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" - }, - { - "filename": "glasses-square-honey", - "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" - }, - { - "filename": "glasses-square-magenta", - "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" - }, - { - "filename": "glasses-square-orange", - "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" - }, - { - "filename": "glasses-square-pink-purple-multi", - "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" - }, - { - "filename": "glasses-square-red", - "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" - }, - { - "filename": "glasses-square-smoke", - "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" - }, - { - "filename": "glasses-square-teal", - "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" - }, - { - "filename": "glasses-square-watermelon", - "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" - }, - { - "filename": "glasses-square-yellow-orange-multi", - "data": "0x000b17100703000626010006130300012602010223012601000113020102230113034201260201022301260142011302010223011301260200012602010223012601000113020102230113012602000126020102230126010001130201022301130300062601000613" - }, - { - "filename": "glasses-square-yellow-saturated", - "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" - } - ], - "accessories": [ - { - "filename": "01-hokkaido-crab", - "data": "0x0019161c0d0113010001130100011301000113010001130100011301000108011301080100011301000200051302000100011301000313010001130100" - }, - { - "filename": "01-hokkaido-melon", - "data": "0x0018131a0e014203000142012203420122010003220100" - }, - { - "filename": "01-hokkaido-sheep", - "data": "0x0018141d0e020001c1010e020003c10300010e0100010e0300040001c1010e020003c101000200010e0100010e0100" - }, - { - "filename": "02-aomori-jade", - "data": "0x0015141e090400010205000102050001020300010201000500017f0102011c01020101010004000101010001dd0102019b0100017f0700015203000b000b000b000b0002010900" - }, - { - "filename": "02-aomori-squid", - "data": "0x0018151d0f0300010802000100010102080101010002000208020001010100010801330200010001010123013301000101010101000101010001010100" - }, - { - "filename": "03-iwate-egg", - "data": "0x0018141b100100020101000101021e01010101021e0101010002010100" - }, - { - "filename": "03-iwate-fujiwara", - "data": "0x0017141c0f0100012303000200012302000200015d02000100026701cd0100046701310101013101670201" - }, - { - "filename": "04-miyagi-matsushima", - "data": "0x0016171f0c0600022901010100010104000301012903000b000b00025c0100025c01000129010003a205b106000300015c0100015c01290100025c0100030004b1010002b1010001a20a00020002a2010002290400" - }, - { - "filename": "04-miyagi-zunda", - "data": "0x0019131b10024e0100034e014e0101014e" - }, - { - "filename": "05-akita-fireworks", - "data": "0x0015171f0c060001c7010001c70200030001c101c7020001c1010001c10100050001c7010001c7020001c7020001c101c7050001c70100040001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c703000100014a010001c1010001c7020001c702000400014a010001c1020001c101000300014a0100014a05000400014a0600" - }, - { - "filename": "05-akita-hatahata", - "data": "0x0018141b0e011005000100015d021001230110011001000101025d01010300015d0200" - }, - { - "filename": "05-akita-raspberry", - "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e02b906b9020002b90200" - }, - { - "filename": "06-yamagata-lafrance", - "data": "0x0019131c10010001840100010001840122022201c601de0222" - }, - { - "filename": "06-yamagata-shogi", - "data": "0x0018131b10010001230100010002230123020001000223" - }, - { - "filename": "07-fukushima-akabeko", - "data": "0x0019141b0f01230133010101230100013301230133010101330133010001330200" - }, - { - "filename": "07-fukushima-train", - "data": "0x0018131b0f015802570158010e0285010e0485016a0258016a" - }, - { - "filename": "08-ibaraki-bellpepper", - "data": "0x0018121b0f01dd01e101dd01dd010f01dd01dd010f01dd0100010f0100" - }, - { - "filename": "08-ibaraki-natto", - "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" - }, - { - "filename": "08-ibaraki-rokkakudo", - "data": "0x0017171f09070001860400029107000186060004000161050001860300010001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d408000a0002910200050002910700" - }, - { - "filename": "09-tochigi-gyoza", - "data": "0x0018141b0e0100013401000134010001340134012501340125013401250188022501880225010001340100013401000134" - }, - { - "filename": "09-tochigi-lemon", - "data": "0x0018131c100152020103c701c7015201c7010101c701010352" - }, - { - "filename": "09-tochigi-shimotsukare", - "data": "0x0019131b0f016001930150014901500187019301600193014901ce0187" - }, - { - "filename": "10-gunma-akagiyama", - "data": "0x0019171b0c0100014901bf020002bf020001bf014901bf0149011b014901460149011b014901bf011b01460b06" - }, - { - "filename": "10-gunma-yakimanjyu", - "data": "0x0017161e0e04000236011101220300023401230101010003000136011101340136010002000134011101230101020001000134013601340101013602000100011101340123013403000100012201360134040001220700" - }, - { - "filename": "11-saitama-icicle", - "data": "0x0015171c090e0104000101010001010100010101000101010001010100040001e0010001010100010101000101010001010100060001010100010101000101010001e0010006000101010001e001000101030006000101030001e00300060001e0030001e00300060001e00700" - }, - { - "filename": "11-saitama-soka-senbei", - "data": "0x0018131b0f0100016001e6010002e601110160011103e60100011101e60100" - }, - { - "filename": "12-chiba-inubosaki", - "data": "0x0018171f0d0128010001280100042802000700010102000700010102000600040f04000154010104b105000254010102b103000354010102b101000354010103b10300" - }, - { - "filename": "12-chiba-peanuts", - "data": "0x0018131b100100016001d8010002600260010001d801600100" - }, - { - "filename": "13-tokyo-tower", - "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" - }, - { - "filename": "13-tokyo-yamanote", - "data": "0x0018141c0f010001c0010101c00100010103bc010101c003bc01c00101010001bc01000101010001c0010101c00100" - }, - { - "filename": "14-ibaraki-natto", - "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" - }, - { - "filename": "14-kanagawa-baybridge", - "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010001a201a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" - }, - { - "filename": "14-kanagawa-yacht", - "data": "0x0018141c100100015402000254014301000254024302000243037f0100" - }, - { - "filename": "15-nigata-edamame", - "data": "0x0019141b0e0200014e0200014e0100014e01c00100014e01c0011e01c00100011e01c00100" - }, - { - "filename": "15-niigata-riceear", - "data": "0x0018131d0f02000128010001000128020001c001280100012801c001000128010002c0020002c00200" - }, - { - "filename": "16-toyama-kutabe", - "data": "0x00031a17010d00060e06000b000a0e04000400010e04000e0e02000300010e04000f0e02000300020e0300100e01000300030e0200050e0501060e01000400070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e0401030e0a0e0701010e0401030e0a0e0501020e0501030e0a0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e01000500010e1300" - }, - { - "filename": "16-toyama-shiroebi", - "data": "0x0018131a0e0400010e010002ba010e01ba01ba0400" - }, - { - "filename": "16-toyama-tateyama", - "data": "0x0019171c090100017f020001a2017f0300027f01a20100017f027f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" - }, - { - "filename": "17-ishikawa-kotoji", - "data": "0x0018131c0e02000172020001000372010002000158020001000158010001580100015803000158" - }, - { - "filename": "17-ishikawa-kutani-kaga-gosai", - "data": "0x0018121a0f0118010f01c401a201e0018001c4010f0118" - }, - { - "filename": "17-ishikawa-oyster", - "data": "0x0017151c0e030001a0026b01a002000301016b01a0010001a0040101a001000401015d010001a00201015d01990200019901c301990400" - }, - { - "filename": "18-fukui-echizen-crab", - "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b80414020001000114010001b80214010001b80100" - }, - { - "filename": "18-fukui-yokan", - "data": "0x0018131b0e02000385020003850200038502570385" - }, - { - "filename": "19-yamanashi-fuji", - "data": "0x0017171e0c0600020b03000500020b01eb010b0200030007eb01000beb0b58010007580300020001e0015802e00500030002e0030002a90100" - }, - { - "filename": "19-yamanashi-grape", - "data": "0x0018121b0e0200019a01220100019a0112019a019a0112016e01120112016e01450100" - }, - { - "filename": "20-nagano-kappa", - "data": "0x0018131a0e020f0201010f0100013e0123013e01000100023e022a" - }, - { - "filename": "20-nagano-oyaki", - "data": "0x0018121b0e01b0011b02000157011b01b0011b0157028a0157010002570100" - }, - { - "filename": "21-gifu-gero", - "data": "0x0018141c0e020001010100010101000100010101000101020001c8013d0101013d010101c801c8043d01c8010004c80100" - }, - { - "filename": "21-gifu-gohei-mochi", - "data": "0x0019141b0d020004110100020101600111011a0111010102000260021a0100" - }, - { - "filename": "21-gifu-sarubobo", - "data": "0x0018131d0f010002230100012302440123017102440171010002230100010002230100017102000171" - }, - { - "filename": "21-gifu-ukaibody", - "data": "0x0015171f090592075402920592075402920592075402920592075402920292010002920754029202920100029207540292029201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" - }, - { - "filename": "22-shizuoka-fuji", - "data": "0x0017171d0c090002e0020003e0020001010300060002320101020003e0020005320100040001e10632020001dd04e1043204dd07e1" - }, - { - "filename": "23-aichi-oguratoast", - "data": "0x0018131c0e0293028401930193028401b80193019301b8028401930193018401b8018401930593" - }, - { - "filename": "23-aichi-tebasaki", - "data": "0x0017131a0e010001480300014804000548010003480100" - }, - { - "filename": "24-mie-iseebi", - "data": "0x0017151e0d02000132020001320200010001320100023201000132010001000132010002320100013201000132021802320218013201320100011802b40118010001320100011801000232010001180100030002b40300020001180132011801320200" - }, - { - "filename": "24-mie_mochi", - "data": "0x0019121a0f018401b80184018401b80184" - }, - { - "filename": "25-shiga-funazushi", - "data": "0x0018151a0e01420100013701000137020001420100014201000137010001370142010001420100014201000142" - }, - { - "filename": "25-shiga_hieizan", - "data": "0x0018171b090700020f05000500070f0200020f01000b0f028d01000b8d" - }, - { - "filename": "26-kyoto-daimonji", - "data": "0x0017161d0d0300011405000200011401490114040003140149031402000749020002000114014901140400021401490100014904140249030003490100" - }, - { - "filename": "26-kyoto-yatsuhashi", - "data": "0x0018131a0e02000157020001000157018601570100015702860257" - }, - { - "filename": "27-osaka-cheesecake", - "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b015707570100015701b7015701b701570100" - }, - { - "filename": "27-osaka-jinbezame", - "data": "0x0018161c0d010001a2020001a20400010601a2010002a20400020001a2010602a20106020002a2012302a20106012302a202000206025f01060200" - }, - { - "filename": "28-hyogo-akashiyaki", - "data": "0x0019141b0f02000260010001000160015d016001ae015d016002ae0160" - }, - { - "filename": "28-hyogo-tower-museum", - "data": "0x0017171e0c020001010800020001490200013f0500020001c20200026f0100013e0200020001490100013e016f023e0300020001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" - }, - { - "filename": "29-nara-kakinohasushi", - "data": "0x0019141c0f010001c0011b01c0011b0100011b02c0011b019501a2019501a2010002cc019701cc0100" - }, - { - "filename": "29-nara-narazuke", - "data": "0x0019121a0f03b801b8010001b8" - }, - { - "filename": "30-wakayama-mikan-kaki", - "data": "0x0018121a0f03c201c201e101c203c2" - }, - { - "filename": "30-wakayama-nankoume", - "data": "0x001a151b0d024e010002a60100029c024e010002a60100029c" - }, - { - "filename": "33-oakayama-mamakari", - "data": "0x0019151b0e01a2019d01a2019d01a201000157019d01a2019d01a2019d01060100050601000157" - }, - { - "filename": "33-okauama-muscat", - "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" - }, - { - "filename": "33-okayama-denim-jacket01", - "data": "0x0015171f090354049201000492025404540392010103920354055401920354019204540e540754010106540a54019201010192015402540100075403920154025401000454010102540392015402540100085401920254025401000b5402540100045401010654" - }, - { - "filename": "33-okayama-denim-jacket02", - "data": "0x0015171f0903540392040003920154045402920400029202540554019204000192035406540400045405540101040004540654040001540192010101920254010003540400015403920254010002540101040001540392025401000354040002540192015402540100035404000454025401000254010104000454" - }, - { - "filename": "33-okayama-denim-jacket03", - "data": "0x0015171f09035302540700025403530254070002540453025405000254015306530500035306530500010102530653050003530253010003530500010102530253010003530500035302530c0002530c0002530c00" - }, - { - "filename": "33-okayama-kibidango", - "data": "0x0018131b0f010002570100015703eb04eb010002eb0100" - }, - { - "filename": "33-okayama-momotaro", - "data": "0x00021914050200020c10000100030c1000040c1000030c0201040c0500040c020003000101060c0374060c010002000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c010012570100010012570100010012570100020001741057010003000557040c0757010003001057010004000e570200" - }, - { - "filename": "33-okayama-peach02", - "data": "0x0018151c0e0300015f03000200035f02000100055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" - }, - { - "filename": "33-okayama-retainer", - "data": "0x0015171f09054d010105040101024d054d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" - }, - { - "filename": "34-hiroshima-battleship", - "data": "0x0019171f09060001d70700030001d7010002d7070001d7020004d7010001d7010001d7020001d702d701000ad70100024801000b4802a201000ba202a201000ba2" - }, - { - "filename": "34-hiroshima-lemon", - "data": "0x0019131c0f0100022901220429042903290100" - }, - { - "filename": "34-hiroshima-oyster", - "data": "0x0018131c0e020001d901060101010001060288010101e9038801010106020c0101010003010200" - }, - { - "filename": "34-hiroshima-rice-scoop", - "data": "0x0018131c10036003600360010001600100010001600100" - }, - { - "filename": "34-hiroshima-shrine", - "data": "0x0018171f09040008770200050006bf0300060001bf020001bf0400050006bf0300060001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" - }, - { - "filename": "34-hiroshima-wani", - "data": "0x0017141d0d04560300015602000156030003000156030001000256040003000456070003000456" - }, - { - "filename": "35-yamaguchi-kintaikyo", - "data": "0x001b171f09010001ca020002ca010002ca010002ca010001ca01ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188013f023f01000b3f023f01000b3f" - }, - { - "filename": "35-yamaguchi-motonosumiinari", - "data": "0x0017171f090e53055303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" - }, - { - "filename": "35-yamaguchi-white -snake", - "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" - }, - { - "filename": "35-yamaguhchi-tsunoshima-big-bridge", - "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" - }, - { - "filename": "36-tokushima-awaodori", - "data": "0x0018131b0f0220015a01010100022301000100025f01000100025f0100" - }, - { - "filename": "36-tokushima-citrus-sudachi", - "data": "0x0018131c0e0100035c0100015c010101c70101015c015c01c7010101c7015c015c010101c70101015c0100035c0100" - }, - { - "filename": "36-tokushima-narutomaki", - "data": "0x0017141c0d02000301020001000101034f010101000101014f0301014f01010101014f0101014f0101014f01010101034f0101014f0101010005010100" - }, - { - "filename": "37-kagawa-oliveoil", - "data": "0x0017121c0f010001ac01000100015c0100035c015c01c6015c015c01c6015c035c" - }, - { - "filename": "38-ehime-dango", - "data": "0x0018131c0e0300021b020002a6011b0100027001a60100010001570170020001570400" - }, - { - "filename": "38-ehime-juice", - "data": "0x0018131f0c02000106018d01060200010602000140030001060140040601010106010003060100010606000142060001420600014206000142" - }, - { - "filename": "38-ehime-mandarin-orange", - "data": "0x00061a140604000c4204000200084201e1074202000100024201250f4201000242012511420142012512420142012512421442144214421442144214420100054203b30a42010002001042020003000e420300" - }, - { - "filename": "38-ehime-turt", - "data": "0x0018141c0e0100045701000157037002570157017001570270015701570270015701700157010004570100" - }, - { - "filename": "39-kochi-seared-bonito", - "data": "0x0019131b0f0378010001780294017801780394" - }, - { - "filename": "40-fukuoka-mentaiko", - "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf016a026a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" - }, - { - "filename": "40-fukuoka-umegaeda", - "data": "0x0018131c0e010003c1010002c1019702c101c1019701c1019701c101c1029702c1010003c10100" - }, - { - "filename": "41-saga-saga", - "data": "0x0017151d0e010002560200015601000100015602000156010001560256020001560100015607000156040001560100015601000156010001560100015603560100015601000156" - }, - { - "filename": "42-nagasaki-castella", - "data": "0x0018131b0f04ae0428042804ae" - }, - { - "filename": "42-nagasaki-gunkanto", - "data": "0x0016171f09020001010b000e00010001010c00050002620200016204000400036201000262040001000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" - }, - { - "filename": "43-kumamoto-hitomojiguruguru", - "data": "0x001913190e014e01e101c001e1014e" - }, - { - "filename": "43-kumamoto-ikinaridango", - "data": "0x0018131b0e01000351010001d401b8028401d401d40129012a012901d4010003d40100" - }, - { - "filename": "44-oita-yaseuma", - "data": "0x0018121a0e026002880288026002600288" - }, - { - "filename": "44-oita_toriten", - "data": "0x0019121b0f01000293039301930200" - }, - { - "filename": "45-miyazaki-mango", - "data": "0x0018131a0e0100014601e601460100014601e6014601e601460100014601e601460100" - }, - { - "filename": "45-miyazaki-takachihokyo", - "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e10127010501270106010101050127012701050201013d010501270127053d0127" - }, - { - "filename": "46-kagoshima-senganen", - "data": "0x0016171f0907000201050005000101019d0500020103000461070001000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" - }, - { - "filename": "46-kagoshima-shochu", - "data": "0x0017121c0f0100012301000100013401000334017f01b7017f01b7027f0334" - }, - { - "filename": "47-okinawa-fish", - "data": "0x0017171d0d012401000224060001000224010001240500012401000224010001280100022801000600022801000128019b0100029b010001280100022801000100029b0100019b0500019b0100029b0600" - }, - { - "filename": "47-okinawa-satokibi", - "data": "0x0018161c0d0100011e010001c00100011e0100011e0100010001c00100011e010001c00100011e01c001c0011e010001c00100011e010001c00100010001c0010001c0010001c00100011e01000100011e0100011e0100011e0100011e0100" - } - ], - "heads": [ - { - "filename": "01-head-01-hokkaido", - "data": "0x00021f1a0109000154140008000354130006000154010004541200090004541100090005541000090006540e000154090007540c000254090009540600015403000154010009000c540200025402000154020009000f540200015403000800105406000700125404000154070012540100025402000300025403001254040004000254010011540600040010540a00030010540b00020010540c000100035401000354020007540d000100025403000154040005540e00010002540a0003540e00020003540a0001540e0002000454180001000354010001541800010002541b00" - }, - { - "filename": "01-hokkaido-goryokaku", - "data": "0x00021b16040b0002540a000a00045409000900025401c001dd025408000800025401c001dd01c001dd025407000700035401dd02c001dd0254018706000500035402c001dd03c001dd0187035404000300035401c0015401c002dd03c0018702dd045402000100035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd025401000300025401c001dd02c00287029204c002dd01c00254010003000187015402c001dd03c0029203c001dd02c0025402000200015402870154018701dd08c001dd01c0025403000100015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c0025404000100025401c0025401c001dd02c004dd02c001dd01c0015404000300035401c001dd01c001dd04c001dd01c001dd01c0025403000400025401c002dd01c0045401c002dd01c0025403000400025401dd02c0065402c001dd025403000500055404000554040005000354080003540400" - }, - { - "filename": "01-hokkaido-ishikari", - "data": "0x00031c15040400067f0200017f0b000200037f0400017f0300027f0100017f07000100017f0200037f0200010d037f02e1010003a201e004000200027f0100017f020d06e103a203e004000400020d015702e101a2019501a201e103a2010d02e0019504000300020d015702a2019501ce029704a204e0010d03000200020d019501a201ce029703ce03a205e0020d02000100020d015704ce01cd02ce01cd02a206e00157020d01000100010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d010e010e010d01220957015d0657034e010d010e010e010d03010e570149024e010d010e0100010d0301015701f30c570249014e010d01000100010d01220101015701490d570149014e020d01000200020d034901570434025705010157020d02000300020d01490157023401af033405010157020d03000400030d033402af01340501020d04000600020d05340257030d060009000334030d0900" - }, - { - "filename": "01-hokkaido-tokeidai", - "data": "0x00011b14060a00010b0a00090002a101370900070002a1013701e9013701a10137070007000237030102370700080001e901010196010101e908000800015d01960201015d0800080002e9013702e90800080001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033702a102a1013702a10237010b01e903ca01e9010b01a1023702a10237023702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e901000100015d016f035d016f035d010b035d016f035d016f015d01000100080b013701a10137080b01000100035d010b035d02a10337035d010b035d0100010001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e901000100015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d0100010003e9010b04e9030b04e9010b03e90100" - }, - { - "filename": "02-aomori-apple", - "data": "0x00051915080800011b080004000455011b045504000200045502a6011b02a60455020001000655011e011b011e025501010355010001000a5501010455010011551155115511551155115511550100025501a60c55010001000f5501000200065502a60555020003000b550300050007550500" - }, - { - "filename": "02-aomori-dogu", - "data": "0x00021814080400080a04000400020a0236010a0236010a040004000136030a01ca020a013604000600020a0136010a06000500010a04ca010a05000500030a01ca020a0500010001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a01000500010a01ca030a01ca0500050001ca020a018a010a01ca05000500010a01ca010a01ca020a0500050006ca05000500060a0500050001ca040a01ca05000600010a02ca010a0600" - }, - { - "filename": "02-head-02-aomori", - "data": "0x00021b17040d00015409000c0003540400015403000c0005540100025403000c00085403000b00055401000254040005000154010001540300045402000254040004000554020001540500025404000500045407000354040006000454020001540300035404000500055402000254020003540400050005540200035401000354040005000f54030004001054030002001254030001001354030015540200010015540100010005540100055401000a5401000154060003540300085401000e0004540100015403000e00025407000e0001540800" - }, - { - "filename": "03-head-03-iwate", - "data": "0x00021717090900015404000600055403000200015401000754030002000a54020001000a54030001000b54020002000b5401000d54010001000c5401000d54010001000d5401000d540d5401000e540c54020001000c5401000c54020001000c54010001000a540300020006540600040004540600050001540800" - }, - { - "filename": "03-iwate-moriokamen", - "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" - }, - { - "filename": "03-iwate-nanbutekki", - "data": "0x00031b14060700050e09000400030e0500030e06000300010e0b00010e05000200010e0d00010e04000200010e0d00010e04000200010e0600010e0600010e04000300010e0100090e0100010e050003000d0e050002000f0e04000100110e03000100110e0100020e150e140e0100140e01000100130e01000100050e0163010e0163010e0163010e0163060e020002000f0e040003000d0e0500" - }, - { - "filename": "04-head-04-miyagi", - "data": "0x00031c1808060001540a00025401000500045408000254010003000954040002540100015404000754030001540100025402000500085401000454020004000d54030003000f54020004000d54030003000f54020004000d54030004000d54010001540100030008540100015403000254020003000954050001540200020009540900020008540a00020008540a00010008540b0009540b0009540b00020007540b00050003540c00060002540c00" - }, - { - "filename": "04-miyagi-datemasamune", - "data": "0x00011d150517000128150002280100120002010128030008000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e080003000528030103280192010e019207000100020e01000192010e0192020103280192010e0192010e0192010e0100020e03000100010e0100010e0192010e0b92020e0100010e03000200020e0292030e0192010e0192010e0192030e0192020e04000200030e0192020e0192020e0192020e0192020e0192020e04000300010e01920188010e0192030e0192030e0192020e019205000300010e01920c880192010e05000300010e01540c880154010e05000300012801540c8801540128050002000128010e01540788016004880154010e012804000200020e01540788016004880154020e040001000128020e01540788016004880154020e012803000100030e01540588026004880154040e03000200030e01540388042303880154030e04000400020e025406880254020e0600080006540a00" - }, - { - "filename": "04-miyagi-tanabata", - "data": "0x00041c160406000de1010001bf0300050001e1010001010400010104000101010002e1010001560100040001e1020001010400010104000101020001c701e10200030001e102000356020003bf020003c7030001bf0100020001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c7020001560100010001e10300055605bf05c70400010001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" - }, - { - "filename": "05-akita-akitainu", - "data": "0x00031a14021100012b06001000022b010105001000032b020103000f00042b01010123020101800e00042b06010c00062b0301025f01000b00072b0501015f0a00092b0201030009000b2b010103000200040103000b2b0101030001000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b050001000201032b0101052b020102000101022b05000200040101000101042b010103000201012b05000800032b0301030003010400" - }, - { - "filename": "05-akita-magewappa", - "data": "0x00041a15040200108e0400010012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de0200010001de0788016001880184068801de0300020007de01d801de018406de04001600030012c90100020014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de018803000888016001880184078801000400018e01de018e02de018e04de018e02de018e01de018e0200" - }, - { - "filename": "05-akita-namahage", - "data": "0x00021a16040700014109000141040007000241070002410400080002410500024105000600062301000523040005000123060e0123050e0123030004000123010e0623010e0523010e0123020003000123010e0123010e0123040e0123040e0223010e0123010003000123010e0123010e022307410323010e0123010003000123010e0123010e014103230318032301410123010e0123010003000123010e0123010e034102230141022303410123010e0123010002000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e0123010001000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e0123010001000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e0123010001000123010e0123010e012301410101012301cf041801cf0123010101410123010e0123010001000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" - }, - { - "filename": "05-head-05-akita", - "data": "0x00031617090300055403000254040009540400095403000a5403000954010002000a540100015401000a5401000d5403000854020004000854010004000754020004000754020004000754020004000654030003000754030003000754030002000954020002000a540100040007540200050007540100070003540300" - }, - { - "filename": "06-head-06-yamagata", - "data": "0x000318180a05000254070005000454050004000754030004000854020004000954010003000b5402000c5401000d5401000c5401000e5402000c5402000c5404000954010004000854020004000854020002000a540200020009540300020008540400020007540500020007540500030006540500060003540500" - }, - { - "filename": "06-yamagata-hanagasa", - "data": "0x00021b170508000641080006000241065702410600040002410a5702410400030001410a5701320141025701410300020001410157013201410132025701c603570132024101320257014102000200014101570441025701dd025703410132014101570141020001000141015701320341025701dd045701410132014103570141010001000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd085701410141035701c6035702dd0341085701410141075701dd024101320241035701410132025701410141035701410357024101320141013201410257044101570141014102570132024102570332024101320141015702410132014101570141014102570141013201410132025702410232014102570132024101320157014101000141015701320241013203570341015701280257023201570141010001000141025701410132075701280123012804570141010002000141035701c6075701280123012802570141020002000141065701320341013201570128012301280157014102000300014105570141013201410132035701280157014103000400024104570141013204570241040006000241065702410600080006410800" - }, - { - "filename": "06-yamagata-zaookama", - "data": "0x00041d14040a00072702010227040007000b2703010127030005000e27024c0101012702000400022701010c2704010127010003000127020103270a010127024c0101012701000200020102270301073004010127030101270100010102270201019b0b3002010127024c01010127022703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f3003010127020001000201014c01010e3003010127020002000101014c03010a300201014c01010127030003000201014c0b01014c0101014c0101040005000401014c0101014c0101014c0301014c01010600" - }, - { - "filename": "07-fukushima-peach", - "data": "0x00041d16040500020f12000300030f0197010f0100030f0d000100060f0297030f0100020f0a000100030f05b90297030f0197010f09000100020f04b9011902b9020f0297030f0100020f05000100020f04b9011903b9040f0197010f0100030f04000100010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297020f040f05b9040f05b9011902b9040f0d0f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f01000600020f0100050f03b9021903b903000a00030f04b9011903b904000a00010f020003b9011904b90400100003b90600" - }, - { - "filename": "07-fukushima-tsurugacastle", - "data": "0x00011a140309000162050001620700080001620700016206000900078907000900078907000800098906000900020103080201070007000b89050006000d89040007000201017f0108010101890101017f0108020105000600068901010689040005000689010101a301010689030006000101017f010107890101017f01010400050005890201017f0201058903000300019406890501068901940100020002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" - }, - { - "filename": "07-head-07-fukushima", - "data": "0x00051b17030e00035407000e0006540200015401000800035403000654020002540700055402000a5406001254050013540500135403001554185401001754010017541854020016540200075402000d540100065406000a540100010003540a00095401000e00095401000f000354010002540300100001540700" - }, - { - "filename": "08-head-08-ibaraki", - "data": "0x0003191807090001540300015404000900025401000554010009000754020009000754020008000854020008000754030008000754030008000654040008000654040007000754040004000a54040002000b54050002000b5405000e5404000e54040002000c54040003000c54030003000c54030004000c5402000700045403000254020010000154010011000154" - }, - { - "filename": "08-ibaraki-anglerfish", - "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" - }, - { - "filename": "08-ibaraki-hananuki-ravine", - "data": "0x00041c1502040001c006000136019701c601d80197013602bf0700020001c0060001bf01000136019701d801bf01970136060001bf0200060001bf010001bf0100029704d802970800040002c604000136019701d8019702d801970136020002bf0400070001c601000197013601d80188019701bf018801d8013601bf030001c0030009000136019702d8029702d801970136010001c0020002c00100010002c0020001c0010001bf01000136019701bf018802970288019701360700030001c0010002bf01000197013603d8029703d8013601970600080002970388029703880297020001c6010001bf010007000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf0300010002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d802970400010002bf02000136029705d8029705d802970136030005000136019701d802bf02d802bf019701d802bf03d801c60136010001bf01000400019701360197038802bf0188019702bf048801c60197013602bf0100040001970136019706d8029706d8019704bf170002bf0100" - }, - { - "filename": "08-ibaraki-rocket", - "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a26010101000500057f0b2601000400057f0b2602000300057f0b26030002000155047f0b260400024201000155027f020109260500040001550100030107260600030001420100020d0301032601290126017f060002000142010001730100020d03010326017f0700050001420100010d0100027f0201017f08000600017301000155027f0101017f0900030001730200024201000155027f0a000a0001550b00" - }, - { - "filename": "09-head-09-tochigi", - "data": "0x000418160709000454040007000854020005000b54010003000d54010002000e54010001000f54010002000e54010001000f54010001001054105401001054010003000d54010002000e54010002000e54010002000d54020001000e54020002000954010001540400030006540800060003540800" - }, - { - "filename": "09-tochigi-sanzaru", - "data": "0x00041e1401050003340500043404000434040003000634030006340200063403000300023401af013401af02340100023401af013401af063401af013401af013403000200013401b805af033405af043405af013402000200013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af01340200020002b805af01b8023404af01b801af01340135013405b803000300023401af020e01af01b8023401af04b80135033402b8010e02b8013402000200033403af0434013504b801340135033402af04340100010001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af013403000100063402af0100023405af0135033403af01340400010003340235013401af0234020005af0135043401af013405000200013401350734010005af053401350234040002000b3403af013506340135023403000100063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" - }, - { - "filename": "09-tochigi-strawberry", - "data": "0x000416150602000122020001c0010001c008000300012204c003710500020001c0022204c004710300010005c00571010102710200020002c006710101017101010171020002c0017101c0077101010371010001000e71010001000f7101000f7101000f7101000f7102000e7102000d71010003000c710100040004710146027101460371010005000471024603710200070007710200090004710300" - }, - { - "filename": "09-tochigi-toshogu", - "data": "0x00031f1402060001c70f0001c70600070003c7022901c7012908c70700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30700060002c702e3012701e3012701e3012701e3012701e3012702e302c706000500012902e301c7012901c701e302c7015402c701e303c702e301c705000600016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0600050001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290500090001c7027f01c7037f01c7027f01c70900070002c70154014101c70154014101c70141015401c70141015402c70700010001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014102c701c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" - }, - { - "filename": "10-gunma-kusatsu", - "data": "0x00041d15030600020d0200020d0200020d0200020d06000400013201da028802da028802da028802da028801da013204000400013201da023202da023202da023202da023201da01320400050001da025702da025702da025702da025701da0500060002570200025702000257020002570600060002570200025702000257020002570600030003e6025702e6025702e6025702e6025703e6030003000193013e018d0257023e0257023e0257023e02570101013e0193030003000193013e0101033e018d023e018d033e018d033e018d013e0193030003000193013e028d053e018d043e028d023e018d0193030003000193023e018d013e018d013e018d023e018d013e028d013e018d033e0193030003000193018d053e018d023e018d053e018d013e018d0193030003000193013e018d033e018d063e018d013e018d023e010101930300030001930101033e018d033e018d023e018d023e018d013e018d013e0193030003000193033e018d033e047f018d013e018d043e019303000100027f0193033e018d033e017f023e018d033e027f023e027f0100017f017f0200017f03e6017f0ce6027f01e603000100027f0100027f1400" - }, - { - "filename": "10-gunma-negi", - "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030001dd03dd0100034c03dd0100034c010003dd04dd034c04dd034c03dd0100010003dd034c04dd024c04dd0100010003dd034c04dd024c03dd0200010004dd024c03dd024c04dd0200020003dd024c03dd024c03dd0300030002dd024c03dd024c02dd0400050001dd014c02dd024c01dd06000500074e06000600054e0700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c103ca01c10700060001c1010101c1010101c107000700010101c101010800" - }, - { - "filename": "10-head-10-gunma", - "data": "0x00021c17060c00015409000a00035409000a000454080009000854050009000754060007000a54050005000b54060002000e54060001000f5406000100105405001254040011540500115405000100025401000d54050004000c54060004000e5404000300095401000754020004000754070003540100030008540a000154040005540d00040003540f00040002541000" - }, - { - "filename": "11-head-11-saitama", - "data": "0x00071c1403080002540f00080005540c000700095401000254060007000e54040005001154030003001354030001001654020017540200185401001854010001000554010012540300025405000f540d000c540e000254020002540500" - }, - { - "filename": "11-saitama-tokinokane", - "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" - }, - { - "filename": "11-saitama-whitetiger", - "data": "0x00031a1406020002010b00020103000100040109000401020001000101015f020109000201015f010102000201025f020107000201025f01010200090103e3060102000100030101e3050101e3050101e3010102000200010101e3040101e3030101e3040101e302000200040101e3020101e3010101e3020101e303010200020010010200020001e30e0101e30200020010010200020010010200020001e30e0101e30200020010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" - }, - { - "filename": "12-chiba-loquat", - "data": "0x0003181508070002c9070006000426060004000826040003000a26030002000c26020001000e26010001000e260100102610261026102610261026102601000f26010006260186012601860526010002000626018605260200040008260400050006260500" - }, - { - "filename": "12-chiba-nanohana", - "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a02000300012a0100012a0100022a0100022a0100012a0100022a0100022a06000200012a0100122a0100012a02000200172a01000100062a0122112a01000100152a0122022a01000100032a0122152a1a2a042a01c0102a01c0042a032a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a02000100012a020001c0102a01c0012a0100012a0100" - }, - { - "filename": "12-head-12-chiba", - "data": "0x000219170801541000010001540f00010002540e000200035404000354050002000c54030001000e5402000100105402000b540400020001540100085405000500065406000400065407000300075407000200085407000100095407000a540700020008540700010009540700010008540800010004540c00020002540d0004540d00010002540e00" - }, - { - "filename": "13-head-13-tokyo", - "data": "0x00091c140301000254160007541200010009540f0001000a540300025402000654010002001654010003001654040015540600135407000f54010001540100080006540300055403000c0003540400045402000d000154070002540200" - }, - { - "filename": "13-tokyo-station", - "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" - }, - { - "filename": "13-tokyo-tower" - }, - { - "filename": "14-head-14-kanagawa", - "data": "0x00041d160306000254120007000254110007000354060004540600070007540300055404000600095402000754020006000a54010009540400155401000200145404000100165403001654040002001454040002001454040003000c5401000654040003000754090004540300020006540c0005540100020005540d0004540200020005540e0004540100030005540c000254040004000254010001540d0002540300" - }, - { - "filename": "14-ibaraki-anglerfish", - "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" - }, - { - "filename": "14-kanagawa-curry", - "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d4043502010100030102000400020105d40535020106000300030105d40635020105000300020106d40635020105000300020106d40635020105000300030105d40635020105000400020104d40635020106000400030103d40635020106000500030101d401860142016003350201070006000401033503010800070008010900090004010b00" - }, - { - "filename": "14-kanagawa-king", - "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" - }, - { - "filename": "15-head-15-niigata", - "data": "0x00021b170413000254020013000254020009000154090004540800015409000554070002540900035402000700035407000454020008000254050006540200070002540400095401000c00095402000c00095402000c00085403000b00095403000a000854050009000754070008000954060007000954070004000d54060002000f540600085402000554010001540600010002540100035403000454090001000154090002540a000b0001540b00" - }, - { - "filename": "15-niigata-sasadango", - "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" - }, - { - "filename": "15-niigata-tulip", - "data": "0x00041a1506090002b90900080004b90800010002b9040006b9040002b9010004b9030006b9030004b905b9010008b9010005b914b914b914b914b914b914b914b9010012b90100010012b90100020010b90200020009b9016a06b90200040006b9016a05b90400060008b90600" - }, - { - "filename": "16-head-16-toyama", - "data": "0x00051b17050300045409000454020002000454090006540100020003540a00065401000100055408000854010007540600085401001554165401001554165401001554010014540100010014540100010013540200145402000b54010001540100065402000854080003540300010006540f0001000154030002540f00050001541000" - }, - { - "filename": "16-toyama-blackramen", - "data": "0x00041b150508000633080006000a33060004000e3304000300053306850533030002000433038502d3058504330200010003330385018803d303e4048503330100010002330285018803d302010222010103e402850233010003330285018802d3070103e40185033302330285018803d3082202e40285023302330285018802d3092203e4018502330233028503d3080104e4018502330333018504d3062204e40185033301000233028504d3040104e4028502330100010003330185018805d3078503330100020003330185018803d3028503e402850333020003000333048503e40385033303000400043306850433040006000a330600" - }, - { - "filename": "16-toyama-kutabe" - }, - { - "filename": "16-toyama-raicho", - "data": "0x00031d15021200047f05001100077f03001100047f020e017f010e02000600010f0a00077f020e0100050001dd010f01dd0800077f0400050001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f04000100010e017f0200010f01dd017e107f03000100017f020e157f02000200177f02000200177f02000300167f02000300157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e0300010002dd017e010f0300027f0400027f0500010f017e02dd02000300010f037e0100027f010e0300027f010e0300027e010f0400" - }, - { - "filename": "17-head-17-ishikawa", - "data": "0x00031517080a0003540700055401000600065401000600045403000500035405000500035401000154030006000454030006000454030007000154050006000254050006000154060005000354050005000254060004000454050003000454060002000554060001000754050007540600010007540500020005540600050002540600" - }, - { - "filename": "17-ishikawa-curry", - "data": "0x00071c1504060001010172020108720600040003720ab8037204000300027201b80225013403250234022502b8022201720300020002720325013401250134012502340125013402250422017202000100027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b80172017201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b80172027201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b802720100020003720fb8027202000300037204b8036406b8027203000500037208b80372050007000a720700" - }, - { - "filename": "17-ishikawa-jibuni", - "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b8032302000300032301de0123038301b8012301de032303000400032301de052301880223040006000223018801de022301de01230600" - }, - { - "filename": "17-ishikawa-kinpaku", - "data": "0x000518150705a6076d05ea03a60b6d03a60aa6066d01ea09a6086d07a60a6d10a6016d11a611a604ea0da611a6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" - }, - { - "filename": "18-fukui-dinosaur", - "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b02000b0001e8011b01e8011b01e8011b01e80200071b011b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a03000100011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a04000200021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a04000300041b01e8011b01e8051b01e8061b05000400022a071b01e8081b05000600022a051b01e8081b05000800012a091b022a0100041b02000900032a021b01e8032a09000c00031b0c000d00021b0c000e00011b0c000e00021b0b00" - }, - { - "filename": "18-fukui-sabae-glasses", - "data": "0x00091c1206030004710800047103000100027102060201027104000271020602010271010001000171020603010106017104000171020603010106017101000171020603010306047102060301030601710171010603010406017102000171010603010406017101710301050601710200017103010506017101710201060601710200017102010606017101000171060601710400017106060171010001000271040602710400027104060271010003000471080004710300" - }, - { - "filename": "18-head-18-fukui", - "data": "0x00041a18020c0001540b000b0003540a000c00035409000b0005540100025405000a000a5404000a000d54010009000d54020009000d5402000a000d5401000a000e540b000d540c00035401000254060009000154010004540900090001540100015401000254090006000154020003540c00070005540c000100015401000154010006540d00025401000554010001540e0008541000010007541000020004541200" - }, - { - "filename": "19-head-19-yamanashi", - "data": "0x00051a1806040002540e00030003540e00010001540100065401000354070001000f5404001054040001001054030012540200145401001254010001001354020012540200115401000100105403000200055401000754050001000654030005540500010006540d00030003540e00040002540e00040003540d00050002540d00" - }, - { - "filename": "19-yamanashi-shingen", - "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" - }, - { - "filename": "19-yamanashi-wine", - "data": "0x0001161409050003e705000500035b0500050003e70500050003e705000500037905000200011b082202000100011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" - }, - { - "filename": "20-head-20-nagano", - "data": "0x000319170b0b000254010006000154020005540500095405000754020005000754020004000754030003000854030003000a54010003000954020002000b54010002000a54020003000a5401000200085401000354095404000154010008540500020006540600020007540500030005540600030005540600020006540600020004540800" - }, - { - "filename": "20-nagano-matumotocastle", - "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" - }, - { - "filename": "20-nagano-wasabi", - "data": "0x0003161505040002220100024e08000100024e01000222034e08000122024e0222034e09000122034e0122014e0222090001000122034e032201c90122070002000622014e022206000200013f022201c9014e042206000200013f014e0622014e01c90500030001c90922040003000a22040003000422014e062203000400013f014e0522014e0322020005000922014e020005000b22010006000122014e082201000700042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" - }, - { - "filename": "21-gifu-gassho-summer", - "data": "0x00021d14040b0003d80b000b0003d80b000a0002d8018402d80a00090002d8038402d80900080002d80184037c018402d80800070002d8028402010123028404d80500070001d8028401ca0201012301ca028401d80700060001d8028407ca028401d80600050001d80184057c01ca057c018401d80500040002d8018401ca030103ca030101ca018402d80400030002d8028401ca030103ca030101ca028402d80300030001d802840dca028401d80300020002d8018402ca020101ca020101ca020101ca020102ca018402d80200010002d8018403ca020101ca020101ca020101ca020103ca018402d80100010001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" - }, - { - "filename": "21-gifu-gassho-winter", - "data": "0x00021d14040900070109000800030103d8030108000800030101d8018401d8030108000700030101d8038401d8050105000600030101d80184037c018401d8040105000500030101d8028402010123028401d8010102d805000400030101d8028401ca0201012301ca028401d80200010104000300030101d80184030103ca0301018401d8030103000200030101d80184050101ca0501018401d8030102000200030101d801840bca018401d8030102000100030101d802840bca028401d8030101000100020101d802840dca028401d802010100030101d801840fca018401d80301020101d8018411ca018401d80201010101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" - }, - { - "filename": "21-gifu-keichan", - "data": "0x00021d1a03040002061400060004060500050606000a000106090003060300040006060100017d029c0900010602000300010605000322017d029c0200060603000400090601d2019c010001060900030003ca0123022203e901220106017d029c0106022303ca0300020002ca0223022201e9037d01220106027d019c017d0106010c022302ca0200010002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012302ca02ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c0123012301ca0123010c0322047d029c0322027d029c017d0122010c012301ca01230123010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012302ca02ca0123010c0422017d029c037d0422027d0222010c012302ca03ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca0100020004ca0e2304ca0200030014ca03001a001a001a000c00013d0101013d01010a000d00013d0100013d0a00" - }, - { - "filename": "21-gifu-ukai", - "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f5407000300105407000300105407000200115407000200045401920c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c020101f406000100030c0601010c07a6010101f406000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" - }, - { - "filename": "21-head-21-gifu", - "data": "0x00031817060c0001540100025402000b000754070002540100085407000a54010007000a54010006000a54020006000b54010006000a5402000700085403000800065404000100025401000b54030001000f5402001054020001001054010002001054020010540300055402000754010003000454040006540100020004540600015401000254020002000154010002540c00050001540c00" - }, - { - "filename": "22-head-22-shizuoka", - "data": "0x00031d14050a0001540d00090002540d000a0001540d00090002540400015408000a000154040003540200035401000800035401000154020008540100060007540200075402000500095401000754020005000c540200055404000c5404000354010003000c540600035403000d5402000554010002000c54040006540c54070005540d540500055401000c5407000454010004000254020003540700045402000a000154080002540300" - }, - { - "filename": "22-shizuoka-oden", - "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" - }, - { - "filename": "23-aichi-hitsumabushi", - "data": "0x00071a15060800040e08000500050e0134040e05000300040e0234012b013401350134040e03000200010e010b033401350234012b023401350334010e02000100010e010b0134012b03340135053401350234010b010e01000100010e01350234012b0634012b033401350134010e0100020e0834013506340135020e020e023401350234012b033401350334012b0234020e020e010b023401350b34012b020e030e010b093401350334030e050e023401350234012b03340135050e0100080e0234080e01000100120e01000200100e020004000c0e0400" - }, - { - "filename": "23-aichi-tenmusu", - "data": "0x00011b1406090001ce010001ce0900090003ce0900090003ce0900090003e70900070001bc05e701bc0700060001bc010105e7010101bc0600050001bc010107e7010101bc0500050001bc020101e7030101e7020101bc0500040003bc070103bc0400040005bc030105bc0400030007bc010107bc030003000fbc0300020010bc0300020011bc0200020011bc0200020011bc0200010013bc0100010007bc010101bc010101bc010107bc010015bc15bc" - }, - { - "filename": "23-head-23-aichi", - "data": "0x00041c170505000154110001000154010004541000010007540f0001000854020002540300015406000e54010002540200025402001754175401001554010001000354010011540100020001540100115402000400105403000300115403000300035401000d540300020001540100015401000d5404000400015402000a540600030002540500015402000354070004000254060001540100025407000b000554070007000154010005540900060005540c00" - }, - { - "filename": "24-head-24-mie", - "data": "0x000318170b06000254050007000254040007000354030006000354040005000454040002000654050001000654060002000554060002000754040002000854030004000854010002000b540200075401000254010003000554050002000354080002000254090003000254080001000354090003540a0002540b00010001540b00" - }, - { - "filename": "24-mie-ninja", - "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" - }, - { - "filename": "24-mie_jingu", - "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" - }, - { - "filename": "25-head-25-shiga", - "data": "0x000316160807000254050007000354040006000554030003000154010007540200030003540100015401000354020003000354030004540100010004540500035401000654040003540100010005540300035402000100045403000454020001000354020007540100010003540300075402000154020009540100025401000a540100025401000954010001000c54010002000a540200020009540300040003540700050002540700" - }, - { - "filename": "25-shiga-blackbass", - "data": "0x00021d18021700018d0100018d01001700038d01001600058d1700048d0a00016b0c00038d01000900036b010003c50157012303c50100038d02000800036b02c5011e02c5025702c50100028d04000500026b0100016b02c5031e06c50100038d03000500036b01c5041e01c5011e05c5028d05000400036b01c5031e01c5041e02c5010101c5030104000400026b01c5031e01c5031e0101016b060105000400016b01c5061e0201016b0201011e03010600050001c5031e01c5011e0201016b0201031e02010600050001c5041e0201016b0201031e02010700050001c5021e01c50201016b0701011e0700040001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010e000100066b0300031e0e000300046b0300021e0f000300046b14000400036b1400" - }, - { - "filename": "25-shiga_hikonecastle", - "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" - }, - { - "filename": "26-head-26-kyoto", - "data": "0x0005171507030003540a000154010004540a0005540b0006540100025407000300045401000154070003000654070001000a54050002000b54030003000154010008540300050008540300080005540300080005540300070007540200090001540100035402000b00045401000c0004540c00025401000154" - }, - { - "filename": "26-kyoto-kinkaku", - "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" - }, - { - "filename": "26-kyoto-kiyomizu", - "data": "0x00061a14051584010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100" - }, - { - "filename": "27-head-27-osaka", - "data": "0x000616150b05000254010001540200060004540100060005540600055406000554060005540500065405000554010006000454010006000354020005000554010005000654020001540100075403000754010001000554050003540800" - }, - { - "filename": "27-osaka-takoyaki", - "data": "0x00021e15020b0001af010001af020001af027d0900090001af027d01af0100017d01af010002af09000600017d010001af017d03af017d01af020b017d010003af060003000157020001af017d02af017d01af020b01af0134017d013401af027d0700040001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0600050001570100010b02af01dd01af013402af017d0134010b03af010001af05000600015701af023401af010b02af010b023402af020b01dd01af050006000134010b02af010b0234010b0234020b0111010b0234010b050005000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f0100050001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f010005000334010b0134020b0b60050005000234020b0134010b01110260039303600393050005000134010b0234010b013401110b6005000600040b0111046002930560060006000134010b0234011101930134019305600293016006000200037f0200023402110160053404600700017f0300017f0300013401110260013403600293026008000100037f03000234011101930134076009000b00036003930b00" - }, - { - "filename": "27-osaka-tower", - "data": "0x000216150b05000195050004000395040002000195063c020003000195043c0300040003c604000100016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f01000300019501c6019501c6019503000300019501c6019501c6019503000300019501c6019501c6019503000200029501c6019501c6029502000200029501c6019501c6029502000200029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f010001000195016f019503000195016f019501000100016f019505000195016f010001000195070001950100" - }, - { - "filename": "28-head-28-hyogo", - "data": "0x0004181d07040005540800020007540800030007540100015405000300095405000300095405000400065407000400065407000400085401000154030002000c54030003000e5402000f5401000f5401001054010011541154010010540100025405000754010001540a000454030011000a0001540600090001540700080002540700070003540700060005540600070003540700070001540900" - }, - { - "filename": "28-hyogo-himejicastle", - "data": "0x00021a15010b00017f0700017f05000c0007e006000c0001e0019d01e0019d01e0019d01e006000b0002e0019d0301019d02e005000c00070106000c00010101920101019d01010192010106000800017f020001e0019d01e0019d0101019d01e0019d01e00200017f0200090001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e003000700017f02000101029d01010192010101920101029d01010200017f01000800017f01e0019d0201019d03e0019d0201019d01e0017f02000300017f040002e005010192050102e0020003e00500017f01e0010101920101019201e0010101e00192010101920101027f020001e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d01000192010101920300037f040105920501020001e0019d01e0019d01e00100037f010101920101079201010192020102000101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d019d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f01000192010101920101019201010192100102000401019d01e0019d01e0012b0250012b0350012b0250012b0350012b0200012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" - }, - { - "filename": "28-hyogo-tajimaushi", - "data": "0x0004191504010002b50f0002b5010002b5110002b502b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b01000300010b0d0d010b0300150d150d150d0100130d01000300100d020004000c0d05000400060d0ab501000400050d0bb501000400050d05b5020d01b5020d01b501000400050d0bb501000400050d02b5070d02b5010009000ab50200" - }, - { - "filename": "29-head-29-nara", - "data": "0x000316140b02000154080002000254010002540100015402000200075402000100075403000100075403000200085401000200095401000854020001000854020002000754020003000654020001000854020001000854020008540300095402000100065404000100055405000100015401000154010001540500" - }, - { - "filename": "29-nara-ashura", - "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" - }, - { - "filename": "29-nara-deer", - "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" - }, - { - "filename": "30-head-30-wakayama", - "data": "0x0004161606080002540600015402000754060001000a5405000200085406000100085407000100085407000200065408000100085407000a54060009540700020007540100015401000154030003000a54030005000954020006000954010005000b54060009540100070009540900055402000c0001540300" - }, - { - "filename": "30-wakayama-danjogarandaito", - "data": "0x00011914080800019508000800012108000800019508000800012108000700012701e301270700060001e3012701e3012701e30600040001e3012701e3012701e3012701e3012701e30400020001e3012701e3012701e3012701e3012701e3012701e3012701e3020002000db40200050001b4010101b4010101b4010101b40500050007b405000500012801dd01b401dd01b401dd012805000400090104000100012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b40300030001b401dd01b401dd01b401dd01b401dd01b401dd01b4030003000bb40300030001b4010101b4010e01b4010e01b4010e01b4010101b403000100047f07e0047f0100" - }, - { - "filename": "30-wakayama-nachifall", - "data": "0x000216150a0100036102e001610101046101610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e00301026202000400010101e0010101e004000400020101e001010400040001e0030104000500010101e001010400050001e0020104000500030104000500020101e00400050001e0010101e004000500010101e001010400050003010400050003010400050003010400030001010100016201010162010102000101050001010162020103000500020101000101010001010100020001010100010101000101010001010300" - }, - { - "filename": "31-head-31-tottori", - "data": "0x00091c13061200025402000100015404000254040002540200045402000200015401001054020003001254010002001354010002000554010004540200085402000554030001540400075406540a00035401000254010005540a00015405000454120002541400" - }, - { - "filename": "32-head-32-shimane", - "data": "0x000319190710000254100002540e000154030012001200120012000e00035401000b00055402000a00075401000b0006540100090008540100080007540300070008540300050007540600040006540800030008540700020004540c0005540d00010004540d0004540e00010003540e00010002540f00" - }, - { - "filename": "33-head-33-okayama", - "data": "0x00031b1606050002540400025408000500045401000554060004000c540400015404000c540100035401000200125401000100125402001354020001001154030012540300125403001254030001001154030001001254020001001054040001001154030002000f54040002000a5402000254050003000b5407000300035402000554080004000154040001540b00" - }, - { - "filename": "33-okayama-denim01", - "data": "0x00061815090a54042b01540799010c0299042b01990754019907540154059901540199015405990154015401f5035401f501540199015401f5035401f501540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" - }, - { - "filename": "33-okayama-denim02", - "data": "0x00061815090a92042b01920799010c0299042b01990792019907920192050c019201990192050c0192079201990792079201990792079201990792079201990792079201000792079201000792079201000792079201000792079201000792079901000799079d0100059d010101f6079d0100059d010101f6" - }, - { - "filename": "33-okayama-denim03", - "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca07920192050c019201ca0192050c0192079201ca0792079201ca0792079201ca0792079201ca079207920100079207920100079207920100079207920100079207920100079207ca010007ca079d0100059d014d01f6079d0100059d010101f6" - }, - { - "filename": "33-okayama-dog", - "data": "0x00031a1506010003260c00022602000100015703260a000226015702000100025703260800022602570200010003570c2602570200010002570e2601570200010003260601016a05010226020001000801036a0601020001000801010f016a010f06010200010003010d26010102000100112602000100052603570326035703260200010011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db018801001000025f0200" - }, - { - "filename": "33-okayama-horseshoe-crab", - "data": "0x00051815010a00088e0500090003d5098e02000800028e02ca01d5068e0101028e0100060001ca048e01ca01d5028e04c3018e0101018e01000700048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0100090003d5098e02000a00088e0500" - }, - { - "filename": "33-okayama-momotaro" - }, - { - "filename": "33-okayama-monkey", - "data": "0x00051a140605000aca050003000eca0300020010ca0200010003ca0601016a050102ca020001000801036a0601020001000801010f016a010f060102000100030106db01ca06db01010200010003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb0100020003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" - }, - { - "filename": "33-okayama-peach", - "data": "0x00041e15030d00015f0d000a00075f0a0007000d5f070006000f5f06000500025f01570e5f05000500015f0157065f01e5085f05000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400095f01e5095f04000400095f01e5095f04000400095f01e5095f040002000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f0322010002000322055f0382095f02220300040002220f5f02220400060002220b5f02220600" - }, - { - "filename": "33-okayama-pheasant", - "data": "0x0003191506019212000292110005920a540400010002920d54030002000f540200020002540601016a05010154020002000701036a0501020002000701010f016a010f05010200020002010cb901010200020001540eb90200020001540eb90200020001540eb90200020001540eb90200020001540eb902000200025407b9036d03b9020003000754096d03000854086d03000e540100016d03000e1d0200" - }, - { - "filename": "34-head-34-hiroshima", - "data": "0x00041c19020f000254010001540100035403000f00095402000e000a5402000d000b5402000c000c5402000d000b54020004000154010001540100015401000f540100020017540100030015540200020017540100020017540100010019541a54010019540100155401000354010005540100025401000954010002540200015401000200035404000a540200015401000154020002000254010001540300055405000354040003000154060002540300025409000a000154010002540c00090001541000080002541000" - }, - { - "filename": "34-hiroshima-manju-choco", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad02880385028802ad0400010005ad01880585028804ad0100010001ad05880585058801ad0100010001ad01880d85018801ad0100010001ad02880b85028801ad0100020001ad01880b85018801ad0200020001ad02880985028801ad0200020001ad01880b85018801ad0200010002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad0100020002ad02880785028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" - }, - { - "filename": "34-hiroshima-manju-custard", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288016d028802ad0500040002ad0288036d028802ad0400010005ad0188056d028804ad0100010001ad0588056d058801ad0100010001ad01880d6d018801ad0100010001ad02880b6d028801ad0100020001ad01880b6d018801ad0200020001ad0288096d028801ad0200020001ad01880b6d018801ad0200010002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad0100020002ad0288076d028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" - }, - { - "filename": "34-hiroshima-manju-koshi", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880180028802ad0500040002ad02880380028802ad0400010005ad01880580028804ad0100010001ad05880580058801ad0100010001ad01880d80018801ad0100010001ad02880b80028801ad0100020001ad01880b80018801ad0200020001ad02880980028801ad0200020001ad01880b80018801ad0200010002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad0100020002ad02880780028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" - }, - { - "filename": "34-hiroshima-manju-maccha", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288010f028802ad0500040002ad0288030f028802ad0400010005ad0188050f028804ad0100010001ad0588050f058801ad0100010001ad01880d0f018801ad0100010001ad02880b0f028801ad0100020001ad01880b0f018801ad0200020001ad0288090f028801ad0200020001ad01880b0f018801ad0200010002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad0100020002ad0288070f028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" - }, - { - "filename": "34-hiroshima-manju-tsubu", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad028802850180028802ad0400010005ad01880145028501450185028804ad0100010001ad0588024501800285058801ad0100010001ad018802800245018502800385018001450185018801ad0100010001ad02880180018501450480018501800285028801ad0100020001ad018802850380018501450480018801ad0200020001ad0288018501450280024502800145028801ad0200020001ad018801850345028502800345018801ad0200010002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad0100020002ad02880180014502800385028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" - }, - { - "filename": "34-hiroshima-okonomiyaki", - "data": "0x00051b14050500015d0300045f0100019307000600025d01d9015f026a0122015d08000600012201d90101026a0122010101220800030001930101010001d90101015f016a015d0101015d01010122015f010105000500010101d90101015f016a0122015d010101220101025f010104000500012201d90101015f016a015d022201010122015d015f01d9010103000400015f015d01d90101015f016a0422015d0122015f02d9010102000300015f015d012201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101016a0722015f02d9010102000200016a015f0c22015f02d9010102000200026a015f0f22020002000560012501600125016001250160012501600125046002001623" - }, - { - "filename": "34-hiroshima-shrine01", - "data": "0x00051c15050277130002770100157701000200131a020002001341020004000441020003230200044104000500021a03000123019301230300021a0500040004410200032302000441040002001341020002001341020005000241090002410500040003b3090003b30400050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b305000400018d01b30141038d0306038d014101b305000400078d0106068d0500" - }, - { - "filename": "35-head-35-yamaguchi", - "data": "0x00051e17030d0001540d000c0002540d000b0003540d00090004540e000a0004540600015406000100035401000254020007540300025406000300015401000154010008540500015406000f540200015401000254060001001554050017540400010017540300010017540300175404000e54020008540300010002540100045401000154010001540300015401000654040001000154030002540b00045401000254010001540154130002540100015401000154010015000154050014000154020001540300" - }, - { - "filename": "35-yamaguchi-anglerfish", - "data": "0x00091f15020c0005830c000900048301660683090008000a830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" - }, - { - "filename": "35-yamaguchi-fuku", - "data": "0x00051b14030400026212000400036211000400046203610495016105950300050001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed02610301016103950161015903610159016105950201010002610401059501590161015904950501010001610300130101000200026212010200020003621101020002000262010011010200060008010259050103000600080101590601030007000d010400" - }, - { - "filename": "35-yamaguchi-kawarasoba", - "data": "0x00051e1504030001061600010002060700019e0300019e08000106020001060900019e0300019e0900010601000106080001da010101da010001da010101da05000306020001000306040001d0012301d0012301d0012301d0012301d00900040001060200011501230115012301150123011501230115012301150200010605000400010601000d1503000206020001000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb05000106010604000fe80300020601000100010603000fe802000106030002000106010011e8010001060300040002e80d2302e80200010602000300010c02230d0c0223010c04000200040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" - }, - { - "filename": "35-yamaguchi-shoin", - "data": "0x00031715070100030c0c000200050c09000400060c060002000d23010001000f2301000223048805230388012302230e8802230e8802230388032304880323018801230f880588032304880323018806880123028801ca0288012303880a8801ca05880a8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c880100050009880200" - }, - { - "filename": "35-yamagudhi-footballfish", - "data": "0x00031f15020900023402eb100008000134040001eb01da0e0007000134050001da015d01da0d0007000134040001da015d0101015d01da0c0008000134040001da015d01da0d000900023401eb020001da0e000c0002eb03830c0009000483016601eb0583090008000683013403830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" - }, - { - "filename": "36-head-36-tokushima", - "data": "0x00031b15031500015402001200035403001100055402000b0005540100055402000400035402000c54030003001254030002001254040001001554020001001654010001001654010016540200020016540500025402000d54020009000b54040009000a5405000c00065406000c00045408000b00055408000c0003540900" - }, - { - "filename": "36-tokushima-awa-odori01", - "data": "0x000118140d010002f80800010004f8030001f90200010006f8010001f90200010007f801060200020005f80106020001f90200012303f90106030001f9030003f9030001010100010003010267030102000401026701010400030103670500039e0367050002e2019e0367050004e2014f060002e2044f05000200044f050001000144044f050001000344014f06000300010107000200010108000200012301440700" - }, - { - "filename": "36-tokushima-naruto-wakame", - "data": "0x00021a15070b000194035c04940b000348035c02480b00035c0100025c02000b00035c0200015c020004000748035c01480400020002480723035c012302480200010001480923025c0423014801000148042306de015c02de042301480148022302e90bde022301480148012304e905de015c05de01230148014807de045c06de0148014805de055c07de0148014806de035c03de02e903de014801480bde04e902de0148014811de014802480fde0248034801de055c07de034801001148010002000f48020004000b480400" - }, - { - "filename": "36-tokusima-whirlpools", - "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" - }, - { - "filename": "37-head-37-kagawa", - "data": "0x00041c15041200045402001000055403000d0001540200055403001200015401000154030018000400015404000254010001540100025408000800085401000154060007000c54050005000e5405000154010001540100115403000100165401000200165402000f540500025402000d54090002000554030002540c00020003541300010003541400020001541500" - }, - { - "filename": "37-kagawa-bonsai", - "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" - }, - { - "filename": "38-ehime-iyokan", - "data": "0x00051a140604000c4204000200084201e1074202000100024201250f42010002420125114201420125124201420125124214421442144214421442144214420100054203b30a42010002001042020003000e420300" - }, - { - "filename": "38-ehime-jakoten", - "data": "0x0006191406020010d20100010001d203d102d2018e0bd201d204d10ed201d204d101d2018e0ad2018e01d201d204d106d2018e07d201d204d10ed201d204d10ed201d204d10ed201d204d10ed201d204d10dd2018e01d204d10ed201d204d105d2018e01d2018e06d201d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" - }, - { - "filename": "38-ehime-mandarin-orange" - }, - { - "filename": "38-ehime-onsen01", - "data": "0x00031b15050700015504000155040001550400060002550300025503000255040005000255030002550300025505000400025503000255030002550600040002550300025503000255060004000255030002550300025506000400025503000255030002550600050002550300025503000255050006000255030002550300025504000200025502000255030002550300025501000155020001000255030002550300025503000255010002550100025503000255030002550300025503000255025502000255030002550300025504000255025502000155040001550400015505000255025512000255035510000355010003550e000355010002001255020004000e550400" - }, - { - "filename": "38-ehime-onsen02", - "data": "0x00031b150507000101040001010400010104000600020103000201030002010400050002010300020103000201050004000201030002010300020106000400020103000201030002010600040002010300020103000201060004000201030002010300020106000500020103000201030002010500060002010300020103000201040002000374013f0201033f0201033f02010274020001000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f02740274023f0201033f0201033f0201043f02740274023f0101043f0101043f0101053f02740274123f02740374103f0374010003740e3f0374010002001274020004000e740400" - }, - { - "filename": "38-ehime-onsen03", - "data": "0x00031c14050b00010c0b000900050c09000800016101740161017401610174016108000700017407de01740700020001610300016101de01ae05de01ae01de0161030001610200030001740161017401de04ae01de04ae01de0174016101740300030003de03ae053f03ae03de0300060003ae013f02e70126013f03ae0600060003ae053f03ae060006000bae060006000b3f0600013f03000f3f0300013f0100153f010002001321020004000f01040002000157010004ae015702ae015702ae015704ae0100015702000200010c010001ae0306015701ae033601ae0157030601ae0100010c02000200010c010001ae030602ae033602ae037401ae0100010c0200" - }, - { - "filename": "38-ehime-tai-somen", - "data": "0x00031c18010d000189020001890a000b0001890100015f01890100015f0189090008000357015f01890157015f01890157015f018902570600070003570b20015705000600025701890e200400050002570189102003000500015701890320018d0220018d0220018d0220018d0520020001200300025714200100010001200200015715200100010001890120010001571220028d01200100020001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a20010603200306012003000257018907060401080601000400035712060200040004570f06040004000157010002570400068904000157040004000157010001570f000157040004000157110001570400040001571600" - }, - { - "filename": "38-ehime-taimeshi", - "data": "0x00041a16060600082306000300030f0848022304000200050f01e90182020101e9015f01010248012303000100060f02e9018202e90182010101e901010148012302000100030f0282015f02e9015f02e9015f02e9015f01010148012301000100020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f02010148012301230148030f03e9044202e9028202e901480123012301480201025f0182044201010142015f04e90148012301230148015f028202e9044201e4014204e9015f0148012301230148018203e9015f064202e9015f01820101014801230123014803e9015f018201e9044201e9015f02820201014801230123014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e901010148012301000100012301480101018201e90101015f03e90182015f018202e9010101480123010002000123014803010182015f03e901010282010101480123020003000123024802010182015f02e9020102480123030004000223084802230400060008230600" - }, - { - "filename": "38-head-38-ehime", - "data": "0x00021b1a020f00015409000f00015409001000015408000e0001540a000d00035409000900015402000454080001540c00055402000354010002540b000e540a000f540a00095406000a000754080009000854080007000954090006000a54090005000b5409000300025401000a54090001000254030006540d000154040008540c00070007540b00080004540d00060005540e0007000254010001540e00060004540f0005000154010003540f0007000154010001540f00" - }, - { - "filename": "39-head-39-kochi", - "data": "0x00041a15030d0002540400015403000900085401000254030008000c54030007000e54020007000e54020006000854020007540300095406000454010004000754080003540100050005540a0002540100040006540b000154010001000154010006540e00020006540f00020006540f0002000454110003000454100002000454110001000154010001540100015411000154050001541000" - }, - { - "filename": "39-kochi-bonito", - "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" - }, - { - "filename": "40-fukuoka-mojiko", - "data": "0x00031e14030d0001960d0009000196030001960300019609000600019602000196072701960100019607000600019602000927010001960700060002610b27026106000500046102270106016b010101270106022704610500050001a501e0010601a5032701a501aa01a5032701a501e0010601a50500040009aa015709aa0400050001c1025701c1025701e9035701e9025701c1025701c105000200032701c1015701e001c102e001e903e001e902e001c1015701e001c1032702000100042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c1042701000100042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e001060157015702060157010601c10157010601c1010301460197034601970146010301c10157010601c101060157020601570557017f0257017f0103019701460397014601970103017f0257017f0557" - }, - { - "filename": "40-fukuoka-tenmangu", - "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" - }, - { - "filename": "40-head-40-fukuoka", - "data": "0x00021b18051200015403000b00045402000154040009000954040007000a54050008000a54040008000a5404000500015401000c5403000300015402000d5403000200035402000f54010014540100020014541154050004000c5406000600015402000754060009000654070008000854060007000954060006000954070005000b5406000500075401000354060006000454040002540600070002540d00070002540d00" - }, - { - "filename": "41-head-41-saga", - "data": "0x00031c19040300015414000200045412000200045412000300045406000354080001000154020003540100095407000200115403000254040010540100035403001554030015540100015401001354020002540100135402001454040001001254050001001254050002000d5401000254060004000a5403000154060006000554010001540b00050007540c00060006540c00070006540b00080006540a00090005540a000c0002540a00" - }, - { - "filename": "41-saga-mudskipper-fiddlercrab", - "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" - }, - { - "filename": "42-head-42-nagasaki", - "data": "0x00011a1908080001540900070002540900070002540900070001540a00070001540a00060001540b00060001540b00120012000b00015406000b0001540600120012000900015408001200080004540600050001540200015401000254060008000154020002540500050001540400015401000254040004000354040001540100025403000400025404000254020002540200030001540100015405000754010002540a000154020002540100035408000254010002540100015401000154080001540600" - }, - { - "filename": "42-nagasaki-meganebashi", - "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e04080208017e0400017e0408017e0400017e020802080600017e0208017e060002080108017e060004080600017e0108017e080002080800017e019108000291080001910191080002910800019102910700039107000191010003910300029102000391030002910100030004910600049103000700019101000191010001910800" - }, - { - "filename": "42-nagasaki-saseboburger", - "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" - }, - { - "filename": "43-head-43-kumamoto", - "data": "0x00031816040e00035403000a0002540300035402000800065401000354020007000c54010007000c54010008000b54010009000b5409000a5401000a000854020007000a540300060001540300075403000154010001540600075404000100025402000354010006540500035401000354020006540500035403000154010009540300010002540100015402000a5403000254050009540400010001540100015402000b54030003000154020003540100065404000a0004540600" - }, - { - "filename": "43-kumamoto-karashirenkon", - "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" - }, - { - "filename": "43-kumamoto-kumamotocastle", - "data": "0x00021d15020800019d12000700019d0101019d11000600059d10000600050e1000040002c80206019d020602c80e00040002c8029d0101029d02c80e00030002c8029d0323029d02c80d0003000501019d05010800019d04000300010e0223010e019d0101019d010e0223010e0700019d0101019d0300020001c8036f019d0323019d036f01c8060003060300020001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c802000100019d0101019d0c01026f020101c80192019d019202c8010001000392010e0623010e0223020e029201230192019d0301019d01010100010003920c0e0492052301920100059d0100010101000101010001010100010101fa010101fa0a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" - }, - { - "filename": "44-head-44-oita", - "data": "0x00041915040b0003540700060002540200055406000600095406000200025401000a54060001000c5401000154060001000a540100015408000b540a0001000a54020001540100035403001154040010540100015403000100025402000c5404000100035402000e5401000200025402000c54030007000c540100015407000d54010007000c54020008000254010004540200035401000b000254040001540300" - }, - { - "filename": "44-oita-beppujigoku", - "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" - }, - { - "filename": "44-oita_usajingu", - "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" - }, - { - "filename": "45-head-45-miyazaki", - "data": "0x0004161708070001540100015402000254060008540500085401000500075402000400095401000400085402000500075402000400075403000500065403000400075403000a540400010009540400020008540400030007540400030008540300050005540400050005540400070002540500060003540500080001540500" - }, - { - "filename": "45-miyazaki-aoshima", - "data": "0x00061d14030500109205000600027f0192047f0192047f0192017f0600080001bf040001bf040001bf0700010001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf0700010004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf01920600030005e102bf080002bf0600030003e1011b019202bf010006af019202bf0600020002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d60100010001e1011b02e1019d01e1019209af019201af01990221039901000100011b03e1019d0caf01d6026001d6016001d60200" - }, - { - "filename": "45-miyazaki-chickennanban", - "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" - }, - { - "filename": "46-head-46-kagoshima", - "data": "0x0003181f03070001540100015402000254070007000754070006000a54050007000954050007000a5404000200015403000b54040007000b54030001000154060005540200045402000154080003540300065409000354010008540900025403000754080003540400055401000600065403000454020007000554040004540100070006540300045401000c0001540200045402000f00035403000e0002540500150015001500030001540f0001540100130001540100120002540100120002540100120001540200060002540300015405000254020009000154010002540400025402000a0004540700" - }, - { - "filename": "46-kagoshima-goromon", - "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" - }, - { - "filename": "46-kagoshima-shirokuma", - "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" - }, - { - "filename": "47-head-47-okinawa", - "data": "0x00011c15050f00015407000e000154070001541700170017001300015403001300025402001200035402000b0001540500045402000d00025402000354030001540c00075403000e00045405000d00035407000b00045408000a0002540b000a0003540a000b0003540900090003540b0003000154040003540c00090003540b00090002540c00" - }, - { - "filename": "47-okinawa-goya-chanpuru", - "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" - }, - { - "filename": "47-okinawa-siisa", - "data": "0x00041d14030200033706000437060003370200030004370200033702000337020004370300040008370200083704000300023703460137034602370246023702460337030003000237026602370266043701230337012303370300020001460237016601230237016601230337012301370123013701230137012302370146020001000246143702460100020001460337042307370423023701460200010003460837024606370123013702460200030002460637014602000146063702460300030002370746020007460237030001000146010003370246023701460137020001370146023702460337010001460100024601000937020009370100024601460b3702000b37014601000a370123020001230a3701000200013701460837022308370146013702000400023701660200023701660200016602370200016602370400" - } - ] - } - } \ No newline at end of file + "heads": [ + { + "filename": "01-head-01-hokkaido-heads", + "data": "0x00021f1a0109000154140008000354130006000154010004541200090004541100090005541000090006540e000154090007540c000254090009540600015403000154010009000c540200025402000154020009000f540200015403000800105406000700125404000154070012540100025402000300025403001254040004000254010011540600040010540a00030010540b00020010540c000100035401000354020007540d000100025403000154040005540e00010002540a0003540e00020003540a0001540e0002000454180001000354010001541800010002541b00" + }, + { + "filename": "01-hokkaido-goryokaku-heads", + "data": "0x00021b16040b0002540a000a00045409000900025401c001dd025408000800025401c001dd01c001dd025407000700035401dd02c001dd0254018706000500035402c001dd03c001dd0187035404000300035401c0015401c002dd03c0018702dd045402000100035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd025401000300025401c001dd02c00287029204c002dd01c00254010003000187015402c001dd03c0029203c001dd02c0025402000200015402870154018701dd08c001dd01c0025403000100015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c0025404000100025401c0025401c001dd02c004dd02c001dd01c0015404000300035401c001dd01c001dd04c001dd01c001dd01c0025403000400025401c002dd01c0045401c002dd01c0025403000400025401dd02c0065402c001dd025403000500055404000554040005000354080003540400" + }, + { + "filename": "01-hokkaido-ishikari-heads", + "data": "0x00031c15040400067f0200017f0b000200037f0400017f0300027f0100017f07000100017f0200037f0200010d037f02e1010003a201e004000200027f0100017f020d06e103a203e004000400020d015702e101a2019501a201e103a2010d02e0019504000300020d015702a2019501ce029704a204e0010d03000200020d019501a201ce029703ce03a205e0020d02000100020d015704ce01cd02ce01cd02a206e00157020d01000100010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d010e010e010d01220957015d0657034e010d010e010e010d03010e570149024e010d010e0100010d0301015701f30c570249014e010d01000100010d01220101015701490d570149014e020d01000200020d034901570434025705010157020d02000300020d01490157023401af033405010157020d03000400030d033402af01340501020d04000600020d05340257030d060009000334030d0900" + }, + { + "filename": "01-hokkaido-tokeidai-heads", + "data": "0x00011b14060a00010b0a00090002a101370900070002a1013701e9013701a10137070007000237030102370700080001e901010196010101e908000800015d01960201015d0800080002e9013702e90800080001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033702a102a1013702a10237010b01e903ca01e9010b01a1023702a10237023702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e901000100015d016f035d016f035d010b035d016f035d016f015d01000100080b013701a10137080b01000100035d010b035d02a10337035d010b035d0100010001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e901000100015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d0100010003e9010b04e9030b04e9010b03e90100" + }, + { + "filename": "02-aomori-apple-heads", + "data": "0x00051915080800011b080004000455011b045504000200045502a6011b02a60455020001000655011e011b011e025501010355010001000a5501010455010011551155115511551155115511550100025501a60c55010001000f5501000200065502a60555020003000b550300050007550500" + }, + { + "filename": "02-aomori-dogu-heads", + "data": "0x00021814080400080a04000400020a0236010a0236010a040004000136030a01ca020a013604000600020a0136010a06000500010a04ca010a05000500030a01ca020a0500010001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a01000500010a01ca030a01ca0500050001ca020a018a010a01ca05000500010a01ca010a01ca020a0500050006ca05000500060a0500050001ca040a01ca05000600010a02ca010a0600" + }, + { + "filename": "02-aomori-goldfish-nebuta-heads", + "data": "0x000119170409000333090008000533080007000233010101330101023307000700033301010333070005000b3305000400053301010133010105330400030002330101043301010433010102330300030003330101033303bf01330101033303000300053307bf033303000100053303bf010103bf010103bf0333010005330dbf03330233010101330fbf0233033301010fbf023301000233022301010bbf0101022301000200013302230dbf02230100040001230dbf01230200040001bf012304bf032304bf012301bf020005000123030101bf010d01b4010d01bf03010123030006000301010d0301010d030104000200010101000201010001330301012303010133010002010100010103000101010001010100013302000123010101230200013301000101010001010100030002010d0002010100050001010b0001010300" + }, + { + "filename": "02-head-02-aomori-heads", + "data": "0x00021b17040d00015409000c0003540400015403000c0005540100025403000c00085403000b00055401000254040005000154010001540300045402000254040004000554020001540500025404000500045407000354040006000454020001540300035404000500055402000254020003540400050005540200035401000354040005000f54030004001054030002001254030001001354030015540200010015540100010005540100055401000a5401000154060003540300085401000e0004540100015403000e00025407000e0001540800" + }, + { + "filename": "03-head-03-iwate-heads", + "data": "0x00021717090900015404000600055403000200015401000754030002000a54020001000a54030001000b54020002000b5401000d54010001000c5401000d54010001000d5401000d540d5401000e540c54020001000c5401000c54020001000c54010001000a540300020006540600040004540600050001540800" + }, + { + "filename": "03-iwate-moriokamen-heads", + "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" + }, + { + "filename": "03-iwate-nanbutekki-heads", + "data": "0x00031b14060700050e09000400030e0500030e06000300010e0b00010e05000200010e0d00010e04000200010e0d00010e04000200010e0600010e0600010e04000300010e0100090e0100010e050003000d0e050002000f0e04000100110e03000100110e0100020e150e140e0100140e01000100130e01000100050e0163010e0163010e0163010e0163060e020002000f0e040003000d0e0500" + }, + { + "filename": "04-head-04-miyagi-heads", + "data": "0x00031c1808060001540a00025401000500045408000254010003000954040002540100015404000754030001540100025402000500085401000454020004000d54030003000f54020004000d54030003000f54020004000d54030004000d54010001540100030008540100015403000254020003000954050001540200020009540900020008540a00020008540a00010008540b0009540b0009540b00020007540b00050003540c00060002540c00" + }, + { + "filename": "04-miyagi-datemasamune-heads", + "data": "0x00011d150517000128150002280100120002010128030008000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e080003000528030103280192010e019207000100020e01000192010e0192020103280192010e0192010e0192010e0100020e03000100010e0100010e0192010e0b92020e0100010e03000200020e0292030e0192010e0192010e0192030e0192020e04000200030e0192020e0192020e0192020e0192020e0192020e04000300010e01920188010e0192030e0192030e0192020e019205000300010e01920c880192010e05000300010e01540c880154010e05000300012801540c8801540128050002000128010e01540788016004880154010e012804000200020e01540788016004880154020e040001000128020e01540788016004880154020e012803000100030e01540588026004880154040e03000200030e01540388042303880154030e04000400020e025406880254020e0600080006540a00" + }, + { + "filename": "04-miyagi-hoya-heads", + "data": "0x0004191407050001710194017102000371050005000394020003940500050001710194017102000371050004000a71040002000e71020002000e710200010010710100010010710100127112711271127112711271010006e405ae05e40100010010e4010002000ee40200" + }, + { + "filename": "04-miyagi-tanabata-heads", + "data": "0x00041c160406000de1010001bf0300050001e1010001010400010104000101010002e1010001560100040001e1020001010400010104000101020001c701e10200030001e102000356020003bf020003c7030001bf0100020001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c7020001560100010001e10300055605bf05c70400010001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" + }, + { + "filename": "05-akita-akitainu-heads", + "data": "0x00031a14021100012b06001000022b010105001000032b020103000f00042b01010123020101800e00042b06010c00062b0301025f01000b00072b0501015f0a00092b0201030009000b2b010103000200040103000b2b0101030001000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b050001000201032b0101052b020102000101022b05000200040101000101042b010103000201012b05000800032b0301030003010400" + }, + { + "filename": "05-akita-magewappa-heads", + "data": "0x00041a15040200108e0400010012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de0200010001de0788016001880184068801de0300020007de01d801de018406de04001600030012c90100020014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de018803000888016001880184078801000400018e01de018e02de018e04de018e02de018e01de018e0200" + }, + { + "filename": "05-akita-namahage-heads", + "data": "0x00021a16040700014109000141040007000241070002410400080002410500024105000600062301000523040005000123060e0123050e0123030004000123010e0623010e0523010e0123020003000123010e0123010e0123040e0123040e0223010e0123010003000123010e0123010e022307410323010e0123010003000123010e0123010e014103230318032301410123010e0123010003000123010e0123010e034102230141022303410123010e0123010002000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e0123010001000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e0123010001000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e0123010001000123010e0123010e012301410101012301cf041801cf0123010101410123010e0123010001000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" + }, + { + "filename": "05-head-05-akita-heads", + "data": "0x00031617090300055403000254040009540400095403000a5403000954010002000a540100015401000a5401000d5403000854020004000854010004000754020004000754020004000754020004000654030003000754030003000754030002000954020002000a540100040007540200050007540100070003540300" + }, + { + "filename": "06-head-06-yamagata-heads", + "data": "0x000318180a05000254070005000454050004000754030004000854020004000954010003000b5402000c5401000d5401000c5401000e5402000c5402000c5404000954010004000854020004000854020002000a540200020009540300020008540400020007540500020007540500030006540500060003540500" + }, + { + "filename": "06-yamagata-hanagasa-heads", + "data": "0x00021b170508000641080006000241065702410600040002410a5702410400030001410a5701320141025701410300020001410157013201410132025701c603570132024101320257014102000200014101570441025701dd025703410132014101570141020001000141015701320341025701dd045701410132014103570141010001000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd085701410141035701c6035702dd0341085701410141075701dd024101320241035701410132025701410141035701410357024101320141013201410257044101570141014102570132024102570332024101320141015702410132014101570141014102570141013201410132025702410232014102570132024101320157014101000141015701320241013203570341015701280257023201570141010001000141025701410132075701280123012804570141010002000141035701c6075701280123012802570141020002000141065701320341013201570128012301280157014102000300014105570141013201410132035701280157014103000400024104570141013204570241040006000241065702410600080006410800" + }, + { + "filename": "06-yamagata-imoni-heads", + "data": "0x00041b14050800060d08000600020d0600020d06000400020d0a00020d04000300010d0e00010d03000200010d0400080e0400010d02000200010d0200020e028501880103028501970185020e0200010d02000100010d0100020e0185021b01970303029702030185020e0100010d01000100010d010e0185030302970203019702e102030385010e010d01000100010d02850288021b0188020b021b0285020b021b0185010d0100010e010d01970203020b030301850397020302e101880185010d010e020e01970203019701030188020303e10103028802970203020e010e038502e10103018802e1028801850203039701030285010e0100020e01e102970285020301880497020b0285020e01000100040e029702e1020301850297021b0185040e01000200050e0285016201bc016201bc01620185050e02000300100e030005000c0e0500" + }, + { + "filename": "06-yamagata-zaookama-heads", + "data": "0x00041d14040a00072702010227040007000b2703010127030005000e27024c0101012702000400022701010c2704010127010003000127020103270a010127024c0101012701000200020102270301073004010127030101270100010102270201019b0b3002010127024c01010127022703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f3003010127020001000201014c01010e3003010127020002000101014c03010a300201014c01010127030003000201014c0b01014c0101014c0101040005000401014c0101014c0101014c0301014c01010600" + }, + { + "filename": "07-fukushima-peach-heads", + "data": "0x00041d16040500020f12000300030f0197010f0100030f0d000100060f0297030f0100020f0a000100030f05b90297030f0197010f09000100020f04b9011902b9020f0297030f0100020f05000100020f04b9011903b9040f0197010f0100030f04000100010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297020f040f05b9040f05b9011902b9040f0d0f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f01000600020f0100050f03b9021903b903000a00030f04b9011903b904000a00010f020003b9011904b90400100003b90600" + }, + { + "filename": "07-fukushima-takizakura-heads", + "data": "0x00021e14021200035f07001000045f01db025f05000c00035f01db035f01b8045f04000a00045f01db045f01b8025f01db015f0100025f01000600025f0200035f01b801db025f0100015f01b8025f01db0100015f02b8015f0500025f01b8015f0200015f010001b8035f0100025f01b8010001db01b8015f01db025f0200055f01b8025f0200015f010001b80400015f04b8015f01db015f01db0100015f01db01b8025f01b8015f01db095f020003b8025f0100015f01db0100015f01db025f02b8025f01b8025f0100035f01b8015f04b80100015f04000300035f01b8025f01b8025f0200035f05b806000100025f0200015f01b80100055f0100015f0100015f03b80100015f01b8045f0100015f01b8035f020001b8015f01db015f01b8015f040003b80100025f01db02b8025f025f02b8015f0100025f010001db020003b8010003b80200025f01db045f01db035f01b8025f01b8015f040006b80300015f01db0100015f01db015f01db0100015f02b8015f010001b8015f050005b8025f0100015f0200015f01db01000200035f02b8045f020005b8065f04000200015f0100035f01db01b8025f06b80100025f01db035f01db03000400025f010001db0200015f010005b80100015f010001db015f0100015f01db03000500015f050005b8040001db0200015f0400" + }, + { + "filename": "07-fukushima-tsurugacastle-heads", + "data": "0x00011a140309000162050001620700080001620700016206000900078907000900078907000800098906000900020103080201070007000b89050006000d89040007000201017f0108010101890101017f0108020105000600068901010689040005000689010101a301010689030006000101017f010107890101017f01010400050005890201017f0201058903000300019406890501068901940100020002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" + }, + { + "filename": "07-head-07-fukushima-heads", + "data": "0x00051b17030e00035407000e0006540200015401000800035403000654020002540700055402000a5406001254050013540500135403001554185401001754010017541854020016540200075402000d540100065406000a540100010003540a00095401000e00095401000f000354010002540300100001540700" + }, + { + "filename": "08-head-08-ibaraki-heads", + "data": "0x0003191807090001540300015404000900025401000554010009000754020009000754020008000854020008000754030008000754030008000654040008000654040007000754040004000a54040002000b54050002000b5405000e5404000e54040002000c54040003000c54030003000c54030004000c5402000700045403000254020010000154010011000154" + }, + { + "filename": "08-ibaraki-anglerfish-heads", + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + }, + { + "filename": "08-ibaraki-hananuki-ravine-heads", + "data": "0x00041c1502040001c006000136019701c601d80197013602bf0700020001c0060001bf01000136019701d801bf01970136060001bf0200060001bf010001bf0100029704d802970800040002c604000136019701d8019702d801970136020002bf0400070001c601000197013601d80188019701bf018801d8013601bf030001c0030009000136019702d8029702d801970136010001c0020002c00100010002c0020001c0010001bf01000136019701bf018802970288019701360700030001c0010002bf01000197013603d8029703d8013601970600080002970388029703880297020001c6010001bf010007000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf0300010002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d802970400010002bf02000136029705d8029705d802970136030005000136019701d802bf02d802bf019701d802bf03d801c60136010001bf01000400019701360197038802bf0188019702bf048801c60197013602bf0100040001970136019706d8029706d8019704bf170002bf0100" + }, + { + "filename": "08-ibaraki-rocket-heads", + "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a26010101000500057f0b2601000400057f0b2602000300057f0b26030002000155047f0b260400024201000155027f020109260500040001550100030107260600030001420100020d0301032601290126017f060002000142010001730100020d03010326017f0700050001420100010d0100027f0201017f08000600017301000155027f0101017f0900030001730200024201000155027f0a000a0001550b00" + }, + { + "filename": "09-head-09-tochigi-heads", + "data": "0x000418160709000454040007000854020005000b54010003000d54010002000e54010001000f54010002000e54010001000f54010001001054105401001054010003000d54010002000e54010002000e54010002000d54020001000e54020002000954010001540400030006540800060003540800" + }, + { + "filename": "09-tochigi-sanzaru-heads", + "data": "0x00041e1401050003340500043404000434040003000634030006340200063403000300023401af013401af02340100023401af013401af063401af013401af013403000200013401b805af033405af043405af013402000200013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af01340200020002b805af01b8023404af01b801af01340135013405b803000300023401af020e01af01b8023401af04b80135033402b8010e02b8013402000200033403af0434013504b801340135033402af04340100010001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af013403000100063402af0100023405af0135033403af01340400010003340235013401af0234020005af0135043401af013405000200013401350734010005af053401350234040002000b3403af013506340135023403000100063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" + }, + { + "filename": "09-tochigi-strawberry-heads", + "data": "0x000416150602000122020001c0010001c008000300012204c003710500020001c0022204c004710300010005c00571010102710200020002c006710101017101010171020002c0017101c0077101010371010001000e71010001000f7101000f7101000f7101000f7102000e7102000d71010003000c710100040004710146027101460371010005000471024603710200070007710200090004710300" + }, + { + "filename": "09-tochigi-toshogu-heads", + "data": "0x00031f1402060001c70f0001c70600070003c7022901c7012908c70700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30700060002c702e3012701e3012701e3012701e3012701e3012702e302c706000500012902e301c7012901c701e302c7015402c701e303c702e301c705000600016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0600050001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290500090001c7027f01c7037f01c7027f01c70900070002c70154014101c70154014101c70141015401c70141015402c70700010001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014102c701c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" + }, + { + "filename": "10-gunma-kusatsu-heads", + "data": "0x00041d15030600020d0200020d0200020d0200020d06000400013201da028802da028802da028802da028801da013204000400013201da023202da023202da023202da023201da01320400050001da025702da025702da025702da025701da0500060002570200025702000257020002570600060002570200025702000257020002570600030003e6025702e6025702e6025702e6025703e6030003000193013e018d0257023e0257023e0257023e02570101013e0193030003000193013e0101033e018d023e018d033e018d033e018d013e0193030003000193013e028d053e018d043e028d023e018d0193030003000193023e018d013e018d013e018d023e018d013e028d013e018d033e0193030003000193018d053e018d023e018d053e018d013e018d0193030003000193013e018d033e018d063e018d013e018d023e010101930300030001930101033e018d033e018d023e018d023e018d013e018d013e0193030003000193033e018d033e047f018d013e018d043e019303000100027f0193033e018d033e017f023e018d033e027f023e027f0100017f017f0200017f03e6017f0ce6027f01e603000100027f0100027f1400" + }, + { + "filename": "10-gunma-negi-heads", + "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030001dd03dd0100034c03dd0100034c010003dd04dd034c04dd034c03dd0100010003dd034c04dd024c04dd0100010003dd034c04dd024c03dd0200010004dd024c03dd024c04dd0200020003dd024c03dd024c03dd0300030002dd024c03dd024c02dd0400050001dd014c02dd024c01dd06000500074e06000600054e0700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c103ca01c10700060001c1010101c1010101c107000700010101c101010800" + }, + { + "filename": "10-gunma-takasakidaruma-heads", + "data": "0x00061a1607050009410500030002410101014102010741030002000f41020001000141016001410123020102230101022302010123014101e601410100010001e6022301010423010104230101022301e60100014101e60123020103a70101010e010103a7020101230141016001e60160020101a7030101a7010101a7030101a7020101e6016001e60160020101a7030101a7010101a7030101a7020101e6014101e60141020101a7030101a7010101a7030101a7020101e60160014101600223010103a7030103a701010223014101e602410123030101a1010101a1010101a1010101a1030101230241010001410123010e040102410501010e012301410100010002410223010e0123014102010141010e0123010e02230241010002000341010e0123010e0301010e0123010e034102000300014101600141016001410260024101600141016001410300040001e6014101e6024101e6024101e6014101e60400060001e6014101e6014101e6014101e60600" + }, + { + "filename": "10-head-10-gunma-heads", + "data": "0x00021c17060c00015409000a00035409000a000454080009000854050009000754060007000a54050005000b54060002000e54060001000f5406000100105405001254040011540500115405000100025401000d54050004000c54060004000e5404000300095401000754020004000754070003540100030008540a000154040005540d00040003540f00040002541000" + }, + { + "filename": "11-head-11-saitama-heads", + "data": "0x00071c1403080002540f00080005540c000700095401000254060007000e54040005001154030003001354030001001654020017540200185401001854010001000554010012540300025405000f540d000c540e000254020002540500" + }, + { + "filename": "11-saitama-tokinokane-heads", + "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" + }, + { + "filename": "11-saitama-whitetiger-heads", + "data": "0x00031a1406020002010b00020103000100040109000401020001000101015f020109000201015f010102000201025f020107000201025f01010200090103e3060102000100030101e3050101e3050101e3010102000200010101e3040101e3030101e3040101e302000200040101e3020101e3010101e3020101e303010200020010010200020001e30e0101e30200020010010200020010010200020001e30e0101e30200020010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" + }, + { + "filename": "12-chiba-loquat-heads", + "data": "0x0003181508070002c9070006000426060004000826040003000a26030002000c26020001000e26010001000e260100102610261026102610261026102601000f26010006260186012601860526010002000626018605260200040008260400050006260500" + }, + { + "filename": "12-chiba-nanohana-heads", + "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a02000300012a0100012a0100022a0100022a0100012a0100022a0100022a06000200012a0100122a0100012a02000200172a01000100062a0122112a01000100152a0122022a01000100032a0122152a1a2a042a01c0102a01c0042a032a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a02000100012a020001c0102a01c0012a0100012a0100" + }, + { + "filename": "12-chiba-soysauce-heads", + "data": "0x000317140b010008b40300020006b4020001850100020006b404000200066f030001850200016f0101046f04000200016f0101046f04000100016f01b8010104b8016f03000100016f010105b8016f0300026f06b8026f0200026f06b8026f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f02b803ea03b8016f0200016f08b8016f02000a6f0200" + }, + { + "filename": "12-head-12-chiba-heads", + "data": "0x000219170801541000010001540f00010002540e000200035404000354050002000c54030001000e5402000100105402000b540400020001540100085405000500065406000400065407000300075407000200085407000100095407000a540700020008540700010009540700010008540800010004540c00020002540d0004540d00010002540e00" + }, + { + "filename": "13-head-13-tokyo-heads", + "data": "0x00091c140301000254160007541200010009540f0001000a540300025402000654010002001654010003001654040015540600135407000f54010001540100080006540300055403000c0003540400045402000d000154070002540200" + }, + { + "filename": "13-tokyo-station-heads", + "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" + }, + { + "filename": "13-tokyo-tower-heads", + "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" + }, + { + "filename": "14-head-14-kanagawa-heads", + "data": "0x00041d160306000254120007000254110007000354060004540600070007540300055404000600095402000754020006000a54010009540400155401000200145404000100165403001654040002001454040002001454040003000c5401000654040003000754090004540300020006540c0005540100020005540d0004540200020005540e0004540100030005540c000254040004000254010001540d0002540300" + }, + { + "filename": "14-ibaraki-anglerfish-heads", + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + }, + { + "filename": "14-kanagawa-curry-heads", + "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d4043502010100030102000400020105d40535020106000300030105d40635020105000300020106d40635020105000300020106d40635020105000300030105d40635020105000400020104d40635020106000400030103d40635020106000500030101d401860142016003350201070006000401033503010800070008010900090004010b00" + }, + { + "filename": "14-kanagawa-king-heads", + "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" + }, + { + "filename": "15-head-15-niigata-heads", + "data": "0x00021b170413000254020013000254020009000154090004540800015409000554070002540900035402000700035407000454020008000254050006540200070002540400095401000c00095402000c00095402000c00085403000b00095403000a000854050009000754070008000954060007000954070004000d54060002000f540600085402000554010001540600010002540100035403000454090001000154090002540a000b0001540b00" + }, + { + "filename": "15-niigata-sasadango-heads", + "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" + }, + { + "filename": "15-niigata-tulip-heads", + "data": "0x00041a1506090002b90900080004b90800010002b9040006b9040002b9010004b9030006b9030004b905b9010008b9010005b914b914b914b914b914b914b914b9010012b90100010012b90100020010b90200020009b9016a06b90200040006b9016a05b90400060008b90600" + }, + { + "filename": "16-head-16-toyama-heads", + "data": "0x00051b17050300045409000454020002000454090006540100020003540a00065401000100055408000854010007540600085401001554165401001554165401001554010014540100010014540100010013540200145402000b54010001540100065402000854080003540300010006540f0001000154030002540f00050001541000" + }, + { + "filename": "16-toyama-blackramen-heads", + "data": "0x00041b150508000633080006000a33060004000e3304000300053306850533030002000433038502d3058504330200010003330385018803d303e4048503330100010002330285018803d302010222010103e402850233010003330285018802d3070103e40185033302330285018803d3082202e40285023302330285018802d3092203e4018502330233028503d3080104e4018502330333018504d3062204e40185033301000233028504d3040104e4028502330100010003330185018805d3078503330100020003330185018803d3028503e402850333020003000333048503e40385033303000400043306850433040006000a330600" + }, + { + "filename": "16-toyama-kutabe-heads", + "data": "0x00031a17010d00060e06000b000a0e04000400010e04000e0e02000300010e04000f0e02000300020e0300100e01000300030e0200050e0501060e01000400070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e0401030e0a0e0701010e0401030e0a0e0501020e0501030e0a0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e01000500010e1300" + }, + { + "filename": "16-toyama-raicho-heads", + "data": "0x00031d15021200047f05001100077f03001100047f020e017f010e02000600010f0a00077f020e0100050001dd010f01dd0800077f0400050001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f04000100010e017f0200010f01dd017e107f03000100017f020e157f02000200177f02000200177f02000300167f02000300157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e0300010002dd017e010f0300027f0400027f0500010f017e02dd02000300010f037e0100027f010e0300027f010e0300027e010f0400" + }, + { + "filename": "17-head-17-ishikawa-heads", + "data": "0x00031517080a0003540700055401000600065401000600045403000500035405000500035401000154030006000454030006000454030007000154050006000254050006000154060005000354050005000254060004000454050003000454060002000554060001000754050007540600010007540500020005540600050002540600" + }, + { + "filename": "17-ishikawa-curry-heads", + "data": "0x00071c1504060001010172020108720600040003720ab8037204000300027201b80225013403250234022502b8022201720300020002720325013401250134012502340125013402250422017202000100027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b80172017201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b80172027201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b802720100020003720fb8027202000300037204b8036406b8027203000500037208b80372050007000a720700" + }, + { + "filename": "17-ishikawa-jibuni-heads", + "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b8032302000300032301de0123038301b8012301de032303000400032301de052301880223040006000223018801de022301de01230600" + }, + { + "filename": "17-ishikawa-kinpaku-heads", + "data": "0x000518150705a6076d05ea03a60b6d03a60aa6066d01ea09a6086d07a60a6d10a6016d11a611a604ea0da611a6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" + }, + { + "filename": "18-fukui-dinosaur-heads", + "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b02000b0001e8011b01e8011b01e8011b01e80200071b011b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a03000100011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a04000200021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a04000300041b01e8011b01e8051b01e8061b05000400022a071b01e8081b05000600022a051b01e8081b05000800012a091b022a0100041b02000900032a021b01e8032a09000c00031b0c000d00021b0c000e00011b0c000e00021b0b00" + }, + { + "filename": "18-fukui-sabae-glasses-heads", + "data": "0x00091c1206030004710800047103000100027102060201027104000271020602010271010001000171020603010106017104000171020603010106017101000171020603010306047102060301030601710171010603010406017102000171010603010406017101710301050601710200017103010506017101710201060601710200017102010606017101000171060601710400017106060171010001000271040602710400027104060271010003000471080004710300" + }, + { + "filename": "18-fukui-tojinbo-heads", + "data": "0x00051c15050d00037407000800037402000374027205000500037203740272037402720274030005000372037402720374027202740300030002740372037402720374027202740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372039902720374020502740300030002990372039902720374020502740300030002990305039902720374020502990300030002990305039902720399020502990300030002990305039902720399020502990272010003000299030503990205039902050299027201000100027702990305030c02050399020502990272017703000299030503990205039902050299027701000177010013770200" + }, + { + "filename": "18-head-18-fukui-heads", + "data": "0x00041a18020c0001540b000b0003540a000c00035409000b0005540100025405000a000a5404000a000d54010009000d54020009000d5402000a000d5401000a000e540b000d540c00035401000254060009000154010004540900090001540100015401000254090006000154020003540c00070005540c000100015401000154010006540d00025401000554010001540e0008541000010007541000020004541200" + }, + { + "filename": "19-head-19-yamanashi-heads", + "data": "0x00051a1806040002540e00030003540e00010001540100065401000354070001000f5404001054040001001054030012540200145401001254010001001354020012540200115401000100105403000200055401000754050001000654030005540500010006540d00030003540e00040002540e00040003540d00050002540d00" + }, + { + "filename": "19-yamanashi-shingen-heads", + "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" + }, + { + "filename": "19-yamanashi-wine-heads", + "data": "0x0001161409050003e705000500035b0500050003e70500050003e705000500037905000200011b082202000100011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" + }, + { + "filename": "20-head-20-nagano-heads", + "data": "0x000319170b0b000254010006000154020005540500095405000754020005000754020004000754030003000854030003000a54010003000954020002000b54010002000a54020003000a5401000200085401000354095404000154010008540500020006540600020007540500030005540600030005540600020006540600020004540800" + }, + { + "filename": "20-nagano-matumotocastle-heads", + "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" + }, + { + "filename": "20-nagano-wasabi-heads", + "data": "0x0003161505040002220100024e08000100024e01000222034e08000122024e0222034e09000122034e0122014e0222090001000122034e032201c90122070002000622014e022206000200013f022201c9014e042206000200013f014e0622014e01c90500030001c90922040003000a22040003000422014e062203000400013f014e0522014e0322020005000922014e020005000b22010006000122014e082201000700042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" + }, + { + "filename": "21-gifu-gassho-summer-heads", + "data": "0x00021d14040b0003d80b000b0003d80b000a0002d8018402d80a00090002d8038402d80900080002d80184037c018402d80800070002d8028402010123028404d80500070001d8028401ca0201012301ca028401d80700060001d8028407ca028401d80600050001d80184057c01ca057c018401d80500040002d8018401ca030103ca030101ca018402d80400030002d8028401ca030103ca030101ca028402d80300030001d802840dca028401d80300020002d8018402ca020101ca020101ca020101ca020102ca018402d80200010002d8018403ca020101ca020101ca020101ca020103ca018402d80100010001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + }, + { + "filename": "21-gifu-gassho-winter-heads", + "data": "0x00021d14040900070109000800030103d8030108000800030101d8018401d8030108000700030101d8038401d8050105000600030101d80184037c018401d8040105000500030101d8028402010123028401d8010102d805000400030101d8028401ca0201012301ca028401d80200010104000300030101d80184030103ca0301018401d8030103000200030101d80184050101ca0501018401d8030102000200030101d801840bca018401d8030102000100030101d802840bca028401d8030101000100020101d802840dca028401d802010100030101d801840fca018401d80301020101d8018411ca018401d80201010101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + }, + { + "filename": "21-gifu-keichan-heads", + "data": "0x00021d1a03040002061400060004060500050606000a000106090003060300040006060100017d029c0900010602000300010605000322017d029c0200060603000400090601d2019c010001060900030003ca0123022203e901220106017d029c0106022303ca0300020002ca0223022201e9037d01220106027d019c017d0106010c022302ca0200010002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012302ca02ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c0123012301ca0123010c0322047d029c0322027d029c017d0122010c012301ca01230123010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012302ca02ca0123010c0422017d029c037d0422027d0222010c012302ca03ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca0100020004ca0e2304ca0200030014ca03001a001a001a000c00013d0101013d01010a000d00013d0100013d0a00" + }, + { + "filename": "21-gifu-ukai-heads", + "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f5407000300105407000300105407000200115407000200045401920c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c020101f406000100030c0601010c07a6010101f406000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" + }, + { + "filename": "21-head-21-gifu-heads", + "data": "0x00031817060c0001540100025402000b000754070002540100085407000a54010007000a54010006000a54020006000b54010006000a5402000700085403000800065404000100025401000b54030001000f5402001054020001001054010002001054020010540300055402000754010003000454040006540100020004540600015401000254020002000154010002540c00050001540c00" + }, + { + "filename": "22-head-22-shizuoka-heads", + "data": "0x00031d14050a0001540d00090002540d000a0001540d00090002540400015408000a000154040003540200035401000800035401000154020008540100060007540200075402000500095401000754020005000c540200055404000c5404000354010003000c540600035403000d5402000554010002000c54040006540c54070005540d540500055401000c5407000454010004000254020003540700045402000a000154080002540300" + }, + { + "filename": "22-shizuoka-oden-heads", + "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" + }, + { + "filename": "23-aichi-hitsumabushi-heads", + "data": "0x00071a15060800040e08000500050e0134040e05000300040e0234012b013401350134040e03000200010e010b033401350234012b023401350334010e02000100010e010b0134012b03340135053401350234010b010e01000100010e01350234012b0634012b033401350134010e0100020e0834013506340135020e020e023401350234012b033401350334012b0234020e020e010b023401350b34012b020e030e010b093401350334030e050e023401350234012b03340135050e0100080e0234080e01000100120e01000200100e020004000c0e0400" + }, + { + "filename": "23-aichi-tenmusu-heads", + "data": "0x00011b1406090001ce010001ce0900090003ce0900090003ce0900090003e70900070001bc05e701bc0700060001bc010105e7010101bc0600050001bc010107e7010101bc0500050001bc020101e7030101e7020101bc0500040003bc070103bc0400040005bc030105bc0400030007bc010107bc030003000fbc0300020010bc0300020011bc0200020011bc0200020011bc0200010013bc0100010007bc010101bc010101bc010107bc010015bc15bc" + }, + { + "filename": "23-head-23-aichi-heads", + "data": "0x00041c170505000154110001000154010004541000010007540f0001000854020002540300015406000e54010002540200025402001754175401001554010001000354010011540100020001540100115402000400105403000300115403000300035401000d540300020001540100015401000d5404000400015402000a540600030002540500015402000354070004000254060001540100025407000b000554070007000154010005540900060005540c00" + }, + { + "filename": "24-head-24-mie-heads", + "data": "0x000318170b06000254050007000254040007000354030006000354040005000454040002000654050001000654060002000554060002000754040002000854030004000854010002000b540200075401000254010003000554050002000354080002000254090003000254080001000354090003540a0002540b00010001540b00" + }, + { + "filename": "24-mie-jingu-heads", + "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" + }, + { + "filename": "24-mie-ninja-heads", + "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" + }, + { + "filename": "25-head-25-shiga-heads", + "data": "0x000316160807000254050007000354040006000554030003000154010007540200030003540100015401000354020003000354030004540100010004540500035401000654040003540100010005540300035402000100045403000454020001000354020007540100010003540300075402000154020009540100025401000a540100025401000954010001000c54010002000a540200020009540300040003540700050002540700" + }, + { + "filename": "25-shiga-blackbass-heads", + "data": "0x00021d18021700018d0100018d01001700038d01001600058d1700048d0a00016b0c00038d01000900036b010003c50157012303c50100038d02000800036b02c5011e02c5025702c50100028d04000500026b0100016b02c5031e06c50100038d03000500036b01c5041e01c5011e05c5028d05000400036b01c5031e01c5041e02c5010101c5030104000400026b01c5031e01c5031e0101016b060105000400016b01c5061e0201016b0201011e03010600050001c5031e01c5011e0201016b0201031e02010600050001c5041e0201016b0201031e02010700050001c5021e01c50201016b0701011e0700040001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010e000100066b0300031e0e000300046b0300021e0f000300046b14000400036b1400" + }, + { + "filename": "25-shiga-hikonecastle-heads", + "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" + }, + { + "filename": "26-head-26-kyoto-heads", + "data": "0x0005171507030003540a000154010004540a0005540b0006540100025407000300045401000154070003000654070001000a54050002000b54030003000154010008540300050008540300080005540300080005540300070007540200090001540100035402000b00045401000c0004540c00025401000154" + }, + { + "filename": "26-kyoto-kinkaku-heads", + "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" + }, + { + "filename": "26-kyoto-kiyomizu-heads", + "data": "0x00061a14051584010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100" + }, + { + "filename": "27-head-27-osaka-heads", + "data": "0x000616150b05000254010001540200060004540100060005540600055406000554060005540500065405000554010006000454010006000354020005000554010005000654020001540100075403000754010001000554050003540800" + }, + { + "filename": "27-osaka-takoyaki-heads", + "data": "0x00021e15020b0001af010001af020001af027d0900090001af027d01af0100017d01af010002af09000600017d010001af017d03af017d01af020b017d010003af060003000157020001af017d02af017d01af020b01af0134017d013401af027d0700040001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0600050001570100010b02af01dd01af013402af017d0134010b03af010001af05000600015701af023401af010b02af010b023402af020b01dd01af050006000134010b02af010b0234010b0234020b0111010b0234010b050005000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f0100050001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f010005000334010b0134020b0b60050005000234020b0134010b01110260039303600393050005000134010b0234010b013401110b6005000600040b0111046002930560060006000134010b0234011101930134019305600293016006000200037f0200023402110160053404600700017f0300017f0300013401110260013403600293026008000100037f03000234011101930134076009000b00036003930b00" + }, + { + "filename": "27-osaka-tower-heads", + "data": "0x000216150b05000195050004000395040002000195063c020003000195043c0300040003c604000100016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f01000300019501c6019501c6019503000300019501c6019501c6019503000300019501c6019501c6019503000200029501c6019501c6029502000200029501c6019501c6029502000200029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f010001000195016f019503000195016f019501000100016f019505000195016f010001000195070001950100" + }, + { + "filename": "28-head-28-hyogo-heads", + "data": "0x0004181d07040005540800020007540800030007540100015405000300095405000300095405000400065407000400065407000400085401000154030002000c54030003000e5402000f5401000f5401001054010011541154010010540100025405000754010001540a000454030011000a0001540600090001540700080002540700070003540700060005540600070003540700070001540900" + }, + { + "filename": "28-hyogo-himejicastle-heads", + "data": "0x00021a15010b00017f0700017f05000c0007e006000c0001e0019d01e0019d01e0019d01e006000b0002e0019d0301019d02e005000c00070106000c00010101920101019d01010192010106000800017f020001e0019d01e0019d0101019d01e0019d01e00200017f0200090001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e003000700017f02000101029d01010192010101920101029d01010200017f01000800017f01e0019d0201019d03e0019d0201019d01e0017f02000300017f040002e005010192050102e0020003e00500017f01e0010101920101019201e0010101e00192010101920101027f020001e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d01000192010101920300037f040105920501020001e0019d01e0019d01e00100037f010101920101079201010192020102000101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d019d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f01000192010101920101019201010192100102000401019d01e0019d01e0012b0250012b0350012b0250012b0350012b0200012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" + }, + { + "filename": "28-hyogo-tajimaushi-heads", + "data": "0x0004191504010002b50f0002b5010002b5110002b502b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b01000300010b0d0d010b0300150d150d150d0100130d01000300100d020004000c0d05000400060d0ab501000400050d0bb501000400050d05b5020d01b5020d01b501000400050d0bb501000400050d02b5070d02b5010009000ab50200" + }, + { + "filename": "29-head-29-nara-heads", + "data": "0x000316140b02000154080002000254010002540100015402000200075402000100075403000100075403000200085401000200095401000854020001000854020002000754020003000654020001000854020001000854020008540300095402000100065404000100055405000100015401000154010001540500" + }, + { + "filename": "29-nara-ashura-heads", + "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" + }, + { + "filename": "29-nara-deer-heads", + "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" + }, + { + "filename": "30-head-30-wakayama-heads", + "data": "0x0004161606080002540600015402000754060001000a5405000200085406000100085407000100085407000200065408000100085407000a54060009540700020007540100015401000154030003000a54030005000954020006000954010005000b54060009540100070009540900055402000c0001540300" + }, + { + "filename": "30-wakayama-danjogarandaito-heads", + "data": "0x00011914080800019508000800012108000800019508000800012108000700012701e301270700060001e3012701e3012701e30600040001e3012701e3012701e3012701e3012701e30400020001e3012701e3012701e3012701e3012701e3012701e3012701e3020002000db40200050001b4010101b4010101b4010101b40500050007b405000500012801dd01b401dd01b401dd012805000400090104000100012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b40300030001b401dd01b401dd01b401dd01b401dd01b401dd01b4030003000bb40300030001b4010101b4010e01b4010e01b4010e01b4010101b403000100047f07e0047f0100" + }, + { + "filename": "30-wakayama-nachifall-heads", + "data": "0x000216150a0100036102e001610101046101610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e00301026202000400010101e0010101e004000400020101e001010400040001e0030104000500010101e001010400050001e0020104000500030104000500020101e00400050001e0010101e004000500010101e001010400050003010400050003010400050003010400030001010100016201010162010102000101050001010162020103000500020101000101010001010100020001010100010101000101010001010300" + }, + { + "filename": "31-head-31-tottori-heads", + "data": "0x00091c13061200025402000100015404000254040002540200045402000200015401001054020003001254010002001354010002000554010004540200085402000554030001540400075406540a00035401000254010005540a00015405000454120002541400" + }, + { + "filename": "32-head-32-shimane-heads", + "data": "0x000319190710000254100002540e000154030012001200120012000e00035401000b00055402000a00075401000b0006540100090008540100080007540300070008540300050007540600040006540800030008540700020004540c0005540d00010004540d0004540e00010003540e00010002540f00" + }, + { + "filename": "33-head-33-okayama-heads", + "data": "0x00031b1606050002540400025408000500045401000554060004000c540400015404000c540100035401000200125401000100125402001354020001001154030012540300125403001254030001001154030001001254020001001054040001001154030002000f54040002000a5402000254050003000b5407000300035402000554080004000154040001540b00" + }, + { + "filename": "33-okayama-denim01-heads", + "data": "0x00061815090a54042b01540799010c0299042b01990754019907540154059901540199015405990154015401f5035401f501540199015401f5035401f501540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" + }, + { + "filename": "33-okayama-denim02-heads", + "data": "0x00061815090a92042b01920799010c0299042b01990792019907920192050c019201990192050c0192079201990792079201990792079201990792079201990792079201000792079201000792079201000792079201000792079201000792079901000799079d0100059d010101f6079d0100059d010101f6" + }, + { + "filename": "33-okayama-denim03-heads", + "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca07920192050c019201ca0192050c0192079201ca0792079201ca0792079201ca0792079201ca079207920100079207920100079207920100079207920100079207920100079207ca010007ca079d0100059d014d01f6079d0100059d010101f6" + }, + { + "filename": "33-okayama-dog-heads", + "data": "0x00031a1506010003260c00022602000100015703260a000226015702000100025703260800022602570200010003570c2602570200010002570e2601570200010003260601016a05010226020001000801036a0601020001000801010f016a010f06010200010003010d26010102000100112602000100052603570326035703260200010011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db018801001000025f0200" + }, + { + "filename": "33-okayama-horseshoe-crab-heads", + "data": "0x00051815010a00088e0500090003d5098e02000800028e02ca01d5068e0101028e0100060001ca048e01ca01d5028e04c3018e0101018e01000700048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0100090003d5098e02000a00088e0500" + }, + { + "filename": "33-okayama-momotaro-heads", + "data": "0x00021914050200020c10000100030c1000040c1000030c0201040c0500040c020003000101060c0374060c010002000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c010012570100010012570100010012570100020001741057010003000557040c0757010003001057010004000e570200" + }, + { + "filename": "33-okayama-monkey-heads", + "data": "0x00051a140605000aca050003000eca0300020010ca0200010003ca0601016a050102ca020001000801036a0601020001000801010f016a010f060102000100030106db01ca06db01010200010003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb0100020003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" + }, + { + "filename": "33-okayama-peach-heads", + "data": "0x00041e15030d00015f0d000a00075f0a0007000d5f070006000f5f06000500025f01570e5f05000500015f0157065f01e5085f05000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400095f01e5095f04000400095f01e5095f04000400095f01e5095f040002000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f0322010002000322055f0382095f02220300040002220f5f02220400060002220b5f02220600" + }, + { + "filename": "33-okayama-pheasant-heads", + "data": "0x0003191506019212000292110005920a540400010002920d54030002000f540200020002540601016a05010154020002000701036a0501020002000701010f016a010f05010200020002010cb901010200020001540eb90200020001540eb90200020001540eb90200020001540eb90200020001540eb902000200025407b9036d03b9020003000754096d03000854086d03000e540100016d03000e1d0200" + }, + { + "filename": "34-head-34-hiroshima-heads", + "data": "0x00041c19020f000254010001540100035403000f00095402000e000a5402000d000b5402000c000c5402000d000b54020004000154010001540100015401000f540100020017540100030015540200020017540100020017540100010019541a54010019540100155401000354010005540100025401000954010002540200015401000200035404000a540200015401000154020002000254010001540300055405000354040003000154060002540300025409000a000154010002540c00090001541000080002541000" + }, + { + "filename": "34-hiroshima-manju-choco-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad02880385028802ad0400010005ad01880585028804ad0100010001ad05880585058801ad0100010001ad01880d85018801ad0100010001ad02880b85028801ad0100020001ad01880b85018801ad0200020001ad02880985028801ad0200020001ad01880b85018801ad0200010002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad0100020002ad02880785028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-custard-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288016d028802ad0500040002ad0288036d028802ad0400010005ad0188056d028804ad0100010001ad0588056d058801ad0100010001ad01880d6d018801ad0100010001ad02880b6d028801ad0100020001ad01880b6d018801ad0200020001ad0288096d028801ad0200020001ad01880b6d018801ad0200010002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad0100020002ad0288076d028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-koshi-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880180028802ad0500040002ad02880380028802ad0400010005ad01880580028804ad0100010001ad05880580058801ad0100010001ad01880d80018801ad0100010001ad02880b80028801ad0100020001ad01880b80018801ad0200020001ad02880980028801ad0200020001ad01880b80018801ad0200010002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad0100020002ad02880780028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-maccha-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288010f028802ad0500040002ad0288030f028802ad0400010005ad0188050f028804ad0100010001ad0588050f058801ad0100010001ad01880d0f018801ad0100010001ad02880b0f028801ad0100020001ad01880b0f018801ad0200020001ad0288090f028801ad0200020001ad01880b0f018801ad0200010002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad0100020002ad0288070f028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-tsubu-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad028802850180028802ad0400010005ad01880145028501450185028804ad0100010001ad0588024501800285058801ad0100010001ad018802800245018502800385018001450185018801ad0100010001ad02880180018501450480018501800285028801ad0100020001ad018802850380018501450480018801ad0200020001ad0288018501450280024502800145028801ad0200020001ad018801850345028502800345018801ad0200010002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad0100020002ad02880180014502800385028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-okonomiyaki-heads", + "data": "0x00051b14050500015d0300045f0100019307000600025d01d9015f026a0122015d08000600012201d90101026a0122010101220800030001930101010001d90101015f016a015d0101015d01010122015f010105000500010101d90101015f016a0122015d010101220101025f010104000500012201d90101015f016a015d022201010122015d015f01d9010103000400015f015d01d90101015f016a0422015d0122015f02d9010102000300015f015d012201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101016a0722015f02d9010102000200016a015f0c22015f02d9010102000200026a015f0f22020002000560012501600125016001250160012501600125046002001623" + }, + { + "filename": "34-hiroshima-shrine01-heads", + "data": "0x00051c15050277130002770100157701000200131a020002001341020004000441020003230200044104000500021a03000123019301230300021a0500040004410200032302000441040002001341020002001341020005000241090002410500040003b3090003b30400050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b305000400018d01b30141038d0306038d014101b305000400078d0106068d0500" + }, + { + "filename": "35-head-35-yamaguchi-heads", + "data": "0x00051e17030d0001540d000c0002540d000b0003540d00090004540e000a0004540600015406000100035401000254020007540300025406000300015401000154010008540500015406000f540200015401000254060001001554050017540400010017540300010017540300175404000e54020008540300010002540100045401000154010001540300015401000654040001000154030002540b00045401000254010001540154130002540100015401000154010015000154050014000154020001540300" + }, + { + "filename": "35-yamaguchi-anglerfish-heads", + "data": "0x00091f15020c0005830c000900048301660683090008000a830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + }, + { + "filename": "35-yamaguchi-fuku-heads", + "data": "0x00051b14030400026212000400036211000400046203610495016105950300050001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed02610301016103950161015903610159016105950201010002610401059501590161015904950501010001610300130101000200026212010200020003621101020002000262010011010200060008010259050103000600080101590601030007000d010400" + }, + { + "filename": "35-yamaguchi-kawarasoba-heads", + "data": "0x00051e1504030001061600010002060700019e0300019e08000106020001060900019e0300019e0900010601000106080001da010101da010001da010101da05000306020001000306040001d0012301d0012301d0012301d0012301d00900040001060200011501230115012301150123011501230115012301150200010605000400010601000d1503000206020001000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb05000106010604000fe80300020601000100010603000fe802000106030002000106010011e8010001060300040002e80d2302e80200010602000300010c02230d0c0223010c04000200040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" + }, + { + "filename": "35-yamaguchi-shoin-heads", + "data": "0x00031715070100030c0c000200050c09000400060c060002000d23010001000f2301000223048805230388012302230e8802230e8802230388032304880323018801230f880588032304880323018806880123028801ca0288012303880a8801ca05880a8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c880100050009880200" + }, + { + "filename": "35-yamagudhi-footballfish-heads", + "data": "0x00031f15020900023402eb100008000134040001eb01da0e0007000134050001da015d01da0d0007000134040001da015d0101015d01da0c0008000134040001da015d01da0d000900023401eb020001da0e000c0002eb03830c0009000483016601eb0583090008000683013403830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + }, + { + "filename": "36-head-36-tokushima-heads", + "data": "0x00031b15031500015402001200035403001100055402000b0005540100055402000400035402000c54030003001254030002001254040001001554020001001654010001001654010016540200020016540500025402000d54020009000b54040009000a5405000c00065406000c00045408000b00055408000c0003540900" + }, + { + "filename": "36-tokushima-awa-odori01-heads", + "data": "0x000118140d010002f80800010004f8030001f90200010006f8010001f90200010007f801060200020005f80106020001f90200012303f90106030001f9030003f9030001010100010003010267030102000401026701010400030103670500039e0367050002e2019e0367050004e2014f060002e2044f05000200044f050001000144044f050001000344014f06000300010107000200010108000200012301440700" + }, + { + "filename": "36-tokushima-naruto-wakame-heads", + "data": "0x00021a15070b000194035c04940b000348035c02480b00035c0100025c02000b00035c0200015c020004000748035c01480400020002480723035c012302480200010001480923025c0423014801000148042306de015c02de042301480148022302e90bde022301480148012304e905de015c05de01230148014807de045c06de0148014805de055c07de0148014806de035c03de02e903de014801480bde04e902de0148014811de014802480fde0248034801de055c07de034801001148010002000f48020004000b480400" + }, + { + "filename": "36-tokusima-whirlpools-heads", + "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" + }, + { + "filename": "37-head-37-kagawa-heads", + "data": "0x00041c15041200045402001000055403000d0001540200055403001200015401000154030018000400015404000254010001540100025408000800085401000154060007000c54050005000e5405000154010001540100115403000100165401000200165402000f540500025402000d54090002000554030002540c00020003541300010003541400020001541500" + }, + { + "filename": "37-kagawa-bonsai-heads", + "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" + }, + { + "filename": "38-ehime-iyokan-heads", + "data": "0x00051a140604000c4204000200084201e1074202000100024201250f42010002420125114201420125124201420125124214421442144214421442144214420100054203b30a42010002001042020003000e420300" + }, + { + "filename": "38-ehime-jakoten-heads", + "data": "0x0006191406020010d20100010001d203d102d2018e0bd201d204d10ed201d204d101d2018e0ad2018e01d201d204d106d2018e07d201d204d10ed201d204d10ed201d204d10ed201d204d10ed201d204d10dd2018e01d204d10ed201d204d105d2018e01d2018e06d201d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" + }, + { + "filename": "38-ehime-mandarin-orange-heads", + "data": "0x00061a140604000c4204000200084201e1074202000100024201250f4201000242012511420142012512420142012512421442144214421442144214420100054203b30a42010002001042020003000e420300" + }, + { + "filename": "38-ehime-onsen01-heads", + "data": "0x00031b15050700015504000155040001550400060002550300025503000255040005000255030002550300025505000400025503000255030002550600040002550300025503000255060004000255030002550300025506000400025503000255030002550600050002550300025503000255050006000255030002550300025504000200025502000255030002550300025501000155020001000255030002550300025503000255010002550100025503000255030002550300025503000255025502000255030002550300025504000255025502000155040001550400015505000255025512000255035510000355010003550e000355010002001255020004000e550400" + }, + { + "filename": "38-ehime-onsen02-heads", + "data": "0x00031b150507000101040001010400010104000600020103000201030002010400050002010300020103000201050004000201030002010300020106000400020103000201030002010600040002010300020103000201060004000201030002010300020106000500020103000201030002010500060002010300020103000201040002000374013f0201033f0201033f02010274020001000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f02740274023f0201033f0201033f0201043f02740274023f0101043f0101043f0101053f02740274123f02740374103f0374010003740e3f0374010002001274020004000e740400" + }, + { + "filename": "38-ehime-onsen03-heads", + "data": "0x00031c14050b00010c0b000900050c09000800016101740161017401610174016108000700017407de01740700020001610300016101de01ae05de01ae01de0161030001610200030001740161017401de04ae01de04ae01de0174016101740300030003de03ae053f03ae03de0300060003ae013f02e70126013f03ae0600060003ae053f03ae060006000bae060006000b3f0600013f03000f3f0300013f0100153f010002001321020004000f01040002000157010004ae015702ae015702ae015704ae0100015702000200010c010001ae0306015701ae033601ae0157030601ae0100010c02000200010c010001ae030602ae033602ae037401ae0100010c0200" + }, + { + "filename": "38-ehime-tai-somen-heads", + "data": "0x00031c18010d000189020001890a000b0001890100015f01890100015f0189090008000357015f01890157015f01890157015f018902570600070003570b20015705000600025701890e200400050002570189102003000500015701890320018d0220018d0220018d0220018d0520020001200300025714200100010001200200015715200100010001890120010001571220028d01200100020001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a20010603200306012003000257018907060401080601000400035712060200040004570f06040004000157010002570400068904000157040004000157010001570f000157040004000157110001570400040001571600" + }, + { + "filename": "38-ehime-taimeshi-heads", + "data": "0x00041a16060600082306000300030f0848022304000200050f01e90182020101e9015f01010248012303000100060f02e9018202e90182010101e901010148012302000100030f0282015f02e9015f02e9015f02e9015f01010148012301000100020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f02010148012301230148030f03e9044202e9028202e901480123012301480201025f0182044201010142015f04e90148012301230148015f028202e9044201e4014204e9015f0148012301230148018203e9015f064202e9015f01820101014801230123014803e9015f018201e9044201e9015f02820201014801230123014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e901010148012301000100012301480101018201e90101015f03e90182015f018202e9010101480123010002000123014803010182015f03e901010282010101480123020003000123024802010182015f02e9020102480123030004000223084802230400060008230600" + }, + { + "filename": "38-head-38-ehime-heads", + "data": "0x00021b1a020f00015409000f00015409001000015408000e0001540a000d00035409000900015402000454080001540c00055402000354010002540b000e540a000f540a00095406000a000754080009000854080007000954090006000a54090005000b5409000300025401000a54090001000254030006540d000154040008540c00070007540b00080004540d00060005540e0007000254010001540e00060004540f0005000154010003540f0007000154010001540f00" + }, + { + "filename": "39-head-39-kochi-heads", + "data": "0x00041a15030d0002540400015403000900085401000254030008000c54030007000e54020007000e54020006000854020007540300095406000454010004000754080003540100050005540a0002540100040006540b000154010001000154010006540e00020006540f00020006540f0002000454110003000454100002000454110001000154010001540100015411000154050001541000" + }, + { + "filename": "39-kochi-bonito-heads", + "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" + }, + { + "filename": "40-fukuoka-mojiko-heads", + "data": "0x00031e14030d0001960d0009000196030001960300019609000600019602000196072701960100019607000600019602000927010001960700060002610b27026106000500046102270106016b010101270106022704610500050001a501e0010601a5032701a501aa01a5032701a501e0010601a50500040009aa015709aa0400050001c1025701c1025701e9035701e9025701c1025701c105000200032701c1015701e001c102e001e903e001e902e001c1015701e001c1032702000100042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c1042701000100042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e001060157015702060157010601c10157010601c1010301460197034601970146010301c10157010601c101060157020601570557017f0257017f0103019701460397014601970103017f0257017f0557" + }, + { + "filename": "40-fukuoka-tenmangu-heads", + "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" + }, + { + "filename": "40-head-40-fukuoka-heads", + "data": "0x00021b18051200015403000b00045402000154040009000954040007000a54050008000a54040008000a5404000500015401000c5403000300015402000d5403000200035402000f54010014540100020014541154050004000c5406000600015402000754060009000654070008000854060007000954060006000954070005000b5406000500075401000354060006000454040002540600070002540d00070002540d00" + }, + { + "filename": "41-head-41-saga-heads", + "data": "0x00031c19040300015414000200045412000200045412000300045406000354080001000154020003540100095407000200115403000254040010540100035403001554030015540100015401001354020002540100135402001454040001001254050001001254050002000d5401000254060004000a5403000154060006000554010001540b00050007540c00060006540c00070006540b00080006540a00090005540a000c0002540a00" + }, + { + "filename": "41-saga-mudskipper-fiddlercrab-heads", + "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" + }, + { + "filename": "41-saga-yoshinogari-heads", + "data": "0x0002181409030001d8010001d8010001d8010001d8010001d80300040007d80400030009c9030002000bd8020001000dc9010002000b99020001000d9901000f99010001bb050001bb050001bb010001de01bb050001bb050001bb01de0fde01de01bb050001bb050001bb01de0fde010001bb050001bb050001bb0100010001bb050001bb050001bb0100010001bb050001bb050001bb010001000dbb0100010001bb050001bb050001bb0100010001bb050001bb050001bb0100" + }, + { + "filename": "42-head-42-nagasaki-heads", + "data": "0x00011a1908080001540900070002540900070002540900070001540a00070001540a00060001540b00060001540b00120012000b00015406000b0001540600120012000900015408001200080004540600050001540200015401000254060008000154020002540500050001540400015401000254040004000354040001540100025403000400025404000254020002540200030001540100015405000754010002540a000154020002540100035408000254010002540100015401000154080001540600" + }, + { + "filename": "42-nagasaki-champon-heads", + "data": "0x00071a1406060008e00600040003e0065703e00400020003e00257066d025703e00200010002e00157032d01d4014e02eb0166012d026d025702e0010002e00257036602eb02d40166012d014e02d4025702e001e00257014e05d4014e01970166012d02d4026d025701e001e00157016d024e01d402eb02d4019702d402eb014e0297015701e001e0015702eb0266039703660197024e032d015701e002e00157032d02d401eb032d019701eb01d4036602e0010002e0016d01eb024e05d4019701eb014e036d01e001000100016f03e0015702d401b3016d02eb016d025703e0016f01000200026f03e0015701cd01b301cd025703e0026f02000300036f08e0036f030004000c6f0400" + }, + { + "filename": "42-nagasaki-meganebashi-heads", + "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e04080208017e0400017e0408017e0400017e020802080600017e0208017e060002080108017e060004080600017e0108017e080002080800017e019108000291080001910191080002910800019102910700039107000191010003910300029102000391030002910100030004910600049103000700019101000191010001910800" + }, + { + "filename": "42-nagasaki-saseboburger-heads", + "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" + }, + { + "filename": "43-head-43-kumamoto-heads", + "data": "0x00031816040e00035403000a0002540300035402000800065401000354020007000c54010007000c54010008000b54010009000b5409000a5401000a000854020007000a540300060001540300075403000154010001540600075404000100025402000354010006540500035401000354020006540500035403000154010009540300010002540100015402000a5403000254050009540400010001540100015402000b54030003000154020003540100065404000a0004540600" + }, + { + "filename": "43-kumamoto-karashirenkon-heads", + "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" + }, + { + "filename": "43-kumamoto-kumamotocastle-heads", + "data": "0x00021d15020800019d12000700019d0101019d11000600059d10000600050e1000040002c80206019d020602c80e00040002c8029d0101029d02c80e00030002c8029d0323029d02c80d0003000501019d05010800019d04000300010e0223010e019d0101019d010e0223010e0700019d0101019d0300020001c8036f019d0323019d036f01c8060003060300020001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c802000100019d0101019d0c01026f020101c80192019d019202c8010001000392010e0623010e0223020e029201230192019d0301019d01010100010003920c0e0492052301920100059d0100010101000101010001010100010101fa010101fa0a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" + }, + { + "filename": "44-head-44-oita-heads", + "data": "0x00041915040b0003540700060002540200055406000600095406000200025401000a54060001000c5401000154060001000a540100015408000b540a0001000a54020001540100035403001154040010540100015403000100025402000c5404000100035402000e5401000200025402000c54030007000c540100015407000d54010007000c54020008000254010004540200035401000b000254040001540300" + }, + { + "filename": "44-oita-beppujigoku-heads", + "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" + }, + { + "filename": "44-oita-usajingu-heads", + "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" + }, + { + "filename": "45-head-45-miyazaki-heads", + "data": "0x0004161708070001540100015402000254060008540500085401000500075402000400095401000400085402000500075402000400075403000500065403000400075403000a540400010009540400020008540400030007540400030008540300050005540400050005540400070002540500060003540500080001540500" + }, + { + "filename": "45-miyazaki-aoshima-heads", + "data": "0x00061d14030500109205000600027f0192047f0192047f0192017f0600080001bf040001bf040001bf0700010001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf0700010004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf01920600030005e102bf080002bf0600030003e1011b019202bf010006af019202bf0600020002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d60100010001e1011b02e1019d01e1019209af019201af01990221039901000100011b03e1019d0caf01d6026001d6016001d60200" + }, + { + "filename": "45-miyazaki-chickennanban-heads", + "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" + }, + { + "filename": "46-head-46-kagoshima-heads", + "data": "0x0003181f03070001540100015402000254070007000754070006000a54050007000954050007000a5404000200015403000b54040007000b54030001000154060005540200045402000154080003540300065409000354010008540900025403000754080003540400055401000600065403000454020007000554040004540100070006540300045401000c0001540200045402000f00035403000e0002540500150015001500030001540f0001540100130001540100120002540100120002540100120001540200060002540300015405000254020009000154010002540400025402000a0004540700" + }, + { + "filename": "46-kagoshima-goromon-heads", + "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" + }, + { + "filename": "46-kagoshima-shirokuma-heads", + "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" + }, + { + "filename": "47-head-47-okinawa-heads", + "data": "0x00011c15050f00015407000e000154070001541700170017001300015403001300025402001200035402000b0001540500045402000d00025402000354030001540c00075403000e00045405000d00035407000b00045408000a0002540b000a0003540a000b0003540900090003540b0003000154040003540c00090003540b00090002540c00" + }, + { + "filename": "47-okinawa-goya-chanpuru-heads", + "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" + }, + { + "filename": "47-okinawa-shuricastle-heads", + "data": "0x00051e1403050001d00f0001d00500050002c40d0002c40500050001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10500050001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10500040001be01d001be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01d001be0400020001be01a101be01a101be01a101be01a101be01a101be01c401be01a101be01a101be01a101be01a101be01a101be020004000848035408480400020001be01a101be01a101be01a101be01a1024d01a601be01a6024d01a101be01a101be01a101be01a101be020001be01a101be01a101be01a101be01a101be014d02a6039202a6014d01be01a101be01a101be01a101be01a101be0200044801be01a1014d01a601d0029201d0029201d001a6014d01a101be0448020002000148013301480133014801330148094d0148013301480133014801330148020002000748014d010101a603be01a60101014d074802000200014801010548014d0101014d0301014d0101014d02480201014801010148020002000148010104480105014d01be01a603be01a601be014d0105014802010148010101480200010007970105014d01be014d03be014d01be014d010507970100019707ee01d7095901d707ee0197" + }, + { + "filename": "47-okinawa-siisa-heads", + "data": "0x00041d14030200033706000437060003370200030004370200033702000337020004370300040008370200083704000300023703460137034602370246023702460337030003000237026602370266043701230337012303370300020001460237016601230237016601230337012301370123013701230137012302370146020001000246143702460100020001460337042307370423023701460200010003460837024606370123013702460200030002460637014602000146063702460300030002370746020007460237030001000146010003370246023701460137020001370146023702460337010001460100024601000937020009370100024601460b3702000b37014601000a370123020001230a3701000200013701460837022308370146013702000400023701660200023701660200016602370200016602370400" + } + ], + "glasses": [ + { + "filename": "glasses-hip-rose-glasses", + "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" + }, + { + "filename": "glasses-square-black-eyes-red-glasses", + "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" + }, + { + "filename": "glasses-square-black-rgb-glasses", + "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-black-glasses", + "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" + }, + { + "filename": "glasses-square-blue-med-saturated-glasses", + "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" + }, + { + "filename": "glasses-square-blue-glasses", + "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" + }, + { + "filename": "glasses-square-frog-green-glasses", + "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" + }, + { + "filename": "glasses-square-fullblack-glasses", + "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-green-blue-multi-glasses", + "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" + }, + { + "filename": "glasses-square-grey-light-glasses", + "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" + }, + { + "filename": "glasses-square-guava-glasses", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-honey-glasses", + "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" + }, + { + "filename": "glasses-square-magenta-glasses", + "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" + }, + { + "filename": "glasses-square-orange-glasses", + "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" + }, + { + "filename": "glasses-square-pink-purple-multi-glasses", + "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" + }, + { + "filename": "glasses-square-red-glasses", + "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" + }, + { + "filename": "glasses-square-smoke-glasses", + "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" + }, + { + "filename": "glasses-square-teal-glasses", + "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" + }, + { + "filename": "glasses-square-watermelon-glasses", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-yellow-orange-multi-glasses", + "data": "0x000b17100703000626010006130300012602010223012601000113020102230113034201260201022301260142011302010223011301260200012602010223012601000113020102230113012602000126020102230126010001130201022301130300062601000613" + }, + { + "filename": "glasses-square-yellow-saturated-glasses", + "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" + } + ] + } +} \ No newline at end of file From fd7b94afb3117d6f86a837b1b8d17698eb1278d8 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Mon, 21 Aug 2023 22:22:14 +0900 Subject: [PATCH 070/146] =?UTF-8?q?=E3=83=90=E3=83=83=E3=83=81=E3=83=9F?= =?UTF-8?q?=E3=83=B3=E3=83=88=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 20 ++++++ .../contracts/localNouns/LocalNounsMinter.sol | 8 +++ .../localNouns/LocalNounsProvider.sol | 8 +-- .../interfaces/ILocalNounsToken.sol | 6 ++ contract/scripts/populate_localNouns.ts | 18 ++--- contract/test/localNouns.ts | 65 +++++++++++++++++-- 6 files changed, 106 insertions(+), 19 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 7f08e2d8..3f4ffeef 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -72,6 +72,26 @@ contract LocalNounsToken is ProviderTokenA1, ILocalNounsToken { return _nextTokenId() - 1; } + function mintSelectedPrefectureBatch( + address _to, + uint256[] memory _prefectureId, + uint256[] memory _amount + ) public virtual returns (uint256 tokenId) { + require(msg.sender == minter, 'Sender is not the minter'); + require(_prefectureId.length == _amount.length, 'parametars length are different'); + + uint256 amount = 0; + for (uint256 i = 0; i < _prefectureId.length; i++) { + for (uint256 j = 0; j < _amount[i]; j++) { + assetProvider2.mint(_prefectureId[i], _nextTokenId() + amount++); + } + } + + _safeMint(_to, amount); + + return _nextTokenId() - 1; + } + function mint() public payable override returns (uint256 tokenId) { revert('Cannot use this function'); } diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol index 0ef9bb29..18ec97e9 100644 --- a/contract/contracts/localNouns/LocalNounsMinter.sol +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -34,4 +34,12 @@ contract LocalNounsMinter is Ownable { function mintSelectedPrefecture(uint256 _prefectureId) public payable returns (uint256 tokenId) { return token.mintSelectedPrefecture(msg.sender, _prefectureId); } + + function mintSelectedPrefectureBatch( + uint256[] memory _prefectureId, + uint256[] memory _amount + ) public payable returns (uint256 tokenId) { + + return token.mintSelectedPrefectureBatch(msg.sender, _prefectureId, _amount); + } } diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index 50503993..68f32afc 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -154,11 +154,9 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { } function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256) { - if (nextTokenId == _assetId) { - seeds[_assetId] = generateSeed(prefectureId, _assetId); - tokenIdToPrefectureId[_assetId] = prefectureId; - nextTokenId++; - } + seeds[_assetId] = generateSeed(prefectureId, _assetId); + tokenIdToPrefectureId[_assetId] = prefectureId; + nextTokenId++; return _assetId; } diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol index d0a1d8ab..a3713682 100644 --- a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol +++ b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol @@ -20,5 +20,11 @@ pragma solidity ^0.8.6; interface ILocalNounsToken { function mintSelectedPrefecture(address to, uint256 prefectureId) external returns (uint256 tokenId); + function mintSelectedPrefectureBatch( + address _to, + uint256[] memory _prefectureId, + uint256[] memory _amount + ) external returns (uint256 tokenId); + function setMinter(address _minter) external; } diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts index d5720711..872178d5 100644 --- a/contract/scripts/populate_localNouns.ts +++ b/contract/scripts/populate_localNouns.ts @@ -33,7 +33,7 @@ async function main() { const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); - if (false) { + if (true) { // set Palette console.log(`set Palette start`); await localNounsDescriptor.addManyColorsToPalette(0, palette); @@ -61,15 +61,15 @@ async function main() { } - for (var i: number = 1; i <= 1; i++) { - try { - await localMinter.functions['mintSelectedPrefecture(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.000001') }); + // for (var i: number = 1; i <= 47; i++) { + // try { + // await localMinter.functions['mintSelectedPrefecture(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.000001') }); - console.log(`mint [`, i, `]`); - } catch (error) { - console.error(error); - }; - } + // console.log(`mint [`, i, `]`); + // } catch (error) { + // console.error(error); + // }; + // } // console.log(`write file start`); // const index = 0; diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 3b885679..c9199280 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -3,9 +3,14 @@ import { ethers, network, SignerWithAddress, Contract } from "hardhat"; import { addresses } from '../../src/utils/addresses'; import { ethers } from 'ethers'; -let owner: SignerWithAddress, user1: SignerWithAddress; -let token: Contract, minter: Contract; -const localProviderAddress = addresses.localProvider[network.name]; +let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress; +let token: Contract, minter: Contract, provider: Contract; + +const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const nounsSeederAddress = addresses.nounsSeeder[network.name]; +const localSeederAddress = addresses.localSeeder[network.name]; + before(async () => { /* `npx hardhat node`実行後、このスクリプトを実行する前に、Nouns,LocalNounsの関連するコントラクトを @@ -17,10 +22,16 @@ before(async () => { # npx hardhat run scripts/populate_localNouns.ts */ - [owner, user1] = await ethers.getSigners(); + [owner, user1, user2] = await ethers.getSigners(); + + const factoryProvider = await ethers.getContractFactory('LocalNounsProvider'); + provider = await factoryProvider.deploy( + nounsDescriptorAddress, localNounsDescriptorAddress, nounsSeederAddress, localSeederAddress); + await provider.deployed(); + console.log(`##LocalNounsProvider="${provider.address}"`); const factoryToken = await ethers.getContractFactory('LocalNounsToken'); - token = await factoryToken.deploy(localProviderAddress, owner.address); + token = await factoryToken.deploy(provider.address, owner.address); await token.deployed(); console.log(`##LocalNounsToken="${token.address}"`); @@ -50,7 +61,51 @@ describe('mint functions', function () { const [balance] = await token.functions.balanceOf(user1.address); expect(balance.toNumber()).to.equal(1); // user1は1つ保持 + const [owner0] = await token.functions.ownerOf(0); + expect(owner0).to.equal(user1.address); + const [totalSupply] = await token.functions.totalSupply(); expect(totalSupply.toNumber()).to.equal(1); // tokenId=1 }); + + it('batch mint', async function () { + + //Aomori,Iwate,Miyagiを1個,2個,3個ずつ、user2にmint + await minter.connect(user2).functions.mintSelectedPrefectureBatch([2, 3, 4], [1, 2, 3]); + + // user2に合計6個ミントされる + const [balance] = await token.functions.balanceOf(user2.address); + expect(balance.toNumber()).to.equal(1 + 2 + 3); + + const [owner1] = await token.functions.ownerOf(1); + const [owner2] = await token.functions.ownerOf(2); + const [owner3] = await token.functions.ownerOf(3); + const [owner4] = await token.functions.ownerOf(4); + const [owner5] = await token.functions.ownerOf(5); + const [owner6] = await token.functions.ownerOf(6); + + expect(owner1).to.equal(user2.address); + expect(owner2).to.equal(user2.address); + expect(owner3).to.equal(user2.address); + expect(owner4).to.equal(user2.address); + expect(owner5).to.equal(user2.address); + expect(owner6).to.equal(user2.address); + + // Traitsに指定した都道府県名が設定される + const [traits1] = await provider.functions.generateTraits(1); + const [traits2] = await provider.functions.generateTraits(2); + const [traits3] = await provider.functions.generateTraits(3); + const [traits4] = await provider.functions.generateTraits(4); + const [traits5] = await provider.functions.generateTraits(5); + const [traits6] = await provider.functions.generateTraits(6); + expect(traits1).to.equal('{"trait_type": "prefecture" , "value":"Aomori"}'); + expect(traits2).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); + expect(traits3).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); + expect(traits4).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); + expect(traits5).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); + expect(traits6).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); + + const [totalSupply] = await token.functions.totalSupply(); + expect(totalSupply.toNumber()).to.equal(7); + }); }); From ec3e024e624daa6d4c7f9bdf601f2036a6dddd2f Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Tue, 22 Aug 2023 10:07:31 +0900 Subject: [PATCH 071/146] =?UTF-8?q?head,accessory=E3=81=AE=E5=90=8D?= =?UTF-8?q?=E5=89=8D=E3=82=92traits=E3=81=AB=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../localNouns/LocalNounsDescriptor.sol | 777 +++++++++--------- .../localNouns/LocalNounsProvider.sol | 6 +- .../interfaces/INounsDescriptor.sol | 12 +- contract/scripts/populate_localNouns.ts | 27 +- contract/test/localNouns.ts | 20 +- 5 files changed, 454 insertions(+), 388 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsDescriptor.sol b/contract/contracts/localNouns/LocalNounsDescriptor.sol index a4903292..8781d83b 100644 --- a/contract/contracts/localNouns/LocalNounsDescriptor.sol +++ b/contract/contracts/localNouns/LocalNounsDescriptor.sol @@ -25,373 +25,412 @@ import { MultiPartRLEToSVG } from '../external/nouns/libs/MultiPartRLEToSVG.sol' import { NFTDescriptor } from '../external/nouns/libs/NFTDescriptor.sol'; contract LocalNounsDescriptor is INounsDescriptor, Ownable { - using Strings for uint256; - - // original - INounsDescriptor public immutable descriptor; - - // prettier-ignore - // https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt - bytes32 constant COPYRIGHT_CC0_1_0_UNIVERSAL_LICENSE = 0xa2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499; - - // Whether or not new Noun parts can be added - bool public override arePartsLocked; - - // Whether or not `tokenURI` should be returned as a data URI (Default: true) - bool public override isDataURIEnabled = true; - - // Base URI - string public override baseURI; - - // Noun Color Palettes (Index => Hex Colors) - mapping(uint8 => string[]) public override palettes; - - // Noun Backgrounds (Hex Colors) - string[] public override backgrounds; - - // Noun Bodies (Custom RLE) - bytes[] public override bodies; - - // Noun Accessories (Custom RLE) - bytes[] public override accessories; - - // Noun Heads (Custom RLE) - bytes[] public override heads; - - // Noun Glasses (Custom RLE) - bytes[] public override glasses; - - // prefectureId => parts index of heads - mapping(uint256 => uint256[]) public prefectureHeads; - - // prefectureId => parts index of accessories - mapping(uint256 => uint256[]) public prefectureAccessories; - - constructor(INounsDescriptor _descriptor) { - descriptor = _descriptor; - } - /** - * @notice Require that the parts have not been locked. - */ - modifier whenPartsNotLocked() { - require(!arePartsLocked, 'Parts are locked'); - _; - } - - /** - * @notice Get the number of available Noun `backgrounds`. - */ - function backgroundCount() external view override returns (uint256) { - return backgrounds.length; - } - - /** - * @notice Get the number of available Noun `bodies`. - */ - function bodyCount() external view override returns (uint256) { - return descriptor.bodyCount(); - // return bodies.length; - } - - /** - * @notice Get the number of available Noun `accessories`. - */ - function accessoryCount() external view override returns (uint256) { - return accessories.length; - } - - /** - * @notice Get the number of available Noun `accessories` in the prefecture. - */ - function accessoryCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { - return prefectureAccessories[prefectureId].length; - } - - /** - * @notice Get the number of available Noun `accessories` in the prefecture. - */ - function accessoryInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { - return prefectureAccessories[prefectureId][seqNo]; - } - - /** - * @notice Get the number of available Noun `heads`. - */ - function headCount() external view override returns (uint256) { - return heads.length; - } - - /** - * @notice Get the number of available Noun `heads` in the prefecture. - */ - function headCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { - return prefectureHeads[prefectureId].length; - } - - /** - * @notice Get the number of available Noun `heads` in the prefecture. - */ - function headInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { - return prefectureHeads[prefectureId][seqNo]; - } - - /** - * @notice Get the number of available Noun `glasses`. - */ - function glassesCount() external view override returns (uint256) { - return descriptor.glassesCount(); - // return glasses.length; - } - - /** - * @notice Add colors to a color palette. - * @dev This function can only be called by the owner. - */ - function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external override onlyOwner { - require(palettes[paletteIndex].length + newColors.length <= 256, 'Palettes can only hold 256 colors'); - for (uint256 i = 0; i < newColors.length; i++) { - _addColorToPalette(paletteIndex, newColors[i]); - } - } - - /** - * @notice Batch add Noun backgrounds. - * @dev This function can only be called by the owner when not locked. - */ - function addManyBackgrounds(string[] calldata _backgrounds) external override onlyOwner whenPartsNotLocked { - for (uint256 i = 0; i < _backgrounds.length; i++) { - _addBackground(_backgrounds[i]); - } - } - - /** - * @notice Batch add Noun bodies. - * @dev This function can only be called by the owner when not locked. - */ - function addManyBodies(bytes[] calldata _bodies) external override onlyOwner whenPartsNotLocked { - for (uint256 i = 0; i < _bodies.length; i++) { - _addBody(_bodies[i]); - } - } - - /** - * @notice Batch add Noun accessories. - * @dev This function can only be called by the owner when not locked. - */ - function addManyAccessories(uint256 prefectureId, bytes[] calldata _accessories) external override onlyOwner whenPartsNotLocked { - for (uint256 i = 0; i < _accessories.length; i++) { - _addAccessory(prefectureId, _accessories[i]); - } - } - - /** - * @notice Batch add Noun heads. - * @dev This function can only be called by the owner when not locked. - */ - function addManyHeads(uint256 prefectureId, bytes[] calldata _heads) external override onlyOwner whenPartsNotLocked { - for (uint256 i = 0; i < _heads.length; i++) { - _addHead(prefectureId, _heads[i]); - } - } - - /** - * @notice Batch add Noun glasses. - * @dev This function can only be called by the owner when not locked. - */ - function addManyGlasses(bytes[] calldata _glasses) external override onlyOwner whenPartsNotLocked { - for (uint256 i = 0; i < _glasses.length; i++) { - _addGlasses(_glasses[i]); - } - } - - /** - * @notice Add a single color to a color palette. - * @dev This function can only be called by the owner. - */ - function addColorToPalette(uint8 _paletteIndex, string calldata _color) external override onlyOwner { - require(palettes[_paletteIndex].length <= 255, 'Palettes can only hold 256 colors'); - _addColorToPalette(_paletteIndex, _color); - } - - /** - * @notice Add a Noun background. - * @dev This function can only be called by the owner when not locked. - */ - function addBackground(string calldata _background) external override onlyOwner whenPartsNotLocked { - _addBackground(_background); - } - - /** - * @notice Add a Noun body. - * @dev This function can only be called by the owner when not locked. - */ - function addBody(bytes calldata _body) external override onlyOwner whenPartsNotLocked { - _addBody(_body); - } - - /** - * @notice Add a Noun accessory. - * @dev This function can only be called by the owner when not locked. - */ - function addAccessory(uint256 prefectureId, bytes calldata _accessory) external override onlyOwner whenPartsNotLocked { - _addAccessory(prefectureId, _accessory); - } - - /** - * @notice Add a Noun head. - * @dev This function can only be called by the owner when not locked. - */ - function addHead(uint256 prefectureId, bytes calldata _head) external override onlyOwner whenPartsNotLocked { - _addHead(prefectureId, _head); - } - - /** - * @notice Add Noun glasses. - * @dev This function can only be called by the owner when not locked. - */ - function addGlasses(bytes calldata _glasses) external override onlyOwner whenPartsNotLocked { - _addGlasses(_glasses); - } - - /** - * @notice Lock all Noun parts. - * @dev This cannot be reversed and can only be called by the owner when not locked. - */ - function lockParts() external override onlyOwner whenPartsNotLocked { - arePartsLocked = true; - - emit PartsLocked(); - } - - /** - * @notice Toggle a boolean value which determines if `tokenURI` returns a data URI - * or an HTTP URL. - * @dev This can only be called by the owner. - */ - function toggleDataURIEnabled() external override onlyOwner { - bool enabled = !isDataURIEnabled; - - isDataURIEnabled = enabled; - emit DataURIToggled(enabled); - } - - /** - * @notice Set the base URI for all token IDs. It is automatically - * added as a prefix to the value returned in {tokenURI}, or to the - * token ID if {tokenURI} is empty. - * @dev This can only be called by the owner. - */ - function setBaseURI(string calldata _baseURI) external override onlyOwner { - baseURI = _baseURI; - - emit BaseURIUpdated(_baseURI); - } - - /** - * @notice Given a token ID and seed, construct a token URI for an official Nouns DAO noun. - * @dev The returned value may be a base64 encoded data URI or an API URL. - */ - function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory) { - if (isDataURIEnabled) { - return dataURI(tokenId, seed); - } - return string(abi.encodePacked(baseURI, tokenId.toString())); - } - - /** - * @notice Given a token ID and seed, construct a base64 encoded data URI for an official Nouns DAO noun. - */ - function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) public view override returns (string memory) { - string memory nounId = tokenId.toString(); - string memory name = string(abi.encodePacked('Noun ', nounId)); - string memory description = string(abi.encodePacked('Noun ', nounId, ' is a member of the Nouns DAO')); - - return genericDataURI(name, description, seed); - } - - /** - * @notice Given a name, description, and seed, construct a base64 encoded data URI. - */ - function genericDataURI( - string memory name, - string memory description, - INounsSeeder.Seed memory seed - ) public view override returns (string memory) { - NFTDescriptor.TokenURIParams memory params = NFTDescriptor.TokenURIParams({ - name: name, - description: description, - parts: _getPartsForSeed(seed), - background: descriptor.backgrounds(seed.background) - }); - return NFTDescriptor.constructTokenURI(params, palettes); - } - - /** - * @notice Given a seed, construct a base64 encoded SVG image. - */ - function generateSVGImage(INounsSeeder.Seed memory seed) external view override returns (string memory) { - MultiPartRLEToSVG.SVGParams memory params = MultiPartRLEToSVG.SVGParams({ - parts: _getPartsForSeed(seed), - background: descriptor.backgrounds(seed.background) - }); - return NFTDescriptor.generateSVGImage(params, palettes); - } - - /** - * @notice Add a single color to a color palette. - */ - function _addColorToPalette(uint8 _paletteIndex, string calldata _color) internal { - palettes[_paletteIndex].push(_color); - } - - /** - * @notice Add a Noun background. - */ - function _addBackground(string calldata _background) internal { - backgrounds.push(_background); - } - - /** - * @notice Add a Noun body. - */ - - function _addBody(bytes calldata _body) internal { - // nothing - // bodies.push(_body); - } - - /** - * @notice Add a Noun accessory. - */ - function _addAccessory(uint256 prefectureId, bytes calldata _accessory) internal { - prefectureAccessories[prefectureId].push(accessories.length); - accessories.push(_accessory); - } - - /** - * @notice Add a Noun head. - */ - function _addHead(uint256 prefectureId, bytes calldata _head) internal { - prefectureHeads[prefectureId].push(heads.length); - heads.push(_head); - } - - /** - * @notice Add Noun glasses. - */ - function _addGlasses(bytes calldata _glasses) internal { - // glasses.push(_glasses); - } - - /** - * @notice Get all Noun parts for the passed `seed`. - */ - function _getPartsForSeed(INounsSeeder.Seed memory seed) internal view returns (bytes[] memory) { - bytes[] memory _parts = new bytes[](4); - _parts[0] = descriptor.bodies(seed.body); - _parts[1] = accessories[seed.accessory]; - _parts[2] = heads[seed.head]; - _parts[3] = descriptor.glasses(seed.glasses); - return _parts; - } + using Strings for uint256; + + // original + INounsDescriptor public immutable descriptor; + + // prettier-ignore + // https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt + bytes32 constant COPYRIGHT_CC0_1_0_UNIVERSAL_LICENSE = 0xa2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499; + + // Whether or not new Noun parts can be added + bool public override arePartsLocked; + + // Whether or not `tokenURI` should be returned as a data URI (Default: true) + bool public override isDataURIEnabled = true; + + // Base URI + string public override baseURI; + + // Noun Color Palettes (Index => Hex Colors) + mapping(uint8 => string[]) public override palettes; + + // Noun Backgrounds (Hex Colors) + string[] public override backgrounds; + + // Noun Bodies (Custom RLE) + bytes[] public override bodies; + + // Noun Accessories (Custom RLE) + bytes[] public override accessories; + + // Noun Heads (Custom RLE) + bytes[] public override heads; + + // Noun Glasses (Custom RLE) + bytes[] public override glasses; + + // prefectureId => parts index of heads + mapping(uint256 => uint256[]) public prefectureHeads; + + // prefectureId => parts index of accessories + mapping(uint256 => uint256[]) public prefectureAccessories; + + // parts index => parts name of heads + mapping(uint256 => string) public headsName; + + // parts index => parts name of accessories + mapping(uint256 => string) public AccessoriesName; + + constructor(INounsDescriptor _descriptor) { + descriptor = _descriptor; + } + + /** + * @notice Require that the parts have not been locked. + */ + modifier whenPartsNotLocked() { + require(!arePartsLocked, 'Parts are locked'); + _; + } + + /** + * @notice Get the number of available Noun `backgrounds`. + */ + function backgroundCount() external view override returns (uint256) { + return backgrounds.length; + } + + /** + * @notice Get the number of available Noun `bodies`. + */ + function bodyCount() external view override returns (uint256) { + return descriptor.bodyCount(); + // return bodies.length; + } + + /** + * @notice Get the number of available Noun `accessories`. + */ + function accessoryCount() external view override returns (uint256) { + return accessories.length; + } + + /** + * @notice Get the number of available Noun `accessories` in the prefecture. + */ + function accessoryCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { + return prefectureAccessories[prefectureId].length; + } + + /** + * @notice Get the number of available Noun `accessories` in the prefecture. + */ + function accessoryInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { + return prefectureAccessories[prefectureId][seqNo]; + } + + /** + * @notice Get the name of accessories. + */ + function accessoryName(uint256 _partsId) external view override returns (string memory) { + return AccessoriesName[_partsId]; + } + + /** + * @notice Get the number of available Noun `heads`. + */ + function headCount() external view override returns (uint256) { + return heads.length; + } + + /** + * @notice Get the number of available Noun `heads` in the prefecture. + */ + function headCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { + return prefectureHeads[prefectureId].length; + } + + /** + * @notice Get the number of available Noun `heads` in the prefecture. + */ + function headInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { + return prefectureHeads[prefectureId][seqNo]; + } + + /** + * @notice Get the name of heads. + */ + function headName(uint256 _partsId) external view override returns (string memory) { + return headsName[_partsId]; + } + + /** + * @notice Get the number of available Noun `glasses`. + */ + function glassesCount() external view override returns (uint256) { + return descriptor.glassesCount(); + // return glasses.length; + } + + /** + * @notice Add colors to a color palette. + * @dev This function can only be called by the owner. + */ + function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external override onlyOwner { + require(palettes[paletteIndex].length + newColors.length <= 256, 'Palettes can only hold 256 colors'); + for (uint256 i = 0; i < newColors.length; i++) { + _addColorToPalette(paletteIndex, newColors[i]); + } + } + + /** + * @notice Batch add Noun backgrounds. + * @dev This function can only be called by the owner when not locked. + */ + function addManyBackgrounds(string[] calldata _backgrounds) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _backgrounds.length; i++) { + _addBackground(_backgrounds[i]); + } + } + + /** + * @notice Batch add Noun bodies. + * @dev This function can only be called by the owner when not locked. + */ + function addManyBodies(bytes[] calldata _bodies) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _bodies.length; i++) { + _addBody(_bodies[i]); + } + } + + /** + * @notice Batch add Noun accessories. + * @dev This function can only be called by the owner when not locked. + */ + function addManyAccessories( + uint256 prefectureId, + bytes[] calldata _accessories, + string[] calldata _names + ) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _accessories.length; i++) { + _addAccessory(prefectureId, _accessories[i], _names[i]); + } + } + + /** + * @notice Batch add Noun heads. + * @dev This function can only be called by the owner when not locked. + */ + function addManyHeads( + uint256 prefectureId, + bytes[] calldata _heads, + string[] calldata _names + ) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _heads.length; i++) { + _addHead(prefectureId, _heads[i], _names[i]); + } + } + + /** + * @notice Batch add Noun glasses. + * @dev This function can only be called by the owner when not locked. + */ + function addManyGlasses(bytes[] calldata _glasses) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _glasses.length; i++) { + _addGlasses(_glasses[i]); + } + } + + /** + * @notice Add a single color to a color palette. + * @dev This function can only be called by the owner. + */ + function addColorToPalette(uint8 _paletteIndex, string calldata _color) external override onlyOwner { + require(palettes[_paletteIndex].length <= 255, 'Palettes can only hold 256 colors'); + _addColorToPalette(_paletteIndex, _color); + } + + /** + * @notice Add a Noun background. + * @dev This function can only be called by the owner when not locked. + */ + function addBackground(string calldata _background) external override onlyOwner whenPartsNotLocked { + _addBackground(_background); + } + + /** + * @notice Add a Noun body. + * @dev This function can only be called by the owner when not locked. + */ + function addBody(bytes calldata _body) external override onlyOwner whenPartsNotLocked { + _addBody(_body); + } + + /** + * @notice Add a Noun accessory. + * @dev This function can only be called by the owner when not locked. + */ + function addAccessory( + uint256 prefectureId, + bytes calldata _accessory, + string calldata _name + ) external override onlyOwner whenPartsNotLocked { + _addAccessory(prefectureId, _accessory, _name); + } + + /** + * @notice Add a Noun head. + * @dev This function can only be called by the owner when not locked. + */ + function addHead( + uint256 prefectureId, + bytes calldata _head, + string calldata _name + ) external override onlyOwner whenPartsNotLocked { + _addHead(prefectureId, _head, _name); + } + + /** + * @notice Add Noun glasses. + * @dev This function can only be called by the owner when not locked. + */ + function addGlasses(bytes calldata _glasses) external override onlyOwner whenPartsNotLocked { + _addGlasses(_glasses); + } + + /** + * @notice Lock all Noun parts. + * @dev This cannot be reversed and can only be called by the owner when not locked. + */ + function lockParts() external override onlyOwner whenPartsNotLocked { + arePartsLocked = true; + + emit PartsLocked(); + } + + /** + * @notice Toggle a boolean value which determines if `tokenURI` returns a data URI + * or an HTTP URL. + * @dev This can only be called by the owner. + */ + function toggleDataURIEnabled() external override onlyOwner { + bool enabled = !isDataURIEnabled; + + isDataURIEnabled = enabled; + emit DataURIToggled(enabled); + } + + /** + * @notice Set the base URI for all token IDs. It is automatically + * added as a prefix to the value returned in {tokenURI}, or to the + * token ID if {tokenURI} is empty. + * @dev This can only be called by the owner. + */ + function setBaseURI(string calldata _baseURI) external override onlyOwner { + baseURI = _baseURI; + + emit BaseURIUpdated(_baseURI); + } + + /** + * @notice Given a token ID and seed, construct a token URI for an official Nouns DAO noun. + * @dev The returned value may be a base64 encoded data URI or an API URL. + */ + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory) { + if (isDataURIEnabled) { + return dataURI(tokenId, seed); + } + return string(abi.encodePacked(baseURI, tokenId.toString())); + } + + /** + * @notice Given a token ID and seed, construct a base64 encoded data URI for an official Nouns DAO noun. + */ + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) public view override returns (string memory) { + string memory nounId = tokenId.toString(); + string memory name = string(abi.encodePacked('Noun ', nounId)); + string memory description = string(abi.encodePacked('Noun ', nounId, ' is a member of the Nouns DAO')); + + return genericDataURI(name, description, seed); + } + + /** + * @notice Given a name, description, and seed, construct a base64 encoded data URI. + */ + function genericDataURI( + string memory name, + string memory description, + INounsSeeder.Seed memory seed + ) public view override returns (string memory) { + NFTDescriptor.TokenURIParams memory params = NFTDescriptor.TokenURIParams({ + name: name, + description: description, + parts: _getPartsForSeed(seed), + background: descriptor.backgrounds(seed.background) + }); + return NFTDescriptor.constructTokenURI(params, palettes); + } + + /** + * @notice Given a seed, construct a base64 encoded SVG image. + */ + function generateSVGImage(INounsSeeder.Seed memory seed) external view override returns (string memory) { + MultiPartRLEToSVG.SVGParams memory params = MultiPartRLEToSVG.SVGParams({ + parts: _getPartsForSeed(seed), + background: descriptor.backgrounds(seed.background) + }); + return NFTDescriptor.generateSVGImage(params, palettes); + } + + /** + * @notice Add a single color to a color palette. + */ + function _addColorToPalette(uint8 _paletteIndex, string calldata _color) internal { + palettes[_paletteIndex].push(_color); + } + + /** + * @notice Add a Noun background. + */ + function _addBackground(string calldata _background) internal { + backgrounds.push(_background); + } + + /** + * @notice Add a Noun body. + */ + + function _addBody(bytes calldata _body) internal { + // nothing + // bodies.push(_body); + } + + /** + * @notice Add a Noun accessory. + */ + function _addAccessory(uint256 prefectureId, bytes calldata _accessory, string calldata _name) internal { + prefectureAccessories[prefectureId].push(accessories.length); + AccessoriesName[accessories.length] = _name; + accessories.push(_accessory); + } + + /** + * @notice Add a Noun head. + */ + function _addHead(uint256 prefectureId, bytes calldata _head, string calldata _name) internal { + prefectureHeads[prefectureId].push(heads.length); + headsName[heads.length] = _name; + heads.push(_head); + } + + /** + * @notice Add Noun glasses. + */ + function _addGlasses(bytes calldata _glasses) internal { + // glasses.push(_glasses); + } + + /** + * @notice Get all Noun parts for the passed `seed`. + */ + function _getPartsForSeed(INounsSeeder.Seed memory seed) internal view returns (bytes[] memory) { + bytes[] memory _parts = new bytes[](4); + _parts[0] = descriptor.bodies(seed.body); + _parts[1] = accessories[seed.accessory]; + _parts[2] = heads[seed.head]; + _parts[3] = descriptor.glasses(seed.glasses); + return _parts; + } } diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index 68f32afc..69393ad6 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -148,8 +148,12 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { } function generateTraits(uint256 _assetId) external view override returns (string memory traits) { + uint256 headPartsId = seeds[_assetId].head; + uint256 accessoryPartsId = seeds[_assetId].accessory; traits = string( - abi.encodePacked('{"trait_type": "prefecture" , "value":"', prefectureName[tokenIdToPrefectureId[_assetId]], '"}') + abi.encodePacked('{"trait_type": "prefecture" , "value":"', prefectureName[tokenIdToPrefectureId[_assetId]], '"}', + ',{"trait_type": "head" , "value":"', localDescriptor.headName(headPartsId), '"}', + ',{"trait_type": "accessory" , "value":"', localDescriptor.accessoryName(accessoryPartsId), '"}') ); } diff --git a/contract/contracts/localNouns/interfaces/INounsDescriptor.sol b/contract/contracts/localNouns/interfaces/INounsDescriptor.sol index 20924c35..79a08076 100644 --- a/contract/contracts/localNouns/interfaces/INounsDescriptor.sol +++ b/contract/contracts/localNouns/interfaces/INounsDescriptor.sol @@ -53,10 +53,14 @@ interface INounsDescriptor is INounsDescriptorMinimal { function accessoryCountInPrefecture(uint256 prefectureId) external view returns (uint256); + function accessoryName(uint256 partsId) external view returns (string memory); + function headCount() external view override returns (uint256); function headCountInPrefecture(uint256 prefectureId) external view returns (uint256); + function headName(uint256 partsId) external view returns (string memory); + function glassesCount() external view override returns (uint256); function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external; @@ -65,9 +69,9 @@ interface INounsDescriptor is INounsDescriptorMinimal { function addManyBodies(bytes[] calldata bodies) external; - function addManyAccessories(uint256 prefectureId, bytes[] calldata accessories) external; + function addManyAccessories(uint256 prefectureId, bytes[] calldata accessories, string[] calldata name) external; - function addManyHeads(uint256 prefectureId, bytes[] calldata heads) external; + function addManyHeads(uint256 prefectureId, bytes[] calldata heads, string[] calldata name) external; function addManyGlasses(bytes[] calldata glasses) external; @@ -77,9 +81,9 @@ interface INounsDescriptor is INounsDescriptorMinimal { function addBody(bytes calldata body) external; - function addAccessory(uint256 prefectureId, bytes calldata accessory) external; + function addAccessory(uint256 prefectureId, bytes calldata accessory, string calldata name) external; - function addHead(uint256 prefectureId, bytes calldata head) external; + function addHead(uint256 prefectureId, bytes calldata head, string calldata name) external; function addGlasses(bytes calldata glasses) external; diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts index 872178d5..307cf715 100644 --- a/contract/scripts/populate_localNouns.ts +++ b/contract/scripts/populate_localNouns.ts @@ -21,7 +21,7 @@ const localTokenAddress = addresses.localNounsToken[network.name]; const localMinterAddress = addresses.localNounsMinter[network.name]; async function main() { - + // const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; // const wallet = new ethers.Wallet(privateKey, ethers.provider); const [wallet] = await ethers.getSigners(); // localhost @@ -43,8 +43,8 @@ async function main() { console.log(`set Accessories start`); const accessoryChunk = chunkArrayByPrefectureId(images.accessories); for (const chunk of accessoryChunk) { - const prefectureId = chunk[0].filename.split('-')[0]; - await localNounsDescriptor.addManyAccessories(prefectureId, chunk.map(({ data }) => data)); + const prefectureId = chunk[0].prefectureId; + await localNounsDescriptor.addManyAccessories(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); // console.log("chunk:", prefectureId, chunk); } console.log(`set Accessories end`); @@ -53,8 +53,8 @@ async function main() { console.log(`set Heads start`); const headChunk = chunkArrayByPrefectureId(images.heads); for (const chunk of headChunk) { - const prefectureId = chunk[0].filename.split('-')[0]; - await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data)); + const prefectureId = chunk[0].prefectureId; + await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); // console.log("chunk:", prefectureId, chunk); } console.log(`set Heads end`); @@ -88,6 +88,7 @@ main().catch(error => { }); interface ImageData { + prefectureId: string; filename: string; data: string; } @@ -102,8 +103,20 @@ function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { continue; } - let id = imagedata[i].filename.split('-')[0]; - + let filename = imagedata[i].filename.split('-'); + let id = filename[0]; + imagedata[i].prefectureId = id; + + // filenameの抽出 ex)"35-yamaguchi-white -snake-accessories" -> "white-snake" + let name = ''; + for (var j = 2; j < filename.length - 1; j++) { + if (name.length > 0) { + name += '-'; + } + name += filename[j].trim(); + } + imagedata[i].filename = name; + console.log("imagedata[i].filename", imagedata[i].filename); if (!map.has(id)) { map.set(id, []); } diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index c9199280..9d92fda5 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -11,7 +11,6 @@ const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name] const nounsSeederAddress = addresses.nounsSeeder[network.name]; const localSeederAddress = addresses.localSeeder[network.name]; - before(async () => { /* `npx hardhat node`実行後、このスクリプトを実行する前に、Nouns,LocalNounsの関連するコントラクトを * デプロイする必要があります。(一度実行すると、node停止までは再実施する必要なし) @@ -98,12 +97,19 @@ describe('mint functions', function () { const [traits4] = await provider.functions.generateTraits(4); const [traits5] = await provider.functions.generateTraits(5); const [traits6] = await provider.functions.generateTraits(6); - expect(traits1).to.equal('{"trait_type": "prefecture" , "value":"Aomori"}'); - expect(traits2).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); - expect(traits3).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); - expect(traits4).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); - expect(traits5).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); - expect(traits6).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); + // head,accessoryがランダムなので除外 + // expect(traits1).to.equal('{"trait_type": "prefecture" , "value":"Aomori"}'); + // expect(traits2).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); + // expect(traits3).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); + // expect(traits4).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); + // expect(traits5).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); + // expect(traits6).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); + console.log(traits1); + console.log(traits2); + console.log(traits3); + console.log(traits4); + console.log(traits5); + console.log(traits6); const [totalSupply] = await token.functions.totalSupply(); expect(totalSupply.toNumber()).to.equal(7); From 118652e4bfa75f09d23c94a3eda398ea1b192fcd Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Tue, 22 Aug 2023 10:07:56 +0900 Subject: [PATCH 072/146] =?UTF-8?q?mint=E3=82=92populate=E3=81=8B=E3=82=89?= =?UTF-8?q?=E5=88=86=E9=9B=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/test_localNouns.ts | 100 ++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 contract/scripts/test_localNouns.ts diff --git a/contract/scripts/test_localNouns.ts b/contract/scripts/test_localNouns.ts new file mode 100644 index 00000000..b9d9cede --- /dev/null +++ b/contract/scripts/test_localNouns.ts @@ -0,0 +1,100 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; + +import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; +import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; +import { abi as localMinterABI } from "../artifacts/contracts/localNouns/LocalNounsMinter.sol/LocalNounsMinter"; + +dotenv.config(); + + +const localSeederAddress = addresses.localSeeder[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const localProviderAddress = addresses.localProvider[network.name]; +const localTokenAddress = addresses.localNounsToken[network.name]; +const localMinterAddress = addresses.localNounsMinter[network.name]; + +async function main() { + + // const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + // const wallet = new ethers.Wallet(privateKey, ethers.provider); + const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); + const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); + const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); + + console.log("localToken:", localTokenAddress); + + for (var i: number = 1; i <= 47; i++) { + try { + await localMinter.functions['mintSelectedPrefecture(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.000001') }); + + console.log(`mint [`, i, `]`); + } catch (error) { + console.log(`mint error [`, i, `]`); + // console.error(error); + }; + } + + // console.log(`write file start`); + // const index = 0; + // const ret = await localToken.tokenURI(index); + // const json = Buffer.from(ret.split(",")[1], 'base64').toString(); + // const svgB = Buffer.from(JSON.parse(json)["image"].split(",")[1], 'base64').toString(); + // const svg = Buffer.from(svgB, 'base64').toString(); + // // fs.writeFileSync(`./svg/${index}.svg`, svg, { encoding: 'utf8' }); + // console.log(`write file end`); + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + +interface ImageData { + prefectureId: string; + filename: string; + data: string; +} + +function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { + let map = new Map(); + + for (let i = 0; i < imagedata.length; i++) { + // dataが空っぽはスキップ + if (imagedata[i].data === undefined) { + console.error("not define data:", imagedata[i].filename); + continue; + } + + let filename = imagedata[i].filename.split('-'); + let id = filename[0]; + imagedata[i].prefectureId = id; + + // filenameの抽出 ex)"35-yamaguchi-white -snake-accessories" -> "white-snake" + let name = ''; + for (var j = 2; j < filename.length - 1; j++) { + if (name.length > 0) { + name += '-'; + } + name += filename[j].trim(); + } + imagedata[i].filename = name; + console.log("imagedata[i].filename", imagedata[i].filename); + if (!map.has(id)) { + map.set(id, []); + } + map.get(id)!.push(imagedata[i]); + } + return Array.from(map.values()); +} \ No newline at end of file From b8c2c32f5d7853e682861f9eea726052d7ddc262 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Tue, 22 Aug 2023 10:30:57 +0900 Subject: [PATCH 073/146] =?UTF-8?q?head=E5=A7=8B=E3=81=BE=E3=82=8A(?= =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C)=E3=81=AF1=E6=9C=9F?= =?UTF-8?q?=E5=AF=BE=E8=B1=A1=E3=81=8B=E3=82=89=E9=99=A4=E5=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/test/image-local-data.json | 188 ---------------------------- 1 file changed, 188 deletions(-) diff --git a/contract/test/image-local-data.json b/contract/test/image-local-data.json index eaced8a0..36296273 100644 --- a/contract/test/image-local-data.json +++ b/contract/test/image-local-data.json @@ -866,10 +866,6 @@ } ], "heads": [ - { - "filename": "01-head-01-hokkaido-heads", - "data": "0x00021f1a0109000154140008000354130006000154010004541200090004541100090005541000090006540e000154090007540c000254090009540600015403000154010009000c540200025402000154020009000f540200015403000800105406000700125404000154070012540100025402000300025403001254040004000254010011540600040010540a00030010540b00020010540c000100035401000354020007540d000100025403000154040005540e00010002540a0003540e00020003540a0001540e0002000454180001000354010001541800010002541b00" - }, { "filename": "01-hokkaido-goryokaku-heads", "data": "0x00021b16040b0002540a000a00045409000900025401c001dd025408000800025401c001dd01c001dd025407000700035401dd02c001dd0254018706000500035402c001dd03c001dd0187035404000300035401c0015401c002dd03c0018702dd045402000100035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd025401000300025401c001dd02c00287029204c002dd01c00254010003000187015402c001dd03c0029203c001dd02c0025402000200015402870154018701dd08c001dd01c0025403000100015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c0025404000100025401c0025401c001dd02c004dd02c001dd01c0015404000300035401c001dd01c001dd04c001dd01c001dd01c0025403000400025401c002dd01c0045401c002dd01c0025403000400025401dd02c0065402c001dd025403000500055404000554040005000354080003540400" @@ -894,14 +890,6 @@ "filename": "02-aomori-goldfish-nebuta-heads", "data": "0x000119170409000333090008000533080007000233010101330101023307000700033301010333070005000b3305000400053301010133010105330400030002330101043301010433010102330300030003330101033303bf01330101033303000300053307bf033303000100053303bf010103bf010103bf0333010005330dbf03330233010101330fbf0233033301010fbf023301000233022301010bbf0101022301000200013302230dbf02230100040001230dbf01230200040001bf012304bf032304bf012301bf020005000123030101bf010d01b4010d01bf03010123030006000301010d0301010d030104000200010101000201010001330301012303010133010002010100010103000101010001010100013302000123010101230200013301000101010001010100030002010d0002010100050001010b0001010300" }, - { - "filename": "02-head-02-aomori-heads", - "data": "0x00021b17040d00015409000c0003540400015403000c0005540100025403000c00085403000b00055401000254040005000154010001540300045402000254040004000554020001540500025404000500045407000354040006000454020001540300035404000500055402000254020003540400050005540200035401000354040005000f54030004001054030002001254030001001354030015540200010015540100010005540100055401000a5401000154060003540300085401000e0004540100015403000e00025407000e0001540800" - }, - { - "filename": "03-head-03-iwate-heads", - "data": "0x00021717090900015404000600055403000200015401000754030002000a54020001000a54030001000b54020002000b5401000d54010001000c5401000d54010001000d5401000d540d5401000e540c54020001000c5401000c54020001000c54010001000a540300020006540600040004540600050001540800" - }, { "filename": "03-iwate-moriokamen-heads", "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" @@ -910,10 +898,6 @@ "filename": "03-iwate-nanbutekki-heads", "data": "0x00031b14060700050e09000400030e0500030e06000300010e0b00010e05000200010e0d00010e04000200010e0d00010e04000200010e0600010e0600010e04000300010e0100090e0100010e050003000d0e050002000f0e04000100110e03000100110e0100020e150e140e0100140e01000100130e01000100050e0163010e0163010e0163010e0163060e020002000f0e040003000d0e0500" }, - { - "filename": "04-head-04-miyagi-heads", - "data": "0x00031c1808060001540a00025401000500045408000254010003000954040002540100015404000754030001540100025402000500085401000454020004000d54030003000f54020004000d54030003000f54020004000d54030004000d54010001540100030008540100015403000254020003000954050001540200020009540900020008540a00020008540a00010008540b0009540b0009540b00020007540b00050003540c00060002540c00" - }, { "filename": "04-miyagi-datemasamune-heads", "data": "0x00011d150517000128150002280100120002010128030008000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e080003000528030103280192010e019207000100020e01000192010e0192020103280192010e0192010e0192010e0100020e03000100010e0100010e0192010e0b92020e0100010e03000200020e0292030e0192010e0192010e0192030e0192020e04000200030e0192020e0192020e0192020e0192020e0192020e04000300010e01920188010e0192030e0192030e0192020e019205000300010e01920c880192010e05000300010e01540c880154010e05000300012801540c8801540128050002000128010e01540788016004880154010e012804000200020e01540788016004880154020e040001000128020e01540788016004880154020e012803000100030e01540588026004880154040e03000200030e01540388042303880154030e04000400020e025406880254020e0600080006540a00" @@ -938,14 +922,6 @@ "filename": "05-akita-namahage-heads", "data": "0x00021a16040700014109000141040007000241070002410400080002410500024105000600062301000523040005000123060e0123050e0123030004000123010e0623010e0523010e0123020003000123010e0123010e0123040e0123040e0223010e0123010003000123010e0123010e022307410323010e0123010003000123010e0123010e014103230318032301410123010e0123010003000123010e0123010e034102230141022303410123010e0123010002000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e0123010001000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e0123010001000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e0123010001000123010e0123010e012301410101012301cf041801cf0123010101410123010e0123010001000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" }, - { - "filename": "05-head-05-akita-heads", - "data": "0x00031617090300055403000254040009540400095403000a5403000954010002000a540100015401000a5401000d5403000854020004000854010004000754020004000754020004000754020004000654030003000754030003000754030002000954020002000a540100040007540200050007540100070003540300" - }, - { - "filename": "06-head-06-yamagata-heads", - "data": "0x000318180a05000254070005000454050004000754030004000854020004000954010003000b5402000c5401000d5401000c5401000e5402000c5402000c5404000954010004000854020004000854020002000a540200020009540300020008540400020007540500020007540500030006540500060003540500" - }, { "filename": "06-yamagata-hanagasa-heads", "data": "0x00021b170508000641080006000241065702410600040002410a5702410400030001410a5701320141025701410300020001410157013201410132025701c603570132024101320257014102000200014101570441025701dd025703410132014101570141020001000141015701320341025701dd045701410132014103570141010001000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd085701410141035701c6035702dd0341085701410141075701dd024101320241035701410132025701410141035701410357024101320141013201410257044101570141014102570132024102570332024101320141015702410132014101570141014102570141013201410132025702410232014102570132024101320157014101000141015701320241013203570341015701280257023201570141010001000141025701410132075701280123012804570141010002000141035701c6075701280123012802570141020002000141065701320341013201570128012301280157014102000300014105570141013201410132035701280157014103000400024104570141013204570241040006000241065702410600080006410800" @@ -970,14 +946,6 @@ "filename": "07-fukushima-tsurugacastle-heads", "data": "0x00011a140309000162050001620700080001620700016206000900078907000900078907000800098906000900020103080201070007000b89050006000d89040007000201017f0108010101890101017f0108020105000600068901010689040005000689010101a301010689030006000101017f010107890101017f01010400050005890201017f0201058903000300019406890501068901940100020002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" }, - { - "filename": "07-head-07-fukushima-heads", - "data": "0x00051b17030e00035407000e0006540200015401000800035403000654020002540700055402000a5406001254050013540500135403001554185401001754010017541854020016540200075402000d540100065406000a540100010003540a00095401000e00095401000f000354010002540300100001540700" - }, - { - "filename": "08-head-08-ibaraki-heads", - "data": "0x0003191807090001540300015404000900025401000554010009000754020009000754020008000854020008000754030008000754030008000654040008000654040007000754040004000a54040002000b54050002000b5405000e5404000e54040002000c54040003000c54030003000c54030004000c5402000700045403000254020010000154010011000154" - }, { "filename": "08-ibaraki-anglerfish-heads", "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" @@ -990,10 +958,6 @@ "filename": "08-ibaraki-rocket-heads", "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a26010101000500057f0b2601000400057f0b2602000300057f0b26030002000155047f0b260400024201000155027f020109260500040001550100030107260600030001420100020d0301032601290126017f060002000142010001730100020d03010326017f0700050001420100010d0100027f0201017f08000600017301000155027f0101017f0900030001730200024201000155027f0a000a0001550b00" }, - { - "filename": "09-head-09-tochigi-heads", - "data": "0x000418160709000454040007000854020005000b54010003000d54010002000e54010001000f54010002000e54010001000f54010001001054105401001054010003000d54010002000e54010002000e54010002000d54020001000e54020002000954010001540400030006540800060003540800" - }, { "filename": "09-tochigi-sanzaru-heads", "data": "0x00041e1401050003340500043404000434040003000634030006340200063403000300023401af013401af02340100023401af013401af063401af013401af013403000200013401b805af033405af043405af013402000200013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af01340200020002b805af01b8023404af01b801af01340135013405b803000300023401af020e01af01b8023401af04b80135033402b8010e02b8013402000200033403af0434013504b801340135033402af04340100010001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af013403000100063402af0100023405af0135033403af01340400010003340235013401af0234020005af0135043401af013405000200013401350734010005af053401350234040002000b3403af013506340135023403000100063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" @@ -1018,14 +982,6 @@ "filename": "10-gunma-takasakidaruma-heads", "data": "0x00061a1607050009410500030002410101014102010741030002000f41020001000141016001410123020102230101022302010123014101e601410100010001e6022301010423010104230101022301e60100014101e60123020103a70101010e010103a7020101230141016001e60160020101a7030101a7010101a7030101a7020101e6016001e60160020101a7030101a7010101a7030101a7020101e6014101e60141020101a7030101a7010101a7030101a7020101e60160014101600223010103a7030103a701010223014101e602410123030101a1010101a1010101a1010101a1030101230241010001410123010e040102410501010e012301410100010002410223010e0123014102010141010e0123010e02230241010002000341010e0123010e0301010e0123010e034102000300014101600141016001410260024101600141016001410300040001e6014101e6024101e6024101e6014101e60400060001e6014101e6014101e6014101e60600" }, - { - "filename": "10-head-10-gunma-heads", - "data": "0x00021c17060c00015409000a00035409000a000454080009000854050009000754060007000a54050005000b54060002000e54060001000f5406000100105405001254040011540500115405000100025401000d54050004000c54060004000e5404000300095401000754020004000754070003540100030008540a000154040005540d00040003540f00040002541000" - }, - { - "filename": "11-head-11-saitama-heads", - "data": "0x00071c1403080002540f00080005540c000700095401000254060007000e54040005001154030003001354030001001654020017540200185401001854010001000554010012540300025405000f540d000c540e000254020002540500" - }, { "filename": "11-saitama-tokinokane-heads", "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" @@ -1046,14 +1002,6 @@ "filename": "12-chiba-soysauce-heads", "data": "0x000317140b010008b40300020006b4020001850100020006b404000200066f030001850200016f0101046f04000200016f0101046f04000100016f01b8010104b8016f03000100016f010105b8016f0300026f06b8026f0200026f06b8026f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f02b803ea03b8016f0200016f08b8016f02000a6f0200" }, - { - "filename": "12-head-12-chiba-heads", - "data": "0x000219170801541000010001540f00010002540e000200035404000354050002000c54030001000e5402000100105402000b540400020001540100085405000500065406000400065407000300075407000200085407000100095407000a540700020008540700010009540700010008540800010004540c00020002540d0004540d00010002540e00" - }, - { - "filename": "13-head-13-tokyo-heads", - "data": "0x00091c140301000254160007541200010009540f0001000a540300025402000654010002001654010003001654040015540600135407000f54010001540100080006540300055403000c0003540400045402000d000154070002540200" - }, { "filename": "13-tokyo-station-heads", "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" @@ -1062,10 +1010,6 @@ "filename": "13-tokyo-tower-heads", "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" }, - { - "filename": "14-head-14-kanagawa-heads", - "data": "0x00041d160306000254120007000254110007000354060004540600070007540300055404000600095402000754020006000a54010009540400155401000200145404000100165403001654040002001454040002001454040003000c5401000654040003000754090004540300020006540c0005540100020005540d0004540200020005540e0004540100030005540c000254040004000254010001540d0002540300" - }, { "filename": "14-ibaraki-anglerfish-heads", "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" @@ -1078,10 +1022,6 @@ "filename": "14-kanagawa-king-heads", "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" }, - { - "filename": "15-head-15-niigata-heads", - "data": "0x00021b170413000254020013000254020009000154090004540800015409000554070002540900035402000700035407000454020008000254050006540200070002540400095401000c00095402000c00095402000c00085403000b00095403000a000854050009000754070008000954060007000954070004000d54060002000f540600085402000554010001540600010002540100035403000454090001000154090002540a000b0001540b00" - }, { "filename": "15-niigata-sasadango-heads", "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" @@ -1090,10 +1030,6 @@ "filename": "15-niigata-tulip-heads", "data": "0x00041a1506090002b90900080004b90800010002b9040006b9040002b9010004b9030006b9030004b905b9010008b9010005b914b914b914b914b914b914b914b9010012b90100010012b90100020010b90200020009b9016a06b90200040006b9016a05b90400060008b90600" }, - { - "filename": "16-head-16-toyama-heads", - "data": "0x00051b17050300045409000454020002000454090006540100020003540a00065401000100055408000854010007540600085401001554165401001554165401001554010014540100010014540100010013540200145402000b54010001540100065402000854080003540300010006540f0001000154030002540f00050001541000" - }, { "filename": "16-toyama-blackramen-heads", "data": "0x00041b150508000633080006000a33060004000e3304000300053306850533030002000433038502d3058504330200010003330385018803d303e4048503330100010002330285018803d302010222010103e402850233010003330285018802d3070103e40185033302330285018803d3082202e40285023302330285018802d3092203e4018502330233028503d3080104e4018502330333018504d3062204e40185033301000233028504d3040104e4028502330100010003330185018805d3078503330100020003330185018803d3028503e402850333020003000333048503e40385033303000400043306850433040006000a330600" @@ -1106,10 +1042,6 @@ "filename": "16-toyama-raicho-heads", "data": "0x00031d15021200047f05001100077f03001100047f020e017f010e02000600010f0a00077f020e0100050001dd010f01dd0800077f0400050001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f04000100010e017f0200010f01dd017e107f03000100017f020e157f02000200177f02000200177f02000300167f02000300157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e0300010002dd017e010f0300027f0400027f0500010f017e02dd02000300010f037e0100027f010e0300027f010e0300027e010f0400" }, - { - "filename": "17-head-17-ishikawa-heads", - "data": "0x00031517080a0003540700055401000600065401000600045403000500035405000500035401000154030006000454030006000454030007000154050006000254050006000154060005000354050005000254060004000454050003000454060002000554060001000754050007540600010007540500020005540600050002540600" - }, { "filename": "17-ishikawa-curry-heads", "data": "0x00071c1504060001010172020108720600040003720ab8037204000300027201b80225013403250234022502b8022201720300020002720325013401250134012502340125013402250422017202000100027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b80172017201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b80172027201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b802720100020003720fb8027202000300037204b8036406b8027203000500037208b80372050007000a720700" @@ -1134,14 +1066,6 @@ "filename": "18-fukui-tojinbo-heads", "data": "0x00051c15050d00037407000800037402000374027205000500037203740272037402720274030005000372037402720374027202740300030002740372037402720374027202740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372039902720374020502740300030002990372039902720374020502740300030002990305039902720374020502990300030002990305039902720399020502990300030002990305039902720399020502990272010003000299030503990205039902050299027201000100027702990305030c02050399020502990272017703000299030503990205039902050299027701000177010013770200" }, - { - "filename": "18-head-18-fukui-heads", - "data": "0x00041a18020c0001540b000b0003540a000c00035409000b0005540100025405000a000a5404000a000d54010009000d54020009000d5402000a000d5401000a000e540b000d540c00035401000254060009000154010004540900090001540100015401000254090006000154020003540c00070005540c000100015401000154010006540d00025401000554010001540e0008541000010007541000020004541200" - }, - { - "filename": "19-head-19-yamanashi-heads", - "data": "0x00051a1806040002540e00030003540e00010001540100065401000354070001000f5404001054040001001054030012540200145401001254010001001354020012540200115401000100105403000200055401000754050001000654030005540500010006540d00030003540e00040002540e00040003540d00050002540d00" - }, { "filename": "19-yamanashi-shingen-heads", "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" @@ -1150,10 +1074,6 @@ "filename": "19-yamanashi-wine-heads", "data": "0x0001161409050003e705000500035b0500050003e70500050003e705000500037905000200011b082202000100011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" }, - { - "filename": "20-head-20-nagano-heads", - "data": "0x000319170b0b000254010006000154020005540500095405000754020005000754020004000754030003000854030003000a54010003000954020002000b54010002000a54020003000a5401000200085401000354095404000154010008540500020006540600020007540500030005540600030005540600020006540600020004540800" - }, { "filename": "20-nagano-matumotocastle-heads", "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" @@ -1178,14 +1098,6 @@ "filename": "21-gifu-ukai-heads", "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f5407000300105407000300105407000200115407000200045401920c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c020101f406000100030c0601010c07a6010101f406000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" }, - { - "filename": "21-head-21-gifu-heads", - "data": "0x00031817060c0001540100025402000b000754070002540100085407000a54010007000a54010006000a54020006000b54010006000a5402000700085403000800065404000100025401000b54030001000f5402001054020001001054010002001054020010540300055402000754010003000454040006540100020004540600015401000254020002000154010002540c00050001540c00" - }, - { - "filename": "22-head-22-shizuoka-heads", - "data": "0x00031d14050a0001540d00090002540d000a0001540d00090002540400015408000a000154040003540200035401000800035401000154020008540100060007540200075402000500095401000754020005000c540200055404000c5404000354010003000c540600035403000d5402000554010002000c54040006540c54070005540d540500055401000c5407000454010004000254020003540700045402000a000154080002540300" - }, { "filename": "22-shizuoka-oden-heads", "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" @@ -1198,14 +1110,6 @@ "filename": "23-aichi-tenmusu-heads", "data": "0x00011b1406090001ce010001ce0900090003ce0900090003ce0900090003e70900070001bc05e701bc0700060001bc010105e7010101bc0600050001bc010107e7010101bc0500050001bc020101e7030101e7020101bc0500040003bc070103bc0400040005bc030105bc0400030007bc010107bc030003000fbc0300020010bc0300020011bc0200020011bc0200020011bc0200010013bc0100010007bc010101bc010101bc010107bc010015bc15bc" }, - { - "filename": "23-head-23-aichi-heads", - "data": "0x00041c170505000154110001000154010004541000010007540f0001000854020002540300015406000e54010002540200025402001754175401001554010001000354010011540100020001540100115402000400105403000300115403000300035401000d540300020001540100015401000d5404000400015402000a540600030002540500015402000354070004000254060001540100025407000b000554070007000154010005540900060005540c00" - }, - { - "filename": "24-head-24-mie-heads", - "data": "0x000318170b06000254050007000254040007000354030006000354040005000454040002000654050001000654060002000554060002000754040002000854030004000854010002000b540200075401000254010003000554050002000354080002000254090003000254080001000354090003540a0002540b00010001540b00" - }, { "filename": "24-mie-jingu-heads", "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" @@ -1214,10 +1118,6 @@ "filename": "24-mie-ninja-heads", "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" }, - { - "filename": "25-head-25-shiga-heads", - "data": "0x000316160807000254050007000354040006000554030003000154010007540200030003540100015401000354020003000354030004540100010004540500035401000654040003540100010005540300035402000100045403000454020001000354020007540100010003540300075402000154020009540100025401000a540100025401000954010001000c54010002000a540200020009540300040003540700050002540700" - }, { "filename": "25-shiga-blackbass-heads", "data": "0x00021d18021700018d0100018d01001700038d01001600058d1700048d0a00016b0c00038d01000900036b010003c50157012303c50100038d02000800036b02c5011e02c5025702c50100028d04000500026b0100016b02c5031e06c50100038d03000500036b01c5041e01c5011e05c5028d05000400036b01c5031e01c5041e02c5010101c5030104000400026b01c5031e01c5031e0101016b060105000400016b01c5061e0201016b0201011e03010600050001c5031e01c5011e0201016b0201031e02010600050001c5041e0201016b0201031e02010700050001c5021e01c50201016b0701011e0700040001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010e000100066b0300031e0e000300046b0300021e0f000300046b14000400036b1400" @@ -1226,10 +1126,6 @@ "filename": "25-shiga-hikonecastle-heads", "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" }, - { - "filename": "26-head-26-kyoto-heads", - "data": "0x0005171507030003540a000154010004540a0005540b0006540100025407000300045401000154070003000654070001000a54050002000b54030003000154010008540300050008540300080005540300080005540300070007540200090001540100035402000b00045401000c0004540c00025401000154" - }, { "filename": "26-kyoto-kinkaku-heads", "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" @@ -1238,10 +1134,6 @@ "filename": "26-kyoto-kiyomizu-heads", "data": "0x00061a14051584010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100" }, - { - "filename": "27-head-27-osaka-heads", - "data": "0x000616150b05000254010001540200060004540100060005540600055406000554060005540500065405000554010006000454010006000354020005000554010005000654020001540100075403000754010001000554050003540800" - }, { "filename": "27-osaka-takoyaki-heads", "data": "0x00021e15020b0001af010001af020001af027d0900090001af027d01af0100017d01af010002af09000600017d010001af017d03af017d01af020b017d010003af060003000157020001af017d02af017d01af020b01af0134017d013401af027d0700040001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0600050001570100010b02af01dd01af013402af017d0134010b03af010001af05000600015701af023401af010b02af010b023402af020b01dd01af050006000134010b02af010b0234010b0234020b0111010b0234010b050005000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f0100050001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f010005000334010b0134020b0b60050005000234020b0134010b01110260039303600393050005000134010b0234010b013401110b6005000600040b0111046002930560060006000134010b0234011101930134019305600293016006000200037f0200023402110160053404600700017f0300017f0300013401110260013403600293026008000100037f03000234011101930134076009000b00036003930b00" @@ -1250,10 +1142,6 @@ "filename": "27-osaka-tower-heads", "data": "0x000216150b05000195050004000395040002000195063c020003000195043c0300040003c604000100016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f01000300019501c6019501c6019503000300019501c6019501c6019503000300019501c6019501c6019503000200029501c6019501c6029502000200029501c6019501c6029502000200029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f010001000195016f019503000195016f019501000100016f019505000195016f010001000195070001950100" }, - { - "filename": "28-head-28-hyogo-heads", - "data": "0x0004181d07040005540800020007540800030007540100015405000300095405000300095405000400065407000400065407000400085401000154030002000c54030003000e5402000f5401000f5401001054010011541154010010540100025405000754010001540a000454030011000a0001540600090001540700080002540700070003540700060005540600070003540700070001540900" - }, { "filename": "28-hyogo-himejicastle-heads", "data": "0x00021a15010b00017f0700017f05000c0007e006000c0001e0019d01e0019d01e0019d01e006000b0002e0019d0301019d02e005000c00070106000c00010101920101019d01010192010106000800017f020001e0019d01e0019d0101019d01e0019d01e00200017f0200090001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e003000700017f02000101029d01010192010101920101029d01010200017f01000800017f01e0019d0201019d03e0019d0201019d01e0017f02000300017f040002e005010192050102e0020003e00500017f01e0010101920101019201e0010101e00192010101920101027f020001e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d01000192010101920300037f040105920501020001e0019d01e0019d01e00100037f010101920101079201010192020102000101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d019d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f01000192010101920101019201010192100102000401019d01e0019d01e0012b0250012b0350012b0250012b0350012b0200012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" @@ -1262,10 +1150,6 @@ "filename": "28-hyogo-tajimaushi-heads", "data": "0x0004191504010002b50f0002b5010002b5110002b502b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b01000300010b0d0d010b0300150d150d150d0100130d01000300100d020004000c0d05000400060d0ab501000400050d0bb501000400050d05b5020d01b5020d01b501000400050d0bb501000400050d02b5070d02b5010009000ab50200" }, - { - "filename": "29-head-29-nara-heads", - "data": "0x000316140b02000154080002000254010002540100015402000200075402000100075403000100075403000200085401000200095401000854020001000854020002000754020003000654020001000854020001000854020008540300095402000100065404000100055405000100015401000154010001540500" - }, { "filename": "29-nara-ashura-heads", "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" @@ -1274,10 +1158,6 @@ "filename": "29-nara-deer-heads", "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" }, - { - "filename": "30-head-30-wakayama-heads", - "data": "0x0004161606080002540600015402000754060001000a5405000200085406000100085407000100085407000200065408000100085407000a54060009540700020007540100015401000154030003000a54030005000954020006000954010005000b54060009540100070009540900055402000c0001540300" - }, { "filename": "30-wakayama-danjogarandaito-heads", "data": "0x00011914080800019508000800012108000800019508000800012108000700012701e301270700060001e3012701e3012701e30600040001e3012701e3012701e3012701e3012701e30400020001e3012701e3012701e3012701e3012701e3012701e3012701e3020002000db40200050001b4010101b4010101b4010101b40500050007b405000500012801dd01b401dd01b401dd012805000400090104000100012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b40300030001b401dd01b401dd01b401dd01b401dd01b401dd01b4030003000bb40300030001b4010101b4010e01b4010e01b4010e01b4010101b403000100047f07e0047f0100" @@ -1286,18 +1166,6 @@ "filename": "30-wakayama-nachifall-heads", "data": "0x000216150a0100036102e001610101046101610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e00301026202000400010101e0010101e004000400020101e001010400040001e0030104000500010101e001010400050001e0020104000500030104000500020101e00400050001e0010101e004000500010101e001010400050003010400050003010400050003010400030001010100016201010162010102000101050001010162020103000500020101000101010001010100020001010100010101000101010001010300" }, - { - "filename": "31-head-31-tottori-heads", - "data": "0x00091c13061200025402000100015404000254040002540200045402000200015401001054020003001254010002001354010002000554010004540200085402000554030001540400075406540a00035401000254010005540a00015405000454120002541400" - }, - { - "filename": "32-head-32-shimane-heads", - "data": "0x000319190710000254100002540e000154030012001200120012000e00035401000b00055402000a00075401000b0006540100090008540100080007540300070008540300050007540600040006540800030008540700020004540c0005540d00010004540d0004540e00010003540e00010002540f00" - }, - { - "filename": "33-head-33-okayama-heads", - "data": "0x00031b1606050002540400025408000500045401000554060004000c540400015404000c540100035401000200125401000100125402001354020001001154030012540300125403001254030001001154030001001254020001001054040001001154030002000f54040002000a5402000254050003000b5407000300035402000554080004000154040001540b00" - }, { "filename": "33-okayama-denim01-heads", "data": "0x00061815090a54042b01540799010c0299042b01990754019907540154059901540199015405990154015401f5035401f501540199015401f5035401f501540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" @@ -1334,10 +1202,6 @@ "filename": "33-okayama-pheasant-heads", "data": "0x0003191506019212000292110005920a540400010002920d54030002000f540200020002540601016a05010154020002000701036a0501020002000701010f016a010f05010200020002010cb901010200020001540eb90200020001540eb90200020001540eb90200020001540eb90200020001540eb902000200025407b9036d03b9020003000754096d03000854086d03000e540100016d03000e1d0200" }, - { - "filename": "34-head-34-hiroshima-heads", - "data": "0x00041c19020f000254010001540100035403000f00095402000e000a5402000d000b5402000c000c5402000d000b54020004000154010001540100015401000f540100020017540100030015540200020017540100020017540100010019541a54010019540100155401000354010005540100025401000954010002540200015401000200035404000a540200015401000154020002000254010001540300055405000354040003000154060002540300025409000a000154010002540c00090001541000080002541000" - }, { "filename": "34-hiroshima-manju-choco-heads", "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad02880385028802ad0400010005ad01880585028804ad0100010001ad05880585058801ad0100010001ad01880d85018801ad0100010001ad02880b85028801ad0100020001ad01880b85018801ad0200020001ad02880985028801ad0200020001ad01880b85018801ad0200010002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad0100020002ad02880785028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" @@ -1366,10 +1230,6 @@ "filename": "34-hiroshima-shrine01-heads", "data": "0x00051c15050277130002770100157701000200131a020002001341020004000441020003230200044104000500021a03000123019301230300021a0500040004410200032302000441040002001341020002001341020005000241090002410500040003b3090003b30400050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b305000400018d01b30141038d0306038d014101b305000400078d0106068d0500" }, - { - "filename": "35-head-35-yamaguchi-heads", - "data": "0x00051e17030d0001540d000c0002540d000b0003540d00090004540e000a0004540600015406000100035401000254020007540300025406000300015401000154010008540500015406000f540200015401000254060001001554050017540400010017540300010017540300175404000e54020008540300010002540100045401000154010001540300015401000654040001000154030002540b00045401000254010001540154130002540100015401000154010015000154050014000154020001540300" - }, { "filename": "35-yamaguchi-anglerfish-heads", "data": "0x00091f15020c0005830c000900048301660683090008000a830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" @@ -1390,10 +1250,6 @@ "filename": "35-yamagudhi-footballfish-heads", "data": "0x00031f15020900023402eb100008000134040001eb01da0e0007000134050001da015d01da0d0007000134040001da015d0101015d01da0c0008000134040001da015d01da0d000900023401eb020001da0e000c0002eb03830c0009000483016601eb0583090008000683013403830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" }, - { - "filename": "36-head-36-tokushima-heads", - "data": "0x00031b15031500015402001200035403001100055402000b0005540100055402000400035402000c54030003001254030002001254040001001554020001001654010001001654010016540200020016540500025402000d54020009000b54040009000a5405000c00065406000c00045408000b00055408000c0003540900" - }, { "filename": "36-tokushima-awa-odori01-heads", "data": "0x000118140d010002f80800010004f8030001f90200010006f8010001f90200010007f801060200020005f80106020001f90200012303f90106030001f9030003f9030001010100010003010267030102000401026701010400030103670500039e0367050002e2019e0367050004e2014f060002e2044f05000200044f050001000144044f050001000344014f06000300010107000200010108000200012301440700" @@ -1406,10 +1262,6 @@ "filename": "36-tokusima-whirlpools-heads", "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" }, - { - "filename": "37-head-37-kagawa-heads", - "data": "0x00041c15041200045402001000055403000d0001540200055403001200015401000154030018000400015404000254010001540100025408000800085401000154060007000c54050005000e5405000154010001540100115403000100165401000200165402000f540500025402000d54090002000554030002540c00020003541300010003541400020001541500" - }, { "filename": "37-kagawa-bonsai-heads", "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" @@ -1446,14 +1298,6 @@ "filename": "38-ehime-taimeshi-heads", "data": "0x00041a16060600082306000300030f0848022304000200050f01e90182020101e9015f01010248012303000100060f02e9018202e90182010101e901010148012302000100030f0282015f02e9015f02e9015f02e9015f01010148012301000100020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f02010148012301230148030f03e9044202e9028202e901480123012301480201025f0182044201010142015f04e90148012301230148015f028202e9044201e4014204e9015f0148012301230148018203e9015f064202e9015f01820101014801230123014803e9015f018201e9044201e9015f02820201014801230123014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e901010148012301000100012301480101018201e90101015f03e90182015f018202e9010101480123010002000123014803010182015f03e901010282010101480123020003000123024802010182015f02e9020102480123030004000223084802230400060008230600" }, - { - "filename": "38-head-38-ehime-heads", - "data": "0x00021b1a020f00015409000f00015409001000015408000e0001540a000d00035409000900015402000454080001540c00055402000354010002540b000e540a000f540a00095406000a000754080009000854080007000954090006000a54090005000b5409000300025401000a54090001000254030006540d000154040008540c00070007540b00080004540d00060005540e0007000254010001540e00060004540f0005000154010003540f0007000154010001540f00" - }, - { - "filename": "39-head-39-kochi-heads", - "data": "0x00041a15030d0002540400015403000900085401000254030008000c54030007000e54020007000e54020006000854020007540300095406000454010004000754080003540100050005540a0002540100040006540b000154010001000154010006540e00020006540f00020006540f0002000454110003000454100002000454110001000154010001540100015411000154050001541000" - }, { "filename": "39-kochi-bonito-heads", "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" @@ -1466,14 +1310,6 @@ "filename": "40-fukuoka-tenmangu-heads", "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" }, - { - "filename": "40-head-40-fukuoka-heads", - "data": "0x00021b18051200015403000b00045402000154040009000954040007000a54050008000a54040008000a5404000500015401000c5403000300015402000d5403000200035402000f54010014540100020014541154050004000c5406000600015402000754060009000654070008000854060007000954060006000954070005000b5406000500075401000354060006000454040002540600070002540d00070002540d00" - }, - { - "filename": "41-head-41-saga-heads", - "data": "0x00031c19040300015414000200045412000200045412000300045406000354080001000154020003540100095407000200115403000254040010540100035403001554030015540100015401001354020002540100135402001454040001001254050001001254050002000d5401000254060004000a5403000154060006000554010001540b00050007540c00060006540c00070006540b00080006540a00090005540a000c0002540a00" - }, { "filename": "41-saga-mudskipper-fiddlercrab-heads", "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" @@ -1482,10 +1318,6 @@ "filename": "41-saga-yoshinogari-heads", "data": "0x0002181409030001d8010001d8010001d8010001d8010001d80300040007d80400030009c9030002000bd8020001000dc9010002000b99020001000d9901000f99010001bb050001bb050001bb010001de01bb050001bb050001bb01de0fde01de01bb050001bb050001bb01de0fde010001bb050001bb050001bb0100010001bb050001bb050001bb0100010001bb050001bb050001bb010001000dbb0100010001bb050001bb050001bb0100010001bb050001bb050001bb0100" }, - { - "filename": "42-head-42-nagasaki-heads", - "data": "0x00011a1908080001540900070002540900070002540900070001540a00070001540a00060001540b00060001540b00120012000b00015406000b0001540600120012000900015408001200080004540600050001540200015401000254060008000154020002540500050001540400015401000254040004000354040001540100025403000400025404000254020002540200030001540100015405000754010002540a000154020002540100035408000254010002540100015401000154080001540600" - }, { "filename": "42-nagasaki-champon-heads", "data": "0x00071a1406060008e00600040003e0065703e00400020003e00257066d025703e00200010002e00157032d01d4014e02eb0166012d026d025702e0010002e00257036602eb02d40166012d014e02d4025702e001e00257014e05d4014e01970166012d02d4026d025701e001e00157016d024e01d402eb02d4019702d402eb014e0297015701e001e0015702eb0266039703660197024e032d015701e002e00157032d02d401eb032d019701eb01d4036602e0010002e0016d01eb024e05d4019701eb014e036d01e001000100016f03e0015702d401b3016d02eb016d025703e0016f01000200026f03e0015701cd01b301cd025703e0026f02000300036f08e0036f030004000c6f0400" @@ -1498,10 +1330,6 @@ "filename": "42-nagasaki-saseboburger-heads", "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" }, - { - "filename": "43-head-43-kumamoto-heads", - "data": "0x00031816040e00035403000a0002540300035402000800065401000354020007000c54010007000c54010008000b54010009000b5409000a5401000a000854020007000a540300060001540300075403000154010001540600075404000100025402000354010006540500035401000354020006540500035403000154010009540300010002540100015402000a5403000254050009540400010001540100015402000b54030003000154020003540100065404000a0004540600" - }, { "filename": "43-kumamoto-karashirenkon-heads", "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" @@ -1510,10 +1338,6 @@ "filename": "43-kumamoto-kumamotocastle-heads", "data": "0x00021d15020800019d12000700019d0101019d11000600059d10000600050e1000040002c80206019d020602c80e00040002c8029d0101029d02c80e00030002c8029d0323029d02c80d0003000501019d05010800019d04000300010e0223010e019d0101019d010e0223010e0700019d0101019d0300020001c8036f019d0323019d036f01c8060003060300020001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c802000100019d0101019d0c01026f020101c80192019d019202c8010001000392010e0623010e0223020e029201230192019d0301019d01010100010003920c0e0492052301920100059d0100010101000101010001010100010101fa010101fa0a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" }, - { - "filename": "44-head-44-oita-heads", - "data": "0x00041915040b0003540700060002540200055406000600095406000200025401000a54060001000c5401000154060001000a540100015408000b540a0001000a54020001540100035403001154040010540100015403000100025402000c5404000100035402000e5401000200025402000c54030007000c540100015407000d54010007000c54020008000254010004540200035401000b000254040001540300" - }, { "filename": "44-oita-beppujigoku-heads", "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" @@ -1522,10 +1346,6 @@ "filename": "44-oita-usajingu-heads", "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" }, - { - "filename": "45-head-45-miyazaki-heads", - "data": "0x0004161708070001540100015402000254060008540500085401000500075402000400095401000400085402000500075402000400075403000500065403000400075403000a540400010009540400020008540400030007540400030008540300050005540400050005540400070002540500060003540500080001540500" - }, { "filename": "45-miyazaki-aoshima-heads", "data": "0x00061d14030500109205000600027f0192047f0192047f0192017f0600080001bf040001bf040001bf0700010001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf0700010004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf01920600030005e102bf080002bf0600030003e1011b019202bf010006af019202bf0600020002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d60100010001e1011b02e1019d01e1019209af019201af01990221039901000100011b03e1019d0caf01d6026001d6016001d60200" @@ -1534,10 +1354,6 @@ "filename": "45-miyazaki-chickennanban-heads", "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" }, - { - "filename": "46-head-46-kagoshima-heads", - "data": "0x0003181f03070001540100015402000254070007000754070006000a54050007000954050007000a5404000200015403000b54040007000b54030001000154060005540200045402000154080003540300065409000354010008540900025403000754080003540400055401000600065403000454020007000554040004540100070006540300045401000c0001540200045402000f00035403000e0002540500150015001500030001540f0001540100130001540100120002540100120002540100120001540200060002540300015405000254020009000154010002540400025402000a0004540700" - }, { "filename": "46-kagoshima-goromon-heads", "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" @@ -1546,10 +1362,6 @@ "filename": "46-kagoshima-shirokuma-heads", "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" }, - { - "filename": "47-head-47-okinawa-heads", - "data": "0x00011c15050f00015407000e000154070001541700170017001300015403001300025402001200035402000b0001540500045402000d00025402000354030001540c00075403000e00045405000d00035407000b00045408000a0002540b000a0003540a000b0003540900090003540b0003000154040003540c00090003540b00090002540c00" - }, { "filename": "47-okinawa-goya-chanpuru-heads", "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" From 46bc22ceddbb6d270f54e7c2a6a8063f8c728caf Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Tue, 22 Aug 2023 21:29:17 +0900 Subject: [PATCH 074/146] =?UTF-8?q?head=20partsId=E3=81=AE3=E6=A1=81?= =?UTF-8?q?=E7=9B=AE=E4=BB=A5=E4=B8=8A=E3=82=92=E3=83=90=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=81=A8=E3=81=97=E3=81=A6=E6=89=B1=E3=81=86?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/localNouns/LocalNounsProvider.sol | 2 +- contract/contracts/localNouns/LocalNounsSeeder.sol | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index 69393ad6..cc01cf30 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -159,7 +159,7 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256) { seeds[_assetId] = generateSeed(prefectureId, _assetId); - tokenIdToPrefectureId[_assetId] = prefectureId; + tokenIdToPrefectureId[_assetId] = prefectureId % 100; // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 nextTokenId++; return _assetId; diff --git a/contract/contracts/localNouns/LocalNounsSeeder.sol b/contract/contracts/localNouns/LocalNounsSeeder.sol index 5885601f..cd7a847a 100644 --- a/contract/contracts/localNouns/LocalNounsSeeder.sol +++ b/contract/contracts/localNouns/LocalNounsSeeder.sol @@ -29,10 +29,10 @@ contract LocalNounsSeeder is ILocalNounsSeeder { keccak256(abi.encodePacked(blockhash(block.number - 1), nounId)) ); - uint256 accessoryCount = descriptor.accessoryCountInPrefecture(prefectureId); + uint256 accessoryCount = descriptor.accessoryCountInPrefecture(prefectureId % 100); // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 uint256 headCount = descriptor.headCountInPrefecture(prefectureId); - uint256 accesoryPartId = descriptor.accessoryInPrefecture(prefectureId, (pseudorandomness >> 96) % accessoryCount); + uint256 accesoryPartId = descriptor.accessoryInPrefecture(prefectureId % 100, (pseudorandomness >> 96) % accessoryCount); uint256 headPartId = descriptor.headInPrefecture(prefectureId, (pseudorandomness >> 144) % headCount); return Seed({ From be0abd19d0cf36c4d09beafa4deb7ddc93447595 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Tue, 22 Aug 2023 21:29:57 +0900 Subject: [PATCH 075/146] =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C?= =?UTF-8?q?=E5=9C=B0=E5=9B=B3=E3=81=AEhead=E3=82=92=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=83=A7=E3=83=B3=EF=BC=91=E3=81=A7=E7=99=BB=E9=8C=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/populate_localNouns2.ts | 88 ++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 contract/scripts/populate_localNouns2.ts diff --git a/contract/scripts/populate_localNouns2.ts b/contract/scripts/populate_localNouns2.ts new file mode 100644 index 00000000..2d26396a --- /dev/null +++ b/contract/scripts/populate_localNouns2.ts @@ -0,0 +1,88 @@ +/** + * HEADの追加用 + */ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; + +import { images, palette } from "../test/image-local-data2"; +import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; +import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; +import { abi as localMinterABI } from "../artifacts/contracts/localNouns/LocalNounsMinter.sol/LocalNounsMinter"; + +dotenv.config(); + + +const localSeederAddress = addresses.localSeeder[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const localProviderAddress = addresses.localProvider[network.name]; +const localTokenAddress = addresses.localNounsToken[network.name]; +const localMinterAddress = addresses.localNounsMinter[network.name]; + +async function main() { + + // const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + // const wallet = new ethers.Wallet(privateKey, ethers.provider); + const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); + const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); + const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); + + if (true) { + // set Heads + console.log(`set Heads start`); + const headChunk = chunkArrayByPrefectureId(images.heads); + for (const chunk of headChunk) { + const prefectureId = chunk[0].prefectureId; + await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + // console.log("chunk:", prefectureId, chunk); + } + console.log(`set Heads end`); + + } + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + +interface ImageData { + prefectureId: string; + filename: string; + data: string; +} + +function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { + let map = new Map(); + + for (let i = 0; i < imagedata.length; i++) { + // dataが空っぽはスキップ + if (imagedata[i].data === undefined) { + console.error("not define data:", imagedata[i].filename); + continue; + } + + let filename = imagedata[i].filename.split('-'); + let id = filename[0]; + imagedata[i].prefectureId = id; + + // filenameの抽出 ex)"132-head-32-shimane-heads" -> "shimane-map" + imagedata[i].filename = filename[3]+'-map'; + console.log("imagedata[i].filename", imagedata[i].filename); + if (!map.has(id)) { + map.set(id, []); + } + map.get(id)!.push(imagedata[i]); + } + return Array.from(map.values()); +} \ No newline at end of file From 6bb63f0661c64c6f9a57b12070bb1ac6548f1c7a Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Tue, 22 Aug 2023 21:31:00 +0900 Subject: [PATCH 076/146] =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C?= =?UTF-8?q?=E5=9C=B0=E5=9B=B3=E3=81=AEhead=E3=82=92=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=83=A7=E3=83=B3=EF=BC=91=E3=81=A7=E7=99=BB=E9=8C=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/test_localNouns.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contract/scripts/test_localNouns.ts b/contract/scripts/test_localNouns.ts index b9d9cede..1f264683 100644 --- a/contract/scripts/test_localNouns.ts +++ b/contract/scripts/test_localNouns.ts @@ -34,7 +34,8 @@ async function main() { console.log("localToken:", localTokenAddress); - for (var i: number = 1; i <= 47; i++) { + for (var i: number = 101; i <= 147; i++) { + // for (var i: number = 1; i <= 47; i++) { try { await localMinter.functions['mintSelectedPrefecture(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.000001') }); From 600f28983d422c70a96cb54f3b2c84af2534105b Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 23 Aug 2023 22:34:29 +0900 Subject: [PATCH 077/146] =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C?= =?UTF-8?q?=E3=82=92=E3=83=A9=E3=83=B3=E3=83=80=E3=83=A0=E3=81=AB=E6=B1=BA?= =?UTF-8?q?=E5=AE=9A=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../localNouns/LocalNounsProvider.sol | 18 +++++++++++++++--- contract/test/localNouns.ts | 4 ++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index cc01cf30..cb2e1bc5 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -151,13 +151,25 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { uint256 headPartsId = seeds[_assetId].head; uint256 accessoryPartsId = seeds[_assetId].accessory; traits = string( - abi.encodePacked('{"trait_type": "prefecture" , "value":"', prefectureName[tokenIdToPrefectureId[_assetId]], '"}', - ',{"trait_type": "head" , "value":"', localDescriptor.headName(headPartsId), '"}', - ',{"trait_type": "accessory" , "value":"', localDescriptor.accessoryName(accessoryPartsId), '"}') + abi.encodePacked( + '{"trait_type": "prefecture" , "value":"', + prefectureName[tokenIdToPrefectureId[_assetId]], + '"}', + ',{"trait_type": "head" , "value":"', + localDescriptor.headName(headPartsId), + '"}', + ',{"trait_type": "accessory" , "value":"', + localDescriptor.accessoryName(accessoryPartsId), + '"}' + ) ); } function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256) { + // 末尾2桁が00の場合は都道府県をランダムに決定する + if (prefectureId % 100 == 0) { + prefectureId = ((block.number * _assetId) % 46) + 1; + } seeds[_assetId] = generateSeed(prefectureId, _assetId); tokenIdToPrefectureId[_assetId] = prefectureId % 100; // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 nextTokenId++; diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 9d92fda5..734dc42c 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -69,8 +69,8 @@ describe('mint functions', function () { it('batch mint', async function () { - //Aomori,Iwate,Miyagiを1個,2個,3個ずつ、user2にmint - await minter.connect(user2).functions.mintSelectedPrefectureBatch([2, 3, 4], [1, 2, 3]); + //Aomori,Iwate,ランダムを、2個,3個ずつ、user2にmint + await minter.connect(user2).functions.mintSelectedPrefectureBatch([2, 3, 0], [1, 2, 3]); // user2に合計6個ミントされる const [balance] = await token.functions.balanceOf(user2.address); From fedd0baadc8db41f936bc1dd5040be4ff9ba6616 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 24 Aug 2023 08:39:25 +0900 Subject: [PATCH 078/146] =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=83=80=E3=83=A0=E6=8C=87=E5=AE=9A=E6=99=82?= =?UTF-8?q?=E3=81=AE=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E8=80=83?= =?UTF-8?q?=E6=85=AE=E4=B8=8D=E8=B6=B3=E3=81=AE=E3=83=90=E3=82=B0fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/localNouns/LocalNounsProvider.sol | 3 ++- contract/test/localNouns.ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index cb2e1bc5..8d3347bd 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -168,8 +168,9 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256) { // 末尾2桁が00の場合は都道府県をランダムに決定する if (prefectureId % 100 == 0) { - prefectureId = ((block.number * _assetId) % 46) + 1; + prefectureId = prefectureId + ((block.number * _assetId) % 46) + 1; } + seeds[_assetId] = generateSeed(prefectureId, _assetId); tokenIdToPrefectureId[_assetId] = prefectureId % 100; // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 nextTokenId++; diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 734dc42c..0f1c9310 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -69,8 +69,8 @@ describe('mint functions', function () { it('batch mint', async function () { - //Aomori,Iwate,ランダムを、2個,3個ずつ、user2にmint - await minter.connect(user2).functions.mintSelectedPrefectureBatch([2, 3, 0], [1, 2, 3]); + //Aomori,Iwate(バージョン指定),ランダム,ランダム(バージョン指定)を、2個,3個ずつ、user2にmint + await minter.connect(user2).functions.mintSelectedPrefectureBatch([2, 103, 0, 100], [1, 1, 2, 2]); // user2に合計6個ミントされる const [balance] = await token.functions.balanceOf(user2.address); From 1524e5f05ffb57c06dc929372215de9e7c791ef0 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 24 Aug 2023 08:43:17 +0900 Subject: [PATCH 079/146] =?UTF-8?q?=E3=83=9F=E3=83=B3=E3=83=88=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=81=AE=E9=85=8D=E5=88=97=E3=83=91=E3=83=A9=E3=83=A1?= =?UTF-8?q?=E3=82=BF=E3=81=AE=E8=A6=81=E7=B4=A0=E6=95=B0=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 3f4ffeef..fd721131 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -79,6 +79,7 @@ contract LocalNounsToken is ProviderTokenA1, ILocalNounsToken { ) public virtual returns (uint256 tokenId) { require(msg.sender == minter, 'Sender is not the minter'); require(_prefectureId.length == _amount.length, 'parametars length are different'); + require(_prefectureId.length > 0, 'parametars length is zero'); uint256 amount = 0; for (uint256 i = 0; i < _prefectureId.length; i++) { From 8b2bd50bb1f8bd6995b5370ffed4b459c8b293f3 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 24 Aug 2023 08:51:00 +0900 Subject: [PATCH 080/146] =?UTF-8?q?=E5=A4=89=E6=95=B0=E5=90=8D=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=20amount=20->=20counter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index fd721131..2df5355e 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -81,14 +81,14 @@ contract LocalNounsToken is ProviderTokenA1, ILocalNounsToken { require(_prefectureId.length == _amount.length, 'parametars length are different'); require(_prefectureId.length > 0, 'parametars length is zero'); - uint256 amount = 0; + uint256 counter = 0; for (uint256 i = 0; i < _prefectureId.length; i++) { for (uint256 j = 0; j < _amount[i]; j++) { - assetProvider2.mint(_prefectureId[i], _nextTokenId() + amount++); + assetProvider2.mint(_prefectureId[i], _nextTokenId() + counter++); } } - _safeMint(_to, amount); + _safeMint(_to, counter); return _nextTokenId() - 1; } From 6517783627814debbc88637e12cc798e547c72e1 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 24 Aug 2023 10:16:37 +0900 Subject: [PATCH 081/146] remove Opensea's DefaultOperatorFilterer, add "SetPrice" --- .../packages/ERC721P2P/ERC721AP2P.sol | 46 +------------------ 1 file changed, 2 insertions(+), 44 deletions(-) diff --git a/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol b/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol index 8c903315..7c19098f 100644 --- a/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol +++ b/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol @@ -10,51 +10,8 @@ pragma solidity ^0.8.6; import './IERC721P2P.sol'; import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; import './erc721a/extensions/ERC721AQueryable.sol'; -import './opensea/DefaultOperatorFilterer.sol'; -// From https://github.com/ProjectOpenSea/operator-filter-registry/blob/main/src/example/ExampleERC721.sol -abstract contract ERC721WithOperatorFilter is ERC721A, DefaultOperatorFilterer { - function setApprovalForAll( - address operator, - bool approved - ) public virtual override onlyAllowedOperatorApproval(operator) { - super.setApprovalForAll(operator, approved); - } - - function approve( - address operator, - uint256 tokenId - ) public payable virtual override onlyAllowedOperatorApproval(operator) { - super.approve(operator, tokenId); - } - - function transferFrom( - address from, - address to, - uint256 tokenId - ) public payable virtual override onlyAllowedOperator(from) { - super.transferFrom(from, to, tokenId); - } - - function safeTransferFrom( - address from, - address to, - uint256 tokenId - ) public payable virtual override onlyAllowedOperator(from) { - super.safeTransferFrom(from, to, tokenId); - } - - function safeTransferFrom( - address from, - address to, - uint256 tokenId, - bytes memory data - ) public payable virtual override onlyAllowedOperator(from) { - super.safeTransferFrom(from, to, tokenId, data); - } -} - -abstract contract ERC721AP2P is IERC721P2PCore, ERC721WithOperatorFilter, Ownable { +abstract contract ERC721AP2P is IERC721P2PCore, ERC721A, Ownable { mapping(uint256 => uint256) prices; function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { @@ -64,6 +21,7 @@ abstract contract ERC721AP2P is IERC721P2PCore, ERC721WithOperatorFilter, Ownabl function setPriceOf(uint256 _tokenId, uint256 _price) public override { require(ownerOf(_tokenId) == msg.sender, 'Only the onwer can set the price'); prices[_tokenId] = _price; + emit SetPrice(_tokenId, _price); } function getPriceOf(uint256 _tokenId) external view override returns (uint256) { From d97d2a4277f4f1be097c4aba32fffcf87bfebcb6 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sun, 27 Aug 2023 13:22:57 +0900 Subject: [PATCH 082/146] =?UTF-8?q?ERC721AP2PTradable=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packages/ERC721P2P/ERC721AP2PTradable.sol | 43 ++++++ .../packages/ERC721P2P/IERC721P2PTradable.sol | 32 ++++ .../ERC721P2P/SampleAP2PTradableToken.sol | 42 ++++++ contract/test/p2pTradable.ts | 138 ++++++++++++++++++ 4 files changed, 255 insertions(+) create mode 100644 contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol create mode 100644 contract/contracts/packages/ERC721P2P/IERC721P2PTradable.sol create mode 100644 contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol create mode 100644 contract/test/p2pTradable.ts diff --git a/contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol b/contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol new file mode 100644 index 00000000..5f264a6d --- /dev/null +++ b/contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT + +/** + * Inherits ERC721 as an extension + * Please see "https://hackmd.io/@snakajima/BJqG3fkSo" for details. + */ + +pragma solidity ^0.8.6; + +import './IERC721P2PTradable.sol'; +import './ERC721AP2P.sol'; + +abstract contract ERC721AP2PTradable is IERC721P2PTradableCore, ERC721AP2P { + // onTradeList (tokenId => trade on/off) + mapping(uint256 => bool) public trades; + + function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { + return interfaceId == type(IERC721P2PTradableCore).interfaceId || super.supportsInterface(interfaceId); + } + + function putTrade(uint256 _tokenId, bool _isOnTrade) external override { + require(ownerOf(_tokenId) == msg.sender, 'Only the onwer can trade'); + trades[_tokenId] = _isOnTrade; + emit PutTrade(_tokenId, _isOnTrade); + } + + function executeTrade(uint256 _myTokenId, uint256 _targetTokenId) external override { + require(ownerOf(_myTokenId) == msg.sender, 'Only the onwer can trade'); + require(trades[_targetTokenId] == true, 'TargetTokenId is not on trade'); + + address targetTokenOwner = ownerOf(_targetTokenId); + + _transfer(msg.sender, targetTokenOwner, _myTokenId); + _transfer(targetTokenOwner, msg.sender, _targetTokenId); + } + + // transfer時はセール、トレード解除 + function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal override { + trades[startTokenId] = false; // not trade any more + prices[startTokenId] = 0; // not on sale any more + super._beforeTokenTransfers(from, to, startTokenId, quantity); + } +} diff --git a/contract/contracts/packages/ERC721P2P/IERC721P2PTradable.sol b/contract/contracts/packages/ERC721P2P/IERC721P2PTradable.sol new file mode 100644 index 00000000..b842315d --- /dev/null +++ b/contract/contracts/packages/ERC721P2P/IERC721P2PTradable.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT + +/** + * This is a part of an effort to update ERC271 so that the sales transaction + * becomes decentralized and trustless, which makes it possible to enforce + * royalities without relying on marketplaces. + * + * Please see "https://hackmd.io/@snakajima/BJqG3fkSo" for details. + * + * Created by Satoshi Nakajima (@snakajima) + */ + +pragma solidity ^0.8.6; + +import '@openzeppelin/contracts/token/ERC721/IERC721.sol'; +import './IERC721P2P.sol'; + +interface IERC721P2PTradableCore { + // Put the specified token to trade list(onlyTokenOwner) + function putTrade(uint256 _tokenId, bool _isOnTrade) external; + + // Trade the specified tokens (onlyTokenOwner) + function executeTrade(uint256 _myTokenId, uint256 _targetTokenId) external; + + // Fires when the owner puts the trade + event PutTrade(uint256 indexed tokenId, bool _isOnTrade); +} + +// deprecated +interface IERC721P2PTradable is IERC721P2PTradableCore, IERC721P2P { + +} diff --git a/contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol b/contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol new file mode 100644 index 00000000..48b16c8e --- /dev/null +++ b/contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT + +/** + * This is a part of an effort to update ERC271 so that the sales transaction + * becomes decentralized and trustless, which makes it possible to enforce + * royalities without relying on marketplaces. + * + * Please see "https://hackmd.io/@snakajima/BJqG3fkSo" for details. + * + * Created by Satoshi Nakajima (@snakajima) + */ + +pragma solidity ^0.8.6; + +import './ERC721AP2PTradable.sol'; + +contract SampleAP2PTradableToken is ERC721AP2PTradable { + uint public nextTokenId; + uint constant mintLimit = 100; + address payable immutable artist; + + constructor(address _artist) ERC721A('sample', 'SAMPLE') { + artist = payable(_artist); + } + + function _processRoyalty(uint _salesPrice, uint) internal override returns (uint256 royalty) { + royalty = (_salesPrice * 50) / 1000; // 5.0% + artist.transfer(royalty); + } + + function mint() public payable virtual returns (uint256 tokenId) { + require(nextTokenId < mintLimit, 'Sold out'); + tokenId = nextTokenId++; + _safeMint(msg.sender, 1); + } + + + // Helper method for test script + function etherBalanceOf(address _wallet) public view returns (uint256) { + return _wallet.balance; + } +} diff --git a/contract/test/p2pTradable.ts b/contract/test/p2pTradable.ts new file mode 100644 index 00000000..ab3fac79 --- /dev/null +++ b/contract/test/p2pTradable.ts @@ -0,0 +1,138 @@ +import { expect } from 'chai'; +import { ethers, SignerWithAddress, Contract } from 'hardhat'; + +let owner: SignerWithAddress, + artist: SignerWithAddress, + user1: SignerWithAddress, + user2: SignerWithAddress, + user3: SignerWithAddress; +let token: Contract, token1: Contract, token2: Contract, token3: Contract; +let balanceO, balanceA, balance1, balance2, balance3; + +before(async () => { + [owner, artist, user1, user2, user3] = await ethers.getSigners(); + + const factory = await ethers.getContractFactory('SampleAP2PTradableToken'); + token = await factory.deploy(artist.address); + await token.deployed(); + + token1 = token.connect(user1); + token2 = token.connect(user2); + token3 = token.connect(user3); +}); + +describe('P2P', function () { + let result, tx, err, balance; + const zeroAddress = '0x0000000000000000000000000000000000000000'; + const price = ethers.BigNumber.from('1000000000000000'); + const tokenId0 = 0; + console.log(ethers.utils.formatEther(price)); + + it('Initial TotalSupply', async function () { + result = await token.totalSupply(); + expect(result.toNumber()).equal(0); + result = await token.balanceOf(user1.address); + expect(result.toNumber()).equal(0); + }); + it('Mint by user1', async function () { + tx = await token1.mint(); + await tx.wait(); + result = await token.totalSupply(); + expect(result.toNumber()).equal(1); + result = await token.balanceOf(user1.address); + expect(result.toNumber()).equal(1); + result = await token.ownerOf(tokenId0); + expect(result).equal(user1.address); + result = await token.getPriceOf(tokenId0); + expect(result.toNumber()).equal(0); + }); + it('Attempt to buy by user2', async function () { + await expect(token2.purchase(0, user2.address, zeroAddress)).revertedWith('Token is not on sale'); + }); + it('SetPrice', async function () { + await expect(token2.setPriceOf(tokenId0, price)).revertedWith('Only the onwer can set the price'); + tx = await token1.setPriceOf(tokenId0, price); + await tx.wait(); + result = await token.getPriceOf(tokenId0); + expect(result.toNumber()).equal(price); + }); + it('Purchase by user2', async function () { + await expect(token2.purchase(tokenId0, user2.address, zeroAddress)).revertedWith('Not enough fund'); + + balance1 = await token.etherBalanceOf(user1.address); + balanceA = await token.etherBalanceOf(artist.address); + + tx = await token2.purchase(tokenId0, user2.address, zeroAddress, { value: price }); + await tx.wait(); + result = await token.ownerOf(tokenId0); + expect(result).equal(user2.address); + + balance = await token.etherBalanceOf(user1.address); + expect(balance.sub(balance1)).equal(price.div(20).mul(19)); // 95% + balance = await token.etherBalanceOf(artist.address); + expect(balance.sub(balanceA)).equal(price.div(20).mul(1)); // 5% + }); + it('Attempt to buy by user3', async function () { + await expect(token3.purchase(0, user2.address, zeroAddress, { value: price })).revertedWith('Token is not on sale'); + }); +}); + +describe('P2PTradable', function () { + let result, tx, err, balance; + + const tokenId1 = 1; + const tokenId2 = 2; + const tokenId3 = 3; + + it('mint for test', async function () { + // for user1 + tx = await token1.mint(); + await tx.wait(); + result = await token1.ownerOf(tokenId1); + expect(result).equal(user1.address); + + // for user2 + tx = await token2.mint(); + await tx.wait(); + result = await token2.ownerOf(tokenId2); + expect(result).equal(user2.address); + + // for user3 + tx = await token3.mint(); + await tx.wait(); + result = await token3.ownerOf(tokenId3); + expect(result).equal(user3.address); + }); + + it('Attempt to trade non-tradable token', async function () { + await expect(token2.executeTrade(tokenId2, tokenId1)).revertedWith('TargetTokenId is not on trade'); + }); + + it('Attempt to execute trade non-owner token', async function () { + await expect(token2.executeTrade(tokenId1, tokenId3)).revertedWith('Only the onwer can trade'); + }); + + it('Attempt to put trade non-owner token', async function () { + await expect(token2.putTrade(tokenId1, true)).revertedWith('Only the onwer can trade'); + }); + + it('put trade', async function () { + // user + tx = await token1.putTrade(tokenId1, true); + await tx.wait(); + result = await token1.trades(tokenId1); + expect(result).equal(true); + + tx = await token2.executeTrade(tokenId2, tokenId1); + await tx.wait(); + result = await token1.trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + result = await token1.ownerOf(tokenId1); + expect(result).equal(user2.address); + + result = await token1.ownerOf(tokenId2); + expect(result).equal(user1.address); + }); + +}); From ac38e4859efa11d68350527c2d4984cb9924f6fb Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sun, 27 Aug 2023 13:52:25 +0900 Subject: [PATCH 083/146] remove old description --- .../packages/ERC721P2P/SampleAP2PTradableToken.sol | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol b/contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol index 48b16c8e..7b8b5fa0 100644 --- a/contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol +++ b/contract/contracts/packages/ERC721P2P/SampleAP2PTradableToken.sol @@ -1,15 +1,5 @@ // SPDX-License-Identifier: MIT -/** - * This is a part of an effort to update ERC271 so that the sales transaction - * becomes decentralized and trustless, which makes it possible to enforce - * royalities without relying on marketplaces. - * - * Please see "https://hackmd.io/@snakajima/BJqG3fkSo" for details. - * - * Created by Satoshi Nakajima (@snakajima) - */ - pragma solidity ^0.8.6; import './ERC721AP2PTradable.sol'; From 53b1e2d17bc11f19b387b2d695f64a9abff4f21c Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sun, 27 Aug 2023 14:28:46 +0900 Subject: [PATCH 084/146] =?UTF-8?q?LocalNouns=E3=81=AE=E7=B6=99=E6=89=BF?= =?UTF-8?q?=E5=85=88=E3=82=92ERC721AP2PTradable=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 6 +- contract/contracts/libs/ProviderTokenA2.sol | 152 ++++++++++++++++++++ 2 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 contract/contracts/libs/ProviderTokenA2.sol diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 2df5355e..badf9897 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -7,12 +7,12 @@ pragma solidity ^0.8.6; import '@openzeppelin/contracts/utils/Strings.sol'; -import './libs/ProviderTokenA1.sol'; +import './libs/ProviderTokenA2.sol'; import { INounsSeeder } from './localNouns/interfaces/INounsSeeder.sol'; import './localNouns/interfaces/IAssetProviderExMint.sol'; import './localNouns/interfaces/ILocalNounsToken.sol'; -contract LocalNounsToken is ProviderTokenA1, ILocalNounsToken { +contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { using Strings for uint256; IAssetProviderExMint public assetProvider2; @@ -21,7 +21,7 @@ contract LocalNounsToken is ProviderTokenA1, ILocalNounsToken { constructor( IAssetProviderExMint _assetProvider, address _minter - ) ProviderTokenA1(_assetProvider, 'Local Nouns', 'Local Nouns') { + ) ProviderTokenA2(_assetProvider, 'Local Nouns', 'Local Nouns') { description = 'Local Nouns Token.'; assetProvider2 = _assetProvider; // mintPrice = 1e13; // 0.001 diff --git a/contract/contracts/libs/ProviderTokenA2.sol b/contract/contracts/libs/ProviderTokenA2.sol new file mode 100644 index 00000000..3a913139 --- /dev/null +++ b/contract/contracts/libs/ProviderTokenA2.sol @@ -0,0 +1,152 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.6; + +// import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +// import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import '../packages/ERC721P2P/ERC721AP2PTradable.sol'; +import { Base64 } from 'base64-sol/base64.sol'; +import '@openzeppelin/contracts/utils/Strings.sol'; +import 'assetprovider.sol/IAssetProvider.sol'; + +/** + * ProviderToken is an abstract implentation of ERC721, which is built on top of an asset provider. + * The specified asset provider is responsible in providing images for NFTs in SVG format, + * which turns them into fully on-chain NFTs. + * + * When implementing the mint method, and it should call processPayout method of the asset provider like this: + * + * provider.processPayout{value:msg.value}(assetId) + * + */ +abstract contract ProviderTokenA2 is ERC721AP2PTradable { + using Strings for uint256; + using Strings for uint16; + + // To be specified by the concrete contract + string public description; + uint public mintPrice; + uint public mintLimit; + + IAssetProvider public assetProvider; + + constructor( + IAssetProvider _assetProvider, + string memory _title, + string memory _shortTitle + ) ERC721A(_title, _shortTitle) { + assetProvider = _assetProvider; + } + + function setAssetProvider(IAssetProvider _assetProvider) external onlyOwner { + assetProvider = _assetProvider; // upgradable + } + + function setDescription(string memory _description) external onlyOwner { + description = _description; + } + + function setMintPrice(uint256 _price) external onlyOwner { + mintPrice = _price; + } + + function setMintLimit(uint256 _limit) external onlyOwner { + mintLimit = _limit; + } + + string constant SVGHeader = + '\n' + '\n'; + + /* + * A function of IAssetStoreToken interface. + * It generates SVG with the specified style, using the given "SVG Part". + */ + function generateSVG(uint256 _assetId) internal view returns (string memory) { + // Constants of non-value type not yet implemented by Solidity + (string memory svgPart, string memory tag) = assetProvider.generateSVGPart(_assetId); + return + string( + abi.encodePacked( + SVGHeader, + svgPart, + '\n' + '\n' + '\n' + ) + ); + } + + /** + * @notice A distinct Uniform Resource Identifier (URI) for a given asset. + * @dev See {IERC721Metadata-tokenURI}. + */ + function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { + require(_exists(_tokenId), 'ProviderToken.tokenURI: nonexistent token'); + bytes memory image = bytes(generateSVG(_tokenId)); + + return + string( + abi.encodePacked( + 'data:application/json;base64,', + Base64.encode( + bytes( + abi.encodePacked( + '{"name":"', + tokenName(_tokenId), + '","description":"', + description, + '","attributes":[', + generateTraits(_tokenId), + '],"image":"data:image/svg+xml;base64,', + Base64.encode(image), + '"}' + ) + ) + ) + ) + ); + } + + function tokenName(uint256 _tokenId) internal view virtual returns (string memory) { + return _tokenId.toString(); + } + + /** + * For non-free minting, + * 1. Override this method + * 2. Check for the required payment, by calling mintPriceFor() + * 3. Call the processPayout method of the asset provider with appropriate value + */ + function mint() public payable virtual returns (uint256 tokenId) { + require(_nextTokenId() < mintLimit, 'Sold out'); + _safeMint(msg.sender, 1); + + return _nextTokenId() - 1; + } + + /** + * The concreate contract may override to offer custom pricing, + * such as token-gated discount. + */ + function mintPriceFor(address) public view virtual returns (uint256) { + return mintPrice; + } + + function totalSupply() public view override returns (uint256) { + return _nextTokenId(); + } + + function generateTraits(uint256 _tokenId) internal view returns (bytes memory traits) { + traits = bytes(assetProvider.generateTraits(_tokenId)); + } + + function debugTokenURI(uint256 _tokenId) public view returns (string memory uri, uint256 gas) { + gas = gasleft(); + uri = tokenURI(_tokenId); + gas -= gasleft(); + } +} From b0a6719a5c25c54d9f333959b2f51fed65d8af83 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sun, 27 Aug 2023 14:43:05 +0900 Subject: [PATCH 085/146] correct author --- contract/contracts/LocalNounsToken.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index badf9897..52d49120 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT /* - * Created by Isamu Arimoto (@isamua) + * Created by @eiba */ pragma solidity ^0.8.6; From 5ee425894241eee1b38c7362a4ba349508ab2354 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Mon, 28 Aug 2023 10:55:32 +0900 Subject: [PATCH 086/146] =?UTF-8?q?P2P=E3=83=88=E3=83=AC=E3=83=BC=E3=83=89?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 78 ++++++- .../localNouns/LocalNounsProvider.sol | 4 + .../interfaces/IAssetProviderExMint.sol | 1 + .../interfaces/ILocalNounsToken.sol | 6 + .../packages/ERC721P2P/ERC721AP2PTradable.sol | 11 +- contract/test/localNouns.ts | 199 +++++++++++++++++- 6 files changed, 284 insertions(+), 15 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 52d49120..ad2958b3 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT /* - * Created by @eiba + * Created by @eiba8884 */ pragma solidity ^0.8.6; @@ -17,6 +17,9 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { IAssetProviderExMint public assetProvider2; address public minter; + mapping(uint256 => uint256[]) public tradePrefecture; // トレード先指定の都道府県 + + address public administratorsAddress; // 運営ウォレット constructor( IAssetProviderExMint _assetProvider, @@ -28,6 +31,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { mintPrice = 0; mintLimit = 5000; minter = _minter; + administratorsAddress = msg.sender; } function tokenName(uint256 _tokenId) internal pure override returns (string memory) { @@ -100,4 +104,76 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { function setMinter(address _minter) public onlyOwner { minter = _minter; } + + function setAdministratorsAddress(address _admin) external onlyOwner { + administratorsAddress = _admin; + } + + function putTradeLocalNoun(uint256 _tokenId, uint256[] memory _prefectures) public { + for (uint256 i = 0; i < _prefectures.length; i++) { + require(_prefectures[i] > 0 && _prefectures[i] <= 47, 'incorrect prefecutre id'); + } + + super.putTrade(_tokenId, true); + tradePrefecture[_tokenId] = _prefectures; + + emit PutTradePrefecture(_tokenId, _prefectures); + } + + function getTradePrefectureFor(uint256 _tokenId) public view returns (uint256[] memory) { + return tradePrefecture[_tokenId]; + } + + function cancelTradeLocalNoun(uint256 _tokenId) public { + super.putTrade(_tokenId, false); + + uint256[] memory emptyArray; + tradePrefecture[_tokenId] = emptyArray; + + emit CancelTradePrefecture(_tokenId); + } + + function executeTradeLocalNoun(uint256 _myTokenId, uint256 _targetTokenId) public { + if (tradePrefecture[_targetTokenId].length > 0) { + uint256 myTokenIdPrefecture = assetProvider2.getPrefectureId(_myTokenId); + bool isIncludesList = false; + for (uint256 i = 0; i < tradePrefecture[_targetTokenId].length; i++) { + if (myTokenIdPrefecture == tradePrefecture[_targetTokenId][i]) { + isIncludesList = true; + break; + } + } + require(isIncludesList, 'unmatch to the wants list'); + } + + super.executeTrade(_myTokenId, _targetTokenId); + } + + function putTrade(uint256 _tokenId, bool _isOnTrade) public override { + revert('Cannot use this function'); + } + + function executeTrade(uint256 _myTokenId, uint256 _targetTokenId) public override { + revert('Cannot use this function'); + } + + // transfer時はトレード解除 + function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal override { + uint256[] memory emptyArray; + tradePrefecture[startTokenId] = emptyArray; + super._beforeTokenTransfers(from, to, startTokenId, quantity); + } + + // pay royalties to admin here + function _processRoyalty(uint _salesPrice, uint _tokenId) internal override returns (uint256 royalty) { + royalty = (_salesPrice * 50) / 1000; // 5.0% + address payable payableTo = payable(administratorsAddress); + payableTo.transfer(royalty); + } + + function withdraw() external payable onlyOwner { + require(administratorsAddress != address(0), "administratorsAddress shouldn't be 0"); + (bool sent, ) = payable(administratorsAddress).call{ value: address(this).balance }(''); + require(sent, 'failed to move fund to administratorsAddress contract'); + } } diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index 8d3347bd..8fad8bff 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -177,4 +177,8 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { return _assetId; } + + function getPrefectureId(uint256 _tokenId) external override returns (uint256) { + return tokenIdToPrefectureId[_tokenId]; + } } diff --git a/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol b/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol index d1ed179d..aac77903 100644 --- a/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol +++ b/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol @@ -6,4 +6,5 @@ import 'assetprovider.sol/IAssetProvider.sol'; interface IAssetProviderExMint is IAssetProvider { function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256); + function getPrefectureId(uint256 prefectureId) external returns (uint256); } diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol index a3713682..45c370f4 100644 --- a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol +++ b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol @@ -27,4 +27,10 @@ interface ILocalNounsToken { ) external returns (uint256 tokenId); function setMinter(address _minter) external; + + // Fires when the owner puts the trade + event PutTradePrefecture(uint256 indexed tokenId, uint256[] _prefectures); + + // Fires when the owner cancel the trade + event CancelTradePrefecture(uint256 indexed tokenId); } diff --git a/contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol b/contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol index 5f264a6d..938edb13 100644 --- a/contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol +++ b/contract/contracts/packages/ERC721P2P/ERC721AP2PTradable.sol @@ -18,13 +18,13 @@ abstract contract ERC721AP2PTradable is IERC721P2PTradableCore, ERC721AP2P { return interfaceId == type(IERC721P2PTradableCore).interfaceId || super.supportsInterface(interfaceId); } - function putTrade(uint256 _tokenId, bool _isOnTrade) external override { + function putTrade(uint256 _tokenId, bool _isOnTrade) public virtual { require(ownerOf(_tokenId) == msg.sender, 'Only the onwer can trade'); trades[_tokenId] = _isOnTrade; emit PutTrade(_tokenId, _isOnTrade); } - function executeTrade(uint256 _myTokenId, uint256 _targetTokenId) external override { + function executeTrade(uint256 _myTokenId, uint256 _targetTokenId) public virtual { require(ownerOf(_myTokenId) == msg.sender, 'Only the onwer can trade'); require(trades[_targetTokenId] == true, 'TargetTokenId is not on trade'); @@ -35,7 +35,12 @@ abstract contract ERC721AP2PTradable is IERC721P2PTradableCore, ERC721AP2P { } // transfer時はセール、トレード解除 - function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal override { + function _beforeTokenTransfers( + address from, + address to, + uint256 startTokenId, + uint256 quantity + ) internal virtual override { trades[startTokenId] = false; // not trade any more prices[startTokenId] = 0; // not on sale any more super._beforeTokenTransfers(from, to, startTokenId, quantity); diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 0f1c9310..1b36d74a 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -3,7 +3,7 @@ import { ethers, network, SignerWithAddress, Contract } from "hardhat"; import { addresses } from '../../src/utils/addresses'; import { ethers } from 'ethers'; -let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress; +let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, admin: SignerWithAddress; let token: Contract, minter: Contract, provider: Contract; const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; @@ -21,23 +21,23 @@ before(async () => { # npx hardhat run scripts/populate_localNouns.ts */ - [owner, user1, user2] = await ethers.getSigners(); + [owner, user1, user2, admin] = await ethers.getSigners(); const factoryProvider = await ethers.getContractFactory('LocalNounsProvider'); provider = await factoryProvider.deploy( nounsDescriptorAddress, localNounsDescriptorAddress, nounsSeederAddress, localSeederAddress); await provider.deployed(); - console.log(`##LocalNounsProvider="${provider.address}"`); + // console.log(`##LocalNounsProvider="${provider.address}"`); const factoryToken = await ethers.getContractFactory('LocalNounsToken'); token = await factoryToken.deploy(provider.address, owner.address); await token.deployed(); - console.log(`##LocalNounsToken="${token.address}"`); + // console.log(`##LocalNounsToken="${token.address}"`); const factoryMinter = await ethers.getContractFactory('LocalNounsMinter'); minter = await factoryMinter.deploy(token.address); await minter.deployed(); - console.log(`##LocalNounsMinter="${minter.address}"`); + // console.log(`##LocalNounsMinter="${minter.address}"`); await token.setMinter(minter.address); @@ -104,14 +104,191 @@ describe('mint functions', function () { // expect(traits4).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); // expect(traits5).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); // expect(traits6).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); - console.log(traits1); - console.log(traits2); - console.log(traits3); - console.log(traits4); - console.log(traits5); - console.log(traits6); + // console.log(traits1); + // console.log(traits2); + // console.log(traits3); + // console.log(traits4); + // console.log(traits5); + // console.log(traits6); const [totalSupply] = await token.functions.totalSupply(); expect(totalSupply.toNumber()).to.equal(7); }); }); + +describe('P2P', function () { + let tx, result, tokenId1: number; + const zeroAddress = '0x0000000000000000000000000000000000000000'; + const price = ethers.BigNumber.from('1000000000000000'); + + it('not on sale', async function () { + await minter.connect(user1).functions.mintSelectedPrefectureBatch([10], [1]); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // セールなし + await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Token is not on sale'); + }); + + it('SetPrice', async function () { + await expect(token.connect(user2).setPriceOf(tokenId1, price)).revertedWith('Only the onwer can set the price'); + await token.connect(user1).setPriceOf(tokenId1, price); + result = await token.getPriceOf(tokenId1); + expect(result.toNumber()).equal(price); + + await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Not enough fund'); + + }); + + it('Purchase', async function () { + await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Not enough fund'); + + const balance1 = await ethers.provider.getBalance(user1.address); + const balanceT = await ethers.provider.getBalance(owner.address); + + await token.connect(user2).purchase(tokenId1, user2.address, zeroAddress, { value: price }); + result = await token.ownerOf(tokenId1); + expect(result).equal(user2.address); + + const balance12 = await ethers.provider.getBalance(user1.address); + expect(balance12.sub(balance1)).equal(price.div(20).mul(19)); // 95% + const balanceT2 = await ethers.provider.getBalance(owner.address); + expect(balanceT2.sub(balanceT)).equal(price.div(20).mul(1)); // 5% + + }); + + it('Attempt to setprice/buy by user1', async function () { + await expect(token.connect(user1).purchase(0, user2.address, zeroAddress, { value: price })).revertedWith('Token is not on sale'); + await expect(token.connect(user1).setPriceOf(tokenId1, price)).revertedWith('Only the onwer can set the price'); + }); +}); + +describe('P2PTradable', function () { + let result, tx, err, balance, tokenId1: number, tokenId2: number; + + it('mint for test', async function () { + // for user1 + await minter.connect(user1).functions.mintSelectedPrefectureBatch([5], [1]); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefectureBatch([10], [1]); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + }); + + it('Attempt to super functions', async function () { + await expect(token.connect(user2).executeTrade(tokenId2, tokenId1)).revertedWith('Cannot use this function'); + + await expect(token.connect(user2).putTrade(tokenId1, true)).revertedWith('Cannot use this function'); + + }); + + it('Attempt to trade non-tradable token', async function () { + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1)).revertedWith('TargetTokenId is not on trade'); + }); + + it('Attempt to execute trade non-owner token', async function () { + await expect(token.connect(user2).executeTradeLocalNoun(tokenId1, tokenId2)).revertedWith('Only the onwer can trade'); + }); + + it('Attempt to put trade non-owner token', async function () { + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [])).revertedWith('Only the onwer can trade'); + }); + + it('incorrect prefecutre id', async function () { + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [0])).revertedWith('incorrect prefecutre id'); + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [48])).revertedWith('incorrect prefecutre id'); + }); + + it('put trade', async function () { + // 希望都道府県外のトークンと交換しようとする + await token.connect(user1).putTradeLocalNoun(tokenId1, [1, 11, 12]); + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1)).revertedWith('unmatch to the wants list'); + + result = await token.connect(user1).getTradePrefectureFor(tokenId1); + expect(result.length).equal(3); + expect(result[0].toNumber()).equal(1); + expect(result[1].toNumber()).equal(11); + expect(result[2].toNumber()).equal(12); + + await token.connect(user1).putTradeLocalNoun(tokenId1, [10, 11, 12]); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1); + await tx.wait(); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + result = await token.connect(user1).ownerOf(tokenId1); + expect(result).equal(user2.address); + + result = await token.connect(user1).ownerOf(tokenId2); + expect(result).equal(user1.address); + }); + + it('put trade(都道府県指定なし)', async function () { + // for user1 + await minter.connect(user1).functions.mintSelectedPrefectureBatch([10], [1]); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefectureBatch([10], [1]); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + // 希望都道府県なしでトレードリストに出す + await token.connect(user1).putTradeLocalNoun(tokenId1, []); + + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + result = await token.connect(user1).getTradePrefectureFor(tokenId1); + expect(result.length).equal(0); + + tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1); + await tx.wait(); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + result = await token.connect(user1).ownerOf(tokenId1); + expect(result).equal(user2.address); + + result = await token.connect(user1).ownerOf(tokenId2); + expect(result).equal(user1.address); + }); + + it('cancel trade', async function () { + // for user1 + await minter.connect(user1).functions.mintSelectedPrefectureBatch([10], [1]); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefectureBatch([10], [1]); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + // 希望都道府県なしでトレードリストに出す + await token.connect(user1).putTradeLocalNoun(tokenId1, []); + + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + // オーなー以外がキャンセルしようとする + await expect(token.connect(user2).cancelTradeLocalNoun(tokenId1)).revertedWith('Only the onwer can trade'); + + // オーなーがキャンセルする + await token.connect(user1).cancelTradeLocalNoun(tokenId1); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1)).revertedWith('TargetTokenId is not on trade'); + + }); + +}); \ No newline at end of file From dfd48e76759d760a94d460b2ec8051c8f0906c7a Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 30 Aug 2023 08:31:47 +0900 Subject: [PATCH 087/146] add comment --- contract/contracts/LocalNounsToken.sol | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index ad2958b3..b3234be7 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -109,6 +109,10 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { administratorsAddress = _admin; } + /** + * @param _tokenId the token id for put on the trade list. + * @param _prefectures prefectures that you want to trade. if you don't want specific prefecture, you don't need to set. + */ function putTradeLocalNoun(uint256 _tokenId, uint256[] memory _prefectures) public { for (uint256 i = 0; i < _prefectures.length; i++) { require(_prefectures[i] > 0 && _prefectures[i] <= 47, 'incorrect prefecutre id'); @@ -134,6 +138,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { } function executeTradeLocalNoun(uint256 _myTokenId, uint256 _targetTokenId) public { + // tradePrefectureがない場合は、希望都道府県がないためチェック不要 if (tradePrefecture[_targetTokenId].length > 0) { uint256 myTokenIdPrefecture = assetProvider2.getPrefectureId(_myTokenId); bool isIncludesList = false; From 9b01fabb8837d468f921803255bd1fa0623cc7c0 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 25 Oct 2023 08:23:53 +0900 Subject: [PATCH 088/146] =?UTF-8?q?mintSelectedPrefecture=E3=81=AB?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E6=8C=87=E5=AE=9A=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 14 +- .../contracts/localNouns/LocalNounsMinter.sol | 47 +- .../interfaces/ILocalNounsToken.sol | 2 +- contract/test/image-local-data2.json | 440 ++++++++++++++++++ contract/test/localNouns.ts | 149 +++--- .../localNounsDescriptor_localhost.ts | 2 +- .../addresses/localNounsDescriptor_mumbai.ts | 2 +- .../addresses/localNounsMinter_localhost.ts | 2 +- .../addresses/localNounsMinter_mumbai.ts | 2 +- .../addresses/localNounsProvider_localhost.ts | 2 +- .../addresses/localNounsProvider_mumbai.ts | 2 +- .../addresses/localNounsToken_localhost.ts | 2 +- src/utils/addresses/localNounsToken_mumbai.ts | 2 +- src/utils/addresses/localseeder_localhost.ts | 2 +- src/utils/addresses/localseeder_mumbai.ts | 2 +- .../addresses/nftDescriptor_localhost.ts | 3 + src/utils/addresses/nftDescriptor_mumbai.ts | 2 +- .../addresses/nounsDescriptor_localhost.ts | 3 + src/utils/addresses/nounsDescriptor_mumbai.ts | 2 +- src/utils/addresses/nounsSeeder_localhost.ts | 3 + src/utils/addresses/nounsSeeder_mumbai.ts | 2 +- 21 files changed, 606 insertions(+), 81 deletions(-) create mode 100644 contract/test/image-local-data2.json create mode 100644 src/utils/addresses/nftDescriptor_localhost.ts create mode 100644 src/utils/addresses/nounsDescriptor_localhost.ts create mode 100644 src/utils/addresses/nounsSeeder_localhost.ts diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index b3234be7..abc8b21a 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -67,12 +67,16 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { ); } - function mintSelectedPrefecture(address _to, uint256 _prefectureId) public virtual returns (uint256 tokenId) { + function mintSelectedPrefecture( + address _to, + uint256 _prefectureId, + uint256 _amount + ) public virtual returns (uint256 tokenId) { require(msg.sender == minter, 'Sender is not the minter'); - assetProvider2.mint(_prefectureId, _nextTokenId()); - - _safeMint(_to, 1); - + for (uint256 i = 0; i < _amount; i++) { + assetProvider2.mint(_prefectureId, _nextTokenId()); + } + _safeMint(_to, _amount); return _nextTokenId() - 1; } diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol index 18ec97e9..e7a473bf 100644 --- a/contract/contracts/localNouns/LocalNounsMinter.sol +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -23,23 +23,56 @@ import './interfaces/ILocalNounsToken.sol'; contract LocalNounsMinter is Ownable { ILocalNounsToken public token; + uint256 public mintPriceForSpecified = 0.03 ether; + uint256 public mintPriceForNotSpecified = 0.01 ether; + + uint256 public constant mintMax = 1200; + + mapping(address => uint256) public preferentialPurchacedCount; + + enum SalePhase { + Locked, + PreSale, + PublicSale + } + + SalePhase public phase = SalePhase.Locked; // セールフェーズ + + address public administratorsAddress; // 運営ウォレット + constructor(ILocalNounsToken _token) { token = _token; + administratorsAddress = msg.sender; } function setLocalNounsToken(ILocalNounsToken _token) external onlyOwner { token = _token; } - function mintSelectedPrefecture(uint256 _prefectureId) public payable returns (uint256 tokenId) { - return token.mintSelectedPrefecture(msg.sender, _prefectureId); + function setMintPriceForSpecified(uint256 _price) external onlyOwner { + mintPriceForSpecified = _price; } - function mintSelectedPrefectureBatch( - uint256[] memory _prefectureId, - uint256[] memory _amount - ) public payable returns (uint256 tokenId) { + function setMintPriceForNotSpecified(uint256 _price) external onlyOwner { + mintPriceForNotSpecified = _price; + } + + function setPhase(SalePhase _phase) external onlyOwner { + phase = _phase; + } + + function setAdministratorsAddress(address _admin) external onlyOwner { + administratorsAddress = _admin; + } + + function mintSelectedPrefecture(uint256 _prefectureId, uint256 _amount) public payable returns (uint256 tokenId) { + require(phase != SalePhase.Locked, 'Sale is locked'); + return token.mintSelectedPrefecture(msg.sender, _prefectureId, _amount); + } - return token.mintSelectedPrefectureBatch(msg.sender, _prefectureId, _amount); + function withdraw() external payable onlyOwner { + require(administratorsAddress != address(0), "administratorsAddress shouldn't be 0"); + (bool sent, ) = payable(administratorsAddress).call{ value: address(this).balance }(''); + require(sent, 'failed to move fund to administratorsAddress contract'); } } diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol index 45c370f4..c9330d17 100644 --- a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol +++ b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol @@ -18,7 +18,7 @@ pragma solidity ^0.8.6; interface ILocalNounsToken { - function mintSelectedPrefecture(address to, uint256 prefectureId) external returns (uint256 tokenId); + function mintSelectedPrefecture(address to, uint256 prefectureId, uint256 _amount) external returns (uint256 tokenId); function mintSelectedPrefectureBatch( address _to, diff --git a/contract/test/image-local-data2.json b/contract/test/image-local-data2.json new file mode 100644 index 00000000..a2e18ce7 --- /dev/null +++ b/contract/test/image-local-data2.json @@ -0,0 +1,440 @@ +{ + "bgcolors": [ + "d5d7e1", + "e1d7d5" + ], + "palette": [ + "", + "ffffff", + "c5b9a1", + "cfc2ab", + "63a0f9", + "807f7e", + "caeff9", + "5648ed", + "5a423f", + "b9185c", + "b87b11", + "fffdf2", + "4b4949", + "343235", + "1f1d29", + "068940", + "867c1d", + "ae3208", + "9f21a0", + "f98f30", + "fe500c", + "d26451", + "fd8b5b", + "5a65fa", + "d22209", + "e9265c", + "c54e38", + "80a72d", + "4bea69", + "34ac80", + "eed811", + "62616d", + "ff638d", + "8bc0c5", + "c4da53", + "000000", + "f3322c", + "ffae1a", + "ffc110", + "505a5c", + "ffef16", + "fff671", + "fff449", + "db8323", + "df2c39", + "f938d8", + "5c25fb", + "2a86fd", + "45faff", + "38dd56", + "ff3a0e", + "d32a09", + "903707", + "6e3206", + "552e05", + "e8705b", + "f38b7c", + "e4a499", + "667af9", + "648df9", + "7cc4f2", + "97f2fb", + "a3efd0", + "87e4d9", + "71bde4", + "ff1a0b", + "f78a18", + "2b83f6", + "d62149", + "834398", + "ffc925", + "d9391f", + "bd2d24", + "ff7216", + "254efb", + "e5e5de", + "00a556", + "c5030e", + "abf131", + "fb4694", + "e7a32c", + "fff0ee", + "009c59", + "0385eb", + "00499c", + "e11833", + "26b1f3", + "fff0be", + "d8dadf", + "d7d3cd", + "1929f4", + "eab118", + "0b5027", + "f9f5cb", + "cfc9b8", + "feb9d5", + "f8d689", + "5d6061", + "76858b", + "757576", + "ff0e0e", + "0adc4d", + "fdf8ff", + "70e890", + "f7913d", + "ff1ad2", + "ff82ad", + "535a15", + "fa6fe2", + "ffe939", + "ab36be", + "adc8cc", + "604666", + "f20422", + "abaaa8", + "4b65f7", + "a19c9a", + "58565c", + "da42cb", + "027c92", + "cec189", + "909b0e", + "74580d", + "027ee6", + "b2958d", + "efad81", + "7d635e", + "eff2fa", + "6f597a", + "d4b7b2", + "d18687", + "cd916d", + "6b3f39", + "4d271b", + "85634f", + "f9f4e6", + "f8ddb0", + "b92b3c", + "d08b11", + "257ced", + "a3baed", + "5fd4fb", + "c16710", + "a28ef4", + "3a085b", + "67b1e3", + "1e3445", + "ffd067", + "962236", + "769ca9", + "5a6b7b", + "7e5243", + "a86f60", + "8f785e", + "cc0595", + "42ffb0", + "d56333", + "b8ced2", + "b91b43", + "f39713", + "e8e8e2", + "ec5b43", + "235476", + "b2a8a5", + "d6c3be", + "49b38b", + "fccf25", + "f59b34", + "375dfc", + "99e6de", + "27a463", + "554543", + "b19e00", + "d4a015", + "9f4b27", + "f9e8dd", + "6b7212", + "9d8e6e", + "4243f8", + "fa5e20", + "f82905", + "555353", + "876f69", + "410d66", + "552d1d", + "f71248", + "fee3f3", + "c16923", + "2b2834", + "0079fc", + "d31e14", + "f83001", + "8dd122", + "fffdf4", + "ffa21e", + "e4afa3", + "fbc311", + "aa940c", + "eedc00", + "fff006", + "9cb4b8", + "a38654", + "ae6c0a", + "2bb26b", + "e2c8c0", + "f89865", + "f86100", + "dcd8d3", + "049d43", + "d0aea9", + "f39d44", + "eeb78c", + "f9f5e9", + "5d3500", + "c3a199", + "aaa6a4", + "caa26a", + "fde7f5", + "fdf008", + "fdcef2", + "f681e6", + "018146", + "d19a54", + "9eb5e1", + "f5fcff", + "3f9323", + "00fcff", + "4a5358", + "fbc800", + "d596a6", + "ffb913", + "e9ba12", + "767c0e", + "f9f6d1", + "d29607", + "f8ce47", + "395ed1", + "ffc5f0", + "cbc1bc", + "d4cfc0" + ], + "images": { + "heads": [ + { + "filename": "101-head-01-hokkaido-heads", + "data": "0x00021f1a0109000154140008000354130006000154010004541200090004541100090005541000090006540e000154090007540c000254090009540600015403000154010009000c540200025402000154020009000f540200015403000800105406000700125404000154070012540100025402000300025403001254040004000254010011540600040010540a00030010540b00020010540c000100035401000354020007540d000100025403000154040005540e00010002540a0003540e00020003540a0001540e0002000454180001000354010001541800010002541b00" + }, + { + "filename": "102-head-02-aomori-heads", + "data": "0x00021b17040d00015409000c0003540400015403000c0005540100025403000c00085403000b00055401000254040005000154010001540300045402000254040004000554020001540500025404000500045407000354040006000454020001540300035404000500055402000254020003540400050005540200035401000354040005000f54030004001054030002001254030001001354030015540200010015540100010005540100055401000a5401000154060003540300085401000e0004540100015403000e00025407000e0001540800" + }, + { + "filename": "103-head-03-iwate-heads", + "data": "0x00021717090900015404000600055403000200015401000754030002000a54020001000a54030001000b54020002000b5401000d54010001000c5401000d54010001000d5401000d540d5401000e540c54020001000c5401000c54020001000c54010001000a540300020006540600040004540600050001540800" + }, + { + "filename": "104-head-04-miyagi-heads", + "data": "0x00031c1808060001540a00025401000500045408000254010003000954040002540100015404000754030001540100025402000500085401000454020004000d54030003000f54020004000d54030003000f54020004000d54030004000d54010001540100030008540100015403000254020003000954050001540200020009540900020008540a00020008540a00010008540b0009540b0009540b00020007540b00050003540c00060002540c00" + }, + { + "filename": "105-head-05-akita-heads", + "data": "0x00031617090300055403000254040009540400095403000a5403000954010002000a540100015401000a5401000d5403000854020004000854010004000754020004000754020004000754020004000654030003000754030003000754030002000954020002000a540100040007540200050007540100070003540300" + }, + { + "filename": "106-head-06-yamagata-heads", + "data": "0x000318180a05000254070005000454050004000754030004000854020004000954010003000b5402000c5401000d5401000c5401000e5402000c5402000c5404000954010004000854020004000854020002000a540200020009540300020008540400020007540500020007540500030006540500060003540500" + }, + { + "filename": "107-head-07-fukushima-heads", + "data": "0x00051b17030e00035407000e0006540200015401000800035403000654020002540700055402000a5406001254050013540500135403001554185401001754010017541854020016540200075402000d540100065406000a540100010003540a00095401000e00095401000f000354010002540300100001540700" + }, + { + "filename": "108-head-08-ibaraki-heads", + "data": "0x0003191807090001540300015404000900025401000554010009000754020009000754020008000854020008000754030008000754030008000654040008000654040007000754040004000a54040002000b54050002000b5405000e5404000e54040002000c54040003000c54030003000c54030004000c5402000700045403000254020010000154010011000154" + }, + { + "filename": "109-head-09-tochigi-heads", + "data": "0x000418160709000454040007000854020005000b54010003000d54010002000e54010001000f54010002000e54010001000f54010001001054105401001054010003000d54010002000e54010002000e54010002000d54020001000e54020002000954010001540400030006540800060003540800" + }, + { + "filename": "110-head-10-gunma-heads", + "data": "0x00021c17060c00015409000a00035409000a000454080009000854050009000754060007000a54050005000b54060002000e54060001000f5406000100105405001254040011540500115405000100025401000d54050004000c54060004000e5404000300095401000754020004000754070003540100030008540a000154040005540d00040003540f00040002541000" + }, + { + "filename": "111-head-11-saitama-heads", + "data": "0x00071c1403080002540f00080005540c000700095401000254060007000e54040005001154030003001354030001001654020017540200185401001854010001000554010012540300025405000f540d000c540e000254020002540500" + }, + { + "filename": "112-head-12-chiba-heads", + "data": "0x000219170801541000010001540f00010002540e000200035404000354050002000c54030001000e5402000100105402000b540400020001540100085405000500065406000400065407000300075407000200085407000100095407000a540700020008540700010009540700010008540800010004540c00020002540d0004540d00010002540e00" + }, + { + "filename": "113-head-13-tokyo-heads", + "data": "0x00091c140301000254160007541200010009540f0001000a540300025402000654010002001654010003001654040015540600135407000f54010001540100080006540300055403000c0003540400045402000d000154070002540200" + }, + { + "filename": "114-head-14-kanagawa-heads", + "data": "0x00041d160306000254120007000254110007000354060004540600070007540300055404000600095402000754020006000a54010009540400155401000200145404000100165403001654040002001454040002001454040003000c5401000654040003000754090004540300020006540c0005540100020005540d0004540200020005540e0004540100030005540c000254040004000254010001540d0002540300" + }, + { + "filename": "115-head-15-niigata-heads", + "data": "0x00021b170413000254020013000254020009000154090004540800015409000554070002540900035402000700035407000454020008000254050006540200070002540400095401000c00095402000c00095402000c00085403000b00095403000a000854050009000754070008000954060007000954070004000d54060002000f540600085402000554010001540600010002540100035403000454090001000154090002540a000b0001540b00" + }, + { + "filename": "116-head-16-toyama-heads", + "data": "0x00051b17050300045409000454020002000454090006540100020003540a00065401000100055408000854010007540600085401001554165401001554165401001554010014540100010014540100010013540200145402000b54010001540100065402000854080003540300010006540f0001000154030002540f00050001541000" + }, + { + "filename": "117-head-17-ishikawa-heads", + "data": "0x00031517080a0003540700055401000600065401000600045403000500035405000500035401000154030006000454030006000454030007000154050006000254050006000154060005000354050005000254060004000454050003000454060002000554060001000754050007540600010007540500020005540600050002540600" + }, + { + "filename": "118-head-18-fukui-heads", + "data": "0x00041a18020c0001540b000b0003540a000c00035409000b0005540100025405000a000a5404000a000d54010009000d54020009000d5402000a000d5401000a000e540b000d540c00035401000254060009000154010004540900090001540100015401000254090006000154020003540c00070005540c000100015401000154010006540d00025401000554010001540e0008541000010007541000020004541200" + }, + { + "filename": "119-head-19-yamanashi-heads", + "data": "0x00051a1806040002540e00030003540e00010001540100065401000354070001000f5404001054040001001054030012540200145401001254010001001354020012540200115401000100105403000200055401000754050001000654030005540500010006540d00030003540e00040002540e00040003540d00050002540d00" + }, + { + "filename": "120-head-20-nagano-heads", + "data": "0x000319170b0b000254010006000154020005540500095405000754020005000754020004000754030003000854030003000a54010003000954020002000b54010002000a54020003000a5401000200085401000354095404000154010008540500020006540600020007540500030005540600030005540600020006540600020004540800" + }, + { + "filename": "121-head-21-gifu-heads", + "data": "0x00031817060c0001540100025402000b000754070002540100085407000a54010007000a54010006000a54020006000b54010006000a5402000700085403000800065404000100025401000b54030001000f5402001054020001001054010002001054020010540300055402000754010003000454040006540100020004540600015401000254020002000154010002540c00050001540c00" + }, + { + "filename": "122-head-22-shizuoka-heads", + "data": "0x00031d14050a0001540d00090002540d000a0001540d00090002540400015408000a000154040003540200035401000800035401000154020008540100060007540200075402000500095401000754020005000c540200055404000c5404000354010003000c540600035403000d5402000554010002000c54040006540c54070005540d540500055401000c5407000454010004000254020003540700045402000a000154080002540300" + }, + { + "filename": "123-head-23-aichi-heads", + "data": "0x00041c170505000154110001000154010004541000010007540f0001000854020002540300015406000e54010002540200025402001754175401001554010001000354010011540100020001540100115402000400105403000300115403000300035401000d540300020001540100015401000d5404000400015402000a540600030002540500015402000354070004000254060001540100025407000b000554070007000154010005540900060005540c00" + }, + { + "filename": "124-head-24-mie-heads", + "data": "0x000318170b06000254050007000254040007000354030006000354040005000454040002000654050001000654060002000554060002000754040002000854030004000854010002000b540200075401000254010003000554050002000354080002000254090003000254080001000354090003540a0002540b00010001540b00" + }, + { + "filename": "125-head-25-shiga-heads", + "data": "0x000316160807000254050007000354040006000554030003000154010007540200030003540100015401000354020003000354030004540100010004540500035401000654040003540100010005540300035402000100045403000454020001000354020007540100010003540300075402000154020009540100025401000a540100025401000954010001000c54010002000a540200020009540300040003540700050002540700" + }, + { + "filename": "126-head-26-kyoto-heads", + "data": "0x0005171507030003540a000154010004540a0005540b0006540100025407000300045401000154070003000654070001000a54050002000b54030003000154010008540300050008540300080005540300080005540300070007540200090001540100035402000b00045401000c0004540c00025401000154" + }, + { + "filename": "127-head-27-osaka-heads", + "data": "0x000616150b05000254010001540200060004540100060005540600055406000554060005540500065405000554010006000454010006000354020005000554010005000654020001540100075403000754010001000554050003540800" + }, + { + "filename": "128-head-28-hyogo-heads", + "data": "0x0004181d07040005540800020007540800030007540100015405000300095405000300095405000400065407000400065407000400085401000154030002000c54030003000e5402000f5401000f5401001054010011541154010010540100025405000754010001540a000454030011000a0001540600090001540700080002540700070003540700060005540600070003540700070001540900" + }, + { + "filename": "129-head-29-nara-heads", + "data": "0x000316140b02000154080002000254010002540100015402000200075402000100075403000100075403000200085401000200095401000854020001000854020002000754020003000654020001000854020001000854020008540300095402000100065404000100055405000100015401000154010001540500" + }, + { + "filename": "130-head-30-wakayama-heads", + "data": "0x0004161606080002540600015402000754060001000a5405000200085406000100085407000100085407000200065408000100085407000a54060009540700020007540100015401000154030003000a54030005000954020006000954010005000b54060009540100070009540900055402000c0001540300" + }, + { + "filename": "131-head-31-tottori-heads", + "data": "0x00091c13061200025402000100015404000254040002540200045402000200015401001054020003001254010002001354010002000554010004540200085402000554030001540400075406540a00035401000254010005540a00015405000454120002541400" + }, + { + "filename": "132-head-32-shimane-heads", + "data": "0x000319190710000254100002540e000154030012001200120012000e00035401000b00055402000a00075401000b0006540100090008540100080007540300070008540300050007540600040006540800030008540700020004540c0005540d00010004540d0004540e00010003540e00010002540f00" + }, + { + "filename": "133-head-33-okayama-heads", + "data": "0x00031b1606050002540400025408000500045401000554060004000c540400015404000c540100035401000200125401000100125402001354020001001154030012540300125403001254030001001154030001001254020001001054040001001154030002000f54040002000a5402000254050003000b5407000300035402000554080004000154040001540b00" + }, + { + "filename": "134-head-34-hiroshima-heads", + "data": "0x00041c19020f000254010001540100035403000f00095402000e000a5402000d000b5402000c000c5402000d000b54020004000154010001540100015401000f540100020017540100030015540200020017540100020017540100010019541a54010019540100155401000354010005540100025401000954010002540200015401000200035404000a540200015401000154020002000254010001540300055405000354040003000154060002540300025409000a000154010002540c00090001541000080002541000" + }, + { + "filename": "135-head-35-yamaguchi-heads", + "data": "0x00051e17030d0001540d000c0002540d000b0003540d00090004540e000a0004540600015406000100035401000254020007540300025406000300015401000154010008540500015406000f540200015401000254060001001554050017540400010017540300010017540300175404000e54020008540300010002540100045401000154010001540300015401000654040001000154030002540b00045401000254010001540154130002540100015401000154010015000154050014000154020001540300" + }, + { + "filename": "136-head-36-tokushima-heads", + "data": "0x00031b15031500015402001200035403001100055402000b0005540100055402000400035402000c54030003001254030002001254040001001554020001001654010001001654010016540200020016540500025402000d54020009000b54040009000a5405000c00065406000c00045408000b00055408000c0003540900" + }, + { + "filename": "137-head-37-kagawa-heads", + "data": "0x00041c15041200045402001000055403000d0001540200055403001200015401000154030018000400015404000254010001540100025408000800085401000154060007000c54050005000e5405000154010001540100115403000100165401000200165402000f540500025402000d54090002000554030002540c00020003541300010003541400020001541500" + }, + { + "filename": "138-head-38-ehime-heads", + "data": "0x00021b1a020f00015409000f00015409001000015408000e0001540a000d00035409000900015402000454080001540c00055402000354010002540b000e540a000f540a00095406000a000754080009000854080007000954090006000a54090005000b5409000300025401000a54090001000254030006540d000154040008540c00070007540b00080004540d00060005540e0007000254010001540e00060004540f0005000154010003540f0007000154010001540f00" + }, + { + "filename": "139-head-39-kochi-heads", + "data": "0x00041a15030d0002540400015403000900085401000254030008000c54030007000e54020007000e54020006000854020007540300095406000454010004000754080003540100050005540a0002540100040006540b000154010001000154010006540e00020006540f00020006540f0002000454110003000454100002000454110001000154010001540100015411000154050001541000" + }, + { + "filename": "140-head-40-fukuoka-heads", + "data": "0x00021b18051200015403000b00045402000154040009000954040007000a54050008000a54040008000a5404000500015401000c5403000300015402000d5403000200035402000f54010014540100020014541154050004000c5406000600015402000754060009000654070008000854060007000954060006000954070005000b5406000500075401000354060006000454040002540600070002540d00070002540d00" + }, + { + "filename": "141-head-41-saga-heads", + "data": "0x00031c19040300015414000200045412000200045412000300045406000354080001000154020003540100095407000200115403000254040010540100035403001554030015540100015401001354020002540100135402001454040001001254050001001254050002000d5401000254060004000a5403000154060006000554010001540b00050007540c00060006540c00070006540b00080006540a00090005540a000c0002540a00" + }, + { + "filename": "142-head-42-nagasaki-heads", + "data": "0x00011a1908080001540900070002540900070002540900070001540a00070001540a00060001540b00060001540b00120012000b00015406000b0001540600120012000900015408001200080004540600050001540200015401000254060008000154020002540500050001540400015401000254040004000354040001540100025403000400025404000254020002540200030001540100015405000754010002540a000154020002540100035408000254010002540100015401000154080001540600" + }, + { + "filename": "143-head-43-kumamoto-heads", + "data": "0x00031816040e00035403000a0002540300035402000800065401000354020007000c54010007000c54010008000b54010009000b5409000a5401000a000854020007000a540300060001540300075403000154010001540600075404000100025402000354010006540500035401000354020006540500035403000154010009540300010002540100015402000a5403000254050009540400010001540100015402000b54030003000154020003540100065404000a0004540600" + }, + { + "filename": "144-head-44-oita-heads", + "data": "0x00041915040b0003540700060002540200055406000600095406000200025401000a54060001000c5401000154060001000a540100015408000b540a0001000a54020001540100035403001154040010540100015403000100025402000c5404000100035402000e5401000200025402000c54030007000c540100015407000d54010007000c54020008000254010004540200035401000b000254040001540300" + }, + { + "filename": "145-head-45-miyazaki-heads", + "data": "0x0004161708070001540100015402000254060008540500085401000500075402000400095401000400085402000500075402000400075403000500065403000400075403000a540400010009540400020008540400030007540400030008540300050005540400050005540400070002540500060003540500080001540500" + }, + { + "filename": "146-head-46-kagoshima-heads", + "data": "0x0003181f03070001540100015402000254070007000754070006000a54050007000954050007000a5404000200015403000b54040007000b54030001000154060005540200045402000154080003540300065409000354010008540900025403000754080003540400055401000600065403000454020007000554040004540100070006540300045401000c0001540200045402000f00035403000e0002540500150015001500030001540f0001540100130001540100120002540100120002540100120001540200060002540300015405000254020009000154010002540400025402000a0004540700" + }, + { + "filename": "147-head-47-okinawa-heads", + "data": "0x00011c15050f00015407000e000154070001541700170017001300015403001300025402001200035402000b0001540500045402000d00025402000354030001540c00075403000e00045405000d00035407000b00045408000a0002540b000a0003540a000b0003540900090003540b0003000154040003540c00090003540b00090002540c00" + } + ] + } +} \ No newline at end of file diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 1b36d74a..9d76f1c7 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -3,7 +3,7 @@ import { ethers, network, SignerWithAddress, Contract } from "hardhat"; import { addresses } from '../../src/utils/addresses'; import { ethers } from 'ethers'; -let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, admin: SignerWithAddress; +let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, user3: SignerWithAddress, admin: SignerWithAddress; let token: Contract, minter: Contract, provider: Contract; const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; @@ -21,7 +21,7 @@ before(async () => { # npx hardhat run scripts/populate_localNouns.ts */ - [owner, user1, user2, admin] = await ethers.getSigners(); + [owner, user1, user2, user3, admin] = await ethers.getSigners(); const factoryProvider = await ethers.getContractFactory('LocalNounsProvider'); provider = await factoryProvider.deploy( @@ -45,17 +45,32 @@ before(async () => { describe('mint functions', function () { let result, tx; + it('mint from non-minter', async function () { await expect(token.connect(user1).functions.mint()) .revertedWith('Cannot use this function'); - await expect(token.connect(user1).functions.mintSelectedPrefecture(user1.address, 1)) + await expect(token.connect(user1).functions.mintSelectedPrefecture(user1.address, 1, 1)) .revertedWith('Sender is not the minter'); }); + it('mint at lock phaze', async function () { + + const [phaze] = await minter.functions.phase(); + expect(phaze).to.equal(0); // Lock + + await expect(minter.connect(user1).functions.mintSelectedPrefecture(1, 1)) + .revertedWith('Sale is locked'); + + await minter.connect(owner).functions.setPhase(2); + const [phaze2] = await minter.functions.phase(); + expect(phaze2).to.equal(2); // PublicSale + + }); + it('mint from minter', async function () { - await minter.connect(user1).functions.mintSelectedPrefecture(1); + await minter.connect(user1).functions.mintSelectedPrefecture(1,1); const [balance] = await token.functions.balanceOf(user1.address); expect(balance.toNumber()).to.equal(1); // user1は1つ保持 @@ -67,53 +82,77 @@ describe('mint functions', function () { expect(totalSupply.toNumber()).to.equal(1); // tokenId=1 }); - it('batch mint', async function () { - - //Aomori,Iwate(バージョン指定),ランダム,ランダム(バージョン指定)を、2個,3個ずつ、user2にmint - await minter.connect(user2).functions.mintSelectedPrefectureBatch([2, 103, 0, 100], [1, 1, 2, 2]); - - // user2に合計6個ミントされる - const [balance] = await token.functions.balanceOf(user2.address); - expect(balance.toNumber()).to.equal(1 + 2 + 3); - - const [owner1] = await token.functions.ownerOf(1); - const [owner2] = await token.functions.ownerOf(2); - const [owner3] = await token.functions.ownerOf(3); - const [owner4] = await token.functions.ownerOf(4); - const [owner5] = await token.functions.ownerOf(5); - const [owner6] = await token.functions.ownerOf(6); - - expect(owner1).to.equal(user2.address); - expect(owner2).to.equal(user2.address); - expect(owner3).to.equal(user2.address); - expect(owner4).to.equal(user2.address); - expect(owner5).to.equal(user2.address); - expect(owner6).to.equal(user2.address); - - // Traitsに指定した都道府県名が設定される - const [traits1] = await provider.functions.generateTraits(1); - const [traits2] = await provider.functions.generateTraits(2); - const [traits3] = await provider.functions.generateTraits(3); - const [traits4] = await provider.functions.generateTraits(4); - const [traits5] = await provider.functions.generateTraits(5); - const [traits6] = await provider.functions.generateTraits(6); - // head,accessoryがランダムなので除外 - // expect(traits1).to.equal('{"trait_type": "prefecture" , "value":"Aomori"}'); - // expect(traits2).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); - // expect(traits3).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); - // expect(traits4).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); - // expect(traits5).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); - // expect(traits6).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); - // console.log(traits1); - // console.log(traits2); - // console.log(traits3); - // console.log(traits4); - // console.log(traits5); - // console.log(traits6); + it('multiple mint', async function () { + + const [balance0] = await token.functions.balanceOf(user3.address); + await minter.connect(user3).functions.mintSelectedPrefecture(1,3); + + const [balance] = await token.functions.balanceOf(user3.address); + + expect(balance.toNumber()).to.equal(3); // user3は3つ追加 + + const [owner0] = await token.functions.ownerOf(1); + expect(owner0).to.equal(user3.address); + + const [owner1] = await token.functions.ownerOf(2); + expect(owner1).to.equal(user3.address); + + const [owner2] = await token.functions.ownerOf(3); + expect(owner2).to.equal(user3.address); const [totalSupply] = await token.functions.totalSupply(); - expect(totalSupply.toNumber()).to.equal(7); + expect(totalSupply.toNumber()).to.equal(4); // tokenId=1 }); + + // バッチミントは削除 + // it('batch mint', async function () { + + // //Aomori,Iwate(バージョン指定),ランダム,ランダム(バージョン指定)を、2個,3個ずつ、user2にmint + // // await minter.connect(user2).functions.mintSelectedPrefectureBatch([2, 103, 0, 100], [1, 1, 2, 2]); + // await minter.connect(user2).functions.mintSelectedPrefectureBatch([2, 3, 0, 0], [1, 1, 2, 2]); // バージョン未登録なのでバージョン指定なし + + // // user2に合計6個ミントされる + // const [balance] = await token.functions.balanceOf(user2.address); + // expect(balance.toNumber()).to.equal(1 + 2 + 3); + + // const [owner1] = await token.functions.ownerOf(1); + // const [owner2] = await token.functions.ownerOf(2); + // const [owner3] = await token.functions.ownerOf(3); + // const [owner4] = await token.functions.ownerOf(4); + // const [owner5] = await token.functions.ownerOf(5); + // const [owner6] = await token.functions.ownerOf(6); + + // expect(owner1).to.equal(user2.address); + // expect(owner2).to.equal(user2.address); + // expect(owner3).to.equal(user2.address); + // expect(owner4).to.equal(user2.address); + // expect(owner5).to.equal(user2.address); + // expect(owner6).to.equal(user2.address); + + // // Traitsに指定した都道府県名が設定される + // const [traits1] = await provider.functions.generateTraits(1); + // const [traits2] = await provider.functions.generateTraits(2); + // const [traits3] = await provider.functions.generateTraits(3); + // const [traits4] = await provider.functions.generateTraits(4); + // const [traits5] = await provider.functions.generateTraits(5); + // const [traits6] = await provider.functions.generateTraits(6); + // // head,accessoryがランダムなので除外 + // // expect(traits1).to.equal('{"trait_type": "prefecture" , "value":"Aomori"}'); + // // expect(traits2).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); + // // expect(traits3).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); + // // expect(traits4).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); + // // expect(traits5).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); + // // expect(traits6).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); + // // console.log(traits1); + // // console.log(traits2); + // // console.log(traits3); + // // console.log(traits4); + // // console.log(traits5); + // // console.log(traits6); + + // const [totalSupply] = await token.functions.totalSupply(); + // expect(totalSupply.toNumber()).to.equal(7); + // }); }); describe('P2P', function () { @@ -122,7 +161,7 @@ describe('P2P', function () { const price = ethers.BigNumber.from('1000000000000000'); it('not on sale', async function () { - await minter.connect(user1).functions.mintSelectedPrefectureBatch([10], [1]); + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; @@ -168,12 +207,12 @@ describe('P2PTradable', function () { it('mint for test', async function () { // for user1 - await minter.connect(user1).functions.mintSelectedPrefectureBatch([5], [1]); + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; // for user2 - await minter.connect(user2).functions.mintSelectedPrefectureBatch([10], [1]); + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1); result = await token.totalSupply(); tokenId2 = result.toNumber() - 1; @@ -232,12 +271,12 @@ describe('P2PTradable', function () { it('put trade(都道府県指定なし)', async function () { // for user1 - await minter.connect(user1).functions.mintSelectedPrefectureBatch([10], [1]); + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; // for user2 - await minter.connect(user2).functions.mintSelectedPrefectureBatch([10], [1]); + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1); result = await token.totalSupply(); tokenId2 = result.toNumber() - 1; @@ -264,12 +303,12 @@ describe('P2PTradable', function () { it('cancel trade', async function () { // for user1 - await minter.connect(user1).functions.mintSelectedPrefectureBatch([10], [1]); + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; // for user2 - await minter.connect(user2).functions.mintSelectedPrefectureBatch([10], [1]); + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1); result = await token.totalSupply(); tokenId2 = result.toNumber() - 1; diff --git a/src/utils/addresses/localNounsDescriptor_localhost.ts b/src/utils/addresses/localNounsDescriptor_localhost.ts index e434919b..2475711b 100644 --- a/src/utils/addresses/localNounsDescriptor_localhost.ts +++ b/src/utils/addresses/localNounsDescriptor_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsDescriptor:"0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", + localNounsDescriptor:"0xDC11f7E700A4c898AE5CAddB1082cFfa76512aDD", } diff --git a/src/utils/addresses/localNounsDescriptor_mumbai.ts b/src/utils/addresses/localNounsDescriptor_mumbai.ts index 1091d558..5d3751e9 100644 --- a/src/utils/addresses/localNounsDescriptor_mumbai.ts +++ b/src/utils/addresses/localNounsDescriptor_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsDescriptor:"0xc0ce1B8DCd1045Ded1aBc983eb0577C91Dc67e0f", + localNounsDescriptor:"0x7351860b203bDDAC7e987F7d3B4e809960d05cf1", } diff --git a/src/utils/addresses/localNounsMinter_localhost.ts b/src/utils/addresses/localNounsMinter_localhost.ts index 327519a1..c08e5584 100644 --- a/src/utils/addresses/localNounsMinter_localhost.ts +++ b/src/utils/addresses/localNounsMinter_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsMinter:"0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", + localNounsMinter:"0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", } diff --git a/src/utils/addresses/localNounsMinter_mumbai.ts b/src/utils/addresses/localNounsMinter_mumbai.ts index 0ff65870..b9956f0b 100644 --- a/src/utils/addresses/localNounsMinter_mumbai.ts +++ b/src/utils/addresses/localNounsMinter_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsMinter:"0x461F5E3658380593E9a08D84c9074a8C9FE1fe1F", + localNounsMinter:"0x0d602965065c64e6d5d69834C246863472aac4A5", } diff --git a/src/utils/addresses/localNounsProvider_localhost.ts b/src/utils/addresses/localNounsProvider_localhost.ts index f732037f..ff3d0c5d 100644 --- a/src/utils/addresses/localNounsProvider_localhost.ts +++ b/src/utils/addresses/localNounsProvider_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsProvider:"0x0165878A594ca255338adfa4d48449f69242Eb8F", + localNounsProvider:"0x51A1ceB83B83F1985a81C295d1fF28Afef186E02", } diff --git a/src/utils/addresses/localNounsProvider_mumbai.ts b/src/utils/addresses/localNounsProvider_mumbai.ts index a54f793c..36843f0d 100644 --- a/src/utils/addresses/localNounsProvider_mumbai.ts +++ b/src/utils/addresses/localNounsProvider_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsProvider:"0x8d65Dd27E7910C18E6B83976753e912137f97454", + localNounsProvider:"0xfB4Fa72bcA36e02E24D2081EcBcf8D6d071CCE03", } diff --git a/src/utils/addresses/localNounsToken_localhost.ts b/src/utils/addresses/localNounsToken_localhost.ts index 4e2cbbb0..09135c78 100644 --- a/src/utils/addresses/localNounsToken_localhost.ts +++ b/src/utils/addresses/localNounsToken_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsToken:"0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + localNounsToken:"0x36b58F5C1969B7b6591D752ea6F5486D069010AB", } diff --git a/src/utils/addresses/localNounsToken_mumbai.ts b/src/utils/addresses/localNounsToken_mumbai.ts index 78b569d3..c8683abf 100644 --- a/src/utils/addresses/localNounsToken_mumbai.ts +++ b/src/utils/addresses/localNounsToken_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsToken:"0xbf1028b9CE3A40b1C13329dcb8a17ab9B96ffdA5", + localNounsToken:"0x4d21F695453D2d206D72A08086f0440A97A82125", } diff --git a/src/utils/addresses/localseeder_localhost.ts b/src/utils/addresses/localseeder_localhost.ts index a901ddde..83de0f6d 100644 --- a/src/utils/addresses/localseeder_localhost.ts +++ b/src/utils/addresses/localseeder_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localseeder:"0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", + localseeder:"0xD8a5a9b31c3C0232E196d518E89Fd8bF83AcAd43", } diff --git a/src/utils/addresses/localseeder_mumbai.ts b/src/utils/addresses/localseeder_mumbai.ts index ce9db790..bad495e6 100644 --- a/src/utils/addresses/localseeder_mumbai.ts +++ b/src/utils/addresses/localseeder_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localseeder:"0x87ca24C18dC424Bc3018F4955aca1AC123d52A97", + localseeder:"0x14E6BC05997989d6B5a1F2910Fe9eD4eC25F1294", } diff --git a/src/utils/addresses/nftDescriptor_localhost.ts b/src/utils/addresses/nftDescriptor_localhost.ts new file mode 100644 index 00000000..b9e2a303 --- /dev/null +++ b/src/utils/addresses/nftDescriptor_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + nftDescriptor:"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", +} diff --git a/src/utils/addresses/nftDescriptor_mumbai.ts b/src/utils/addresses/nftDescriptor_mumbai.ts index 0631487f..26646f74 100644 --- a/src/utils/addresses/nftDescriptor_mumbai.ts +++ b/src/utils/addresses/nftDescriptor_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - nftDescriptor: "0xC93218fF7C44cbEB57c7661DCa886deCBc0E07C0", + nftDescriptor:"0x77dD7d8d4a7091a64c25Eb0127839ff1f467edCa", } diff --git a/src/utils/addresses/nounsDescriptor_localhost.ts b/src/utils/addresses/nounsDescriptor_localhost.ts new file mode 100644 index 00000000..2bfe8fe1 --- /dev/null +++ b/src/utils/addresses/nounsDescriptor_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + nounsDescriptor:"0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", +} diff --git a/src/utils/addresses/nounsDescriptor_mumbai.ts b/src/utils/addresses/nounsDescriptor_mumbai.ts index b62e697d..908194a9 100644 --- a/src/utils/addresses/nounsDescriptor_mumbai.ts +++ b/src/utils/addresses/nounsDescriptor_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - nounsDescriptor: "0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107", + nounsDescriptor:"0xE61d3572FDc4Bd1A49fa8bc691E3A0650FF0DdfC", } diff --git a/src/utils/addresses/nounsSeeder_localhost.ts b/src/utils/addresses/nounsSeeder_localhost.ts new file mode 100644 index 00000000..55c0737e --- /dev/null +++ b/src/utils/addresses/nounsSeeder_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + nounsSeeder:"0x5FbDB2315678afecb367f032d93F642f64180aa3", +} diff --git a/src/utils/addresses/nounsSeeder_mumbai.ts b/src/utils/addresses/nounsSeeder_mumbai.ts index aa8f7c21..8433cc5d 100644 --- a/src/utils/addresses/nounsSeeder_mumbai.ts +++ b/src/utils/addresses/nounsSeeder_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - nounsSeeder: "0x5f5C984E0BAf150D5a74ae21f4777Fd1947DE8c9", + nounsSeeder:"0x86c95EC4fA955505E0B904CFCF232E93e17a1c75", } From 3e2472eee7940c918283d59d2b584b9a3d553f1e Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 25 Oct 2023 08:25:22 +0900 Subject: [PATCH 089/146] =?UTF-8?q?mintSelectedPrefectureBatch=E3=81=AE?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index abc8b21a..5ad2f851 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -80,26 +80,6 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { return _nextTokenId() - 1; } - function mintSelectedPrefectureBatch( - address _to, - uint256[] memory _prefectureId, - uint256[] memory _amount - ) public virtual returns (uint256 tokenId) { - require(msg.sender == minter, 'Sender is not the minter'); - require(_prefectureId.length == _amount.length, 'parametars length are different'); - require(_prefectureId.length > 0, 'parametars length is zero'); - - uint256 counter = 0; - for (uint256 i = 0; i < _prefectureId.length; i++) { - for (uint256 j = 0; j < _amount[i]; j++) { - assetProvider2.mint(_prefectureId[i], _nextTokenId() + counter++); - } - } - - _safeMint(_to, counter); - - return _nextTokenId() - 1; - } function mint() public payable override returns (uint256 tokenId) { revert('Cannot use this function'); From 45347a98eab42b9e3dd26183e942cc99bf444811 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 25 Oct 2023 09:17:04 +0900 Subject: [PATCH 090/146] =?UTF-8?q?mintSelectedPrefectureBatch=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contracts/localNouns/interfaces/ILocalNounsToken.sol | 6 ------ 1 file changed, 6 deletions(-) diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol index c9330d17..12964e93 100644 --- a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol +++ b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol @@ -20,12 +20,6 @@ pragma solidity ^0.8.6; interface ILocalNounsToken { function mintSelectedPrefecture(address to, uint256 prefectureId, uint256 _amount) external returns (uint256 tokenId); - function mintSelectedPrefectureBatch( - address _to, - uint256[] memory _prefectureId, - uint256[] memory _amount - ) external returns (uint256 tokenId); - function setMinter(address _minter) external; // Fires when the owner puts the trade From e660d94b4c590426237de7e74ea663c5d8111c97 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 25 Oct 2023 09:21:53 +0900 Subject: [PATCH 091/146] =?UTF-8?q?tokenGate=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/localNouns/LocalNounsMinter.sol | 11 +++++++++-- contract/test/localNouns.ts | 9 +++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol index e7a473bf..026924af 100644 --- a/contract/contracts/localNouns/LocalNounsMinter.sol +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -19,9 +19,11 @@ pragma solidity ^0.8.6; import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; import './interfaces/ILocalNounsToken.sol'; +import '../interfaces/ITokenGate.sol'; contract LocalNounsMinter is Ownable { ILocalNounsToken public token; + ITokenGate public immutable tokenGate; uint256 public mintPriceForSpecified = 0.03 ether; uint256 public mintPriceForNotSpecified = 0.01 ether; @@ -40,9 +42,10 @@ contract LocalNounsMinter is Ownable { address public administratorsAddress; // 運営ウォレット - constructor(ILocalNounsToken _token) { + constructor(ILocalNounsToken _token, ITokenGate _tokenGate) { token = _token; administratorsAddress = msg.sender; + tokenGate = _tokenGate; } function setLocalNounsToken(ILocalNounsToken _token) external onlyOwner { @@ -66,7 +69,11 @@ contract LocalNounsMinter is Ownable { } function mintSelectedPrefecture(uint256 _prefectureId, uint256 _amount) public payable returns (uint256 tokenId) { - require(phase != SalePhase.Locked, 'Sale is locked'); + if (phase == SalePhase.Locked) { + revert('Sale is locked'); + } else if (phase == SalePhase.PreSale) { + require(tokenGate.balanceOf(msg.sender) > 0); + } return token.mintSelectedPrefecture(msg.sender, _prefectureId, _amount); } diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 9d76f1c7..da745bb6 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -4,7 +4,7 @@ import { addresses } from '../../src/utils/addresses'; import { ethers } from 'ethers'; let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, user3: SignerWithAddress, admin: SignerWithAddress; -let token: Contract, minter: Contract, provider: Contract; +let token: Contract, minter: Contract, provider: Contract, tokenGate: Contract; const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; @@ -23,6 +23,11 @@ before(async () => { [owner, user1, user2, user3, admin] = await ethers.getSigners(); + const factoryTokenGate = await ethers.getContractFactory('AssetTokenGate'); + tokenGate = await factoryTokenGate.deploy(); + await tokenGate.deployed(); + // console.log(`##LocalNounsProvider="${provider.address}"`); + const factoryProvider = await ethers.getContractFactory('LocalNounsProvider'); provider = await factoryProvider.deploy( nounsDescriptorAddress, localNounsDescriptorAddress, nounsSeederAddress, localSeederAddress); @@ -35,7 +40,7 @@ before(async () => { // console.log(`##LocalNounsToken="${token.address}"`); const factoryMinter = await ethers.getContractFactory('LocalNounsMinter'); - minter = await factoryMinter.deploy(token.address); + minter = await factoryMinter.deploy(token.address, tokenGate.address); await minter.deployed(); // console.log(`##LocalNounsMinter="${minter.address}"`); From 73172d86cacb5d22aa7ef2b068f9217675291e34 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 25 Oct 2023 10:45:21 +0900 Subject: [PATCH 092/146] =?UTF-8?q?whitelist=E3=82=92public=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/libs/AssetTokenGate.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contract/contracts/libs/AssetTokenGate.sol b/contract/contracts/libs/AssetTokenGate.sol index a4a4fd1b..dd74f803 100644 --- a/contract/contracts/libs/AssetTokenGate.sol +++ b/contract/contracts/libs/AssetTokenGate.sol @@ -11,7 +11,7 @@ import '@openzeppelin/contracts/token/ERC721/IERC721.sol'; import '../interfaces/ITokenGate.sol'; contract AssetTokenGate is Ownable, ITokenGate { - IERC721[] whitelist; + IERC721[] public whitelist; function setWhitelist(IERC721[] memory _whitelist) external onlyOwner { whitelist = _whitelist; From 6664fcd7a6fcaf2395cc1bde4aa8fe90d4205796 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 25 Oct 2023 10:46:32 +0900 Subject: [PATCH 093/146] =?UTF-8?q?tokenGate=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contracts/localNouns/LocalNounsMinter.sol | 5 ++- contract/test/localNouns.ts | 44 ++++++++++++++++--- src/utils/addresses.ts | 3 ++ src/utils/addresses/sample_localhost.ts | 7 ++- 4 files changed, 47 insertions(+), 12 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol index 026924af..d5225813 100644 --- a/contract/contracts/localNouns/LocalNounsMinter.sol +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -28,7 +28,7 @@ contract LocalNounsMinter is Ownable { uint256 public mintPriceForSpecified = 0.03 ether; uint256 public mintPriceForNotSpecified = 0.01 ether; - uint256 public constant mintMax = 1200; + uint256 public constant mintMax = 1500; mapping(address => uint256) public preferentialPurchacedCount; @@ -72,8 +72,9 @@ contract LocalNounsMinter is Ownable { if (phase == SalePhase.Locked) { revert('Sale is locked'); } else if (phase == SalePhase.PreSale) { - require(tokenGate.balanceOf(msg.sender) > 0); + require(tokenGate.balanceOf(msg.sender) > 0, 'TokenGate token is needed'); } + return token.mintSelectedPrefecture(msg.sender, _prefectureId, _amount); } diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index da745bb6..28b3cd73 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -2,14 +2,16 @@ import { expect } from 'chai'; import { ethers, network, SignerWithAddress, Contract } from "hardhat"; import { addresses } from '../../src/utils/addresses'; import { ethers } from 'ethers'; +import { abi as sampleTokenAbi } from "../artifacts/contracts/sampleToken.sol/sampleToken"; -let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, user3: SignerWithAddress, admin: SignerWithAddress; -let token: Contract, minter: Contract, provider: Contract, tokenGate: Contract; +let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, user3: SignerWithAddress, user4: SignerWithAddress, admin: SignerWithAddress; +let token: Contract, minter: Contract, provider: Contract, tokenGate: Contract, sampleToken: Contract; const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; const nounsSeederAddress = addresses.nounsSeeder[network.name]; const localSeederAddress = addresses.localSeeder[network.name]; +const sampleTokenAddress = addresses.sampleToken[network.name]; before(async () => { /* `npx hardhat node`実行後、このスクリプトを実行する前に、Nouns,LocalNounsの関連するコントラクトを @@ -19,14 +21,14 @@ before(async () => { # npx hardhat run scripts/populate_nounsV1.ts # npx hardhat run scripts/deploy_localNouns.ts # npx hardhat run scripts/populate_localNouns.ts + # npx hardhat run scripts/deploy_sample.ts */ - [owner, user1, user2, user3, admin] = await ethers.getSigners(); + [owner, user1, user2, user3, user4, admin] = await ethers.getSigners(); const factoryTokenGate = await ethers.getContractFactory('AssetTokenGate'); tokenGate = await factoryTokenGate.deploy(); await tokenGate.deployed(); - // console.log(`##LocalNounsProvider="${provider.address}"`); const factoryProvider = await ethers.getContractFactory('LocalNounsProvider'); provider = await factoryProvider.deploy( @@ -46,6 +48,12 @@ before(async () => { await token.setMinter(minter.address); + // sampleTokenのコントラクト定義 + sampleToken = await ethers.getContractAt(sampleTokenAbi, sampleTokenAddress); + + // tokenGateにsampleTokenをセット + await tokenGate.setWhitelist([sampleToken.address]); + }); describe('mint functions', function () { @@ -75,7 +83,7 @@ describe('mint functions', function () { }); it('mint from minter', async function () { - await minter.connect(user1).functions.mintSelectedPrefecture(1,1); + await minter.connect(user1).functions.mintSelectedPrefecture(1, 1); const [balance] = await token.functions.balanceOf(user1.address); expect(balance.toNumber()).to.equal(1); // user1は1つ保持 @@ -90,7 +98,7 @@ describe('mint functions', function () { it('multiple mint', async function () { const [balance0] = await token.functions.balanceOf(user3.address); - await minter.connect(user3).functions.mintSelectedPrefecture(1,3); + await minter.connect(user3).functions.mintSelectedPrefecture(1, 3); const [balance] = await token.functions.balanceOf(user3.address); @@ -109,6 +117,30 @@ describe('mint functions', function () { expect(totalSupply.toNumber()).to.equal(4); // tokenId=1 }); + it('tokenGate', async function () { + + await minter.connect(owner).functions.setPhase(1); + const [phaze] = await minter.functions.phase(); + expect(phaze).to.equal(1); // PreSale + + await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 1)) + .revertedWith('TokenGate token is needed'); + + // sampleTokenをミント + await sampleToken.connect(user4).functions.mint(); + + await minter.connect(user4).functions.mintSelectedPrefecture(1, 3); + + const [balance] = await token.functions.balanceOf(user4.address); + + expect(balance.toNumber()).to.equal(3); // user3は3つ追加 + + await minter.connect(owner).functions.setPhase(2); + const [phaze2] = await minter.functions.phase(); + expect(phaze2).to.equal(2); // PublicSale + + }); + // バッチミントは削除 // it('batch mint', async function () { diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index 20119641..345e2521 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -183,6 +183,9 @@ export const addresses: Addresses = { goerli: sample_goerli.providerAddress, localhost: sample_localhost.providerAddress, }, + sampleToken: { + localhost: sample_localhost.sampleToken, + }, assetStore: { goerli: store_goerli.storeAddress, mainnet: store_mainnet.storeAddress, diff --git a/src/utils/addresses/sample_localhost.ts b/src/utils/addresses/sample_localhost.ts index 10429ab4..153d86ba 100644 --- a/src/utils/addresses/sample_localhost.ts +++ b/src/utils/addresses/sample_localhost.ts @@ -1,5 +1,4 @@ export const addresses = { - svgHelperAddress: "0xAD2935E147b61175D5dc3A9e7bDa93B0975A43BA", - providerAddress: "0x00CAC06Dd0BB4103f8b62D280fE9BCEE8f26fD59", - sampleToken: "0x4951A1C579039EbfCBA0BE33D2cd3A6D30b0f802", -}; + providerAddress:"0x7Cf4be31f546c04787886358b9486ca3d62B9acf", + sampleToken:"0x33E45b187da34826aBCEDA1039231Be46f1b05Af" +} From c4e83c4bf469f93c21babf86cd1c9f01e302ba06 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 25 Oct 2023 23:30:28 +0900 Subject: [PATCH 094/146] =?UTF-8?q?tokenGate=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/deploy_localNouns.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index 6f3357b4..59ce8bad 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -12,6 +12,10 @@ async function main() { const [minter] = await ethers.getSigners(); console.log(`##minter="${minter.address}"`); + const factoryTokenGate = await ethers.getContractFactory('AssetTokenGate'); + const tokenGate = await factoryTokenGate.deploy(); + await tokenGate.deployed(); + const factorySeeder = await ethers.getContractFactory('LocalNounsSeeder'); const localseeder = await factorySeeder.deploy(); await localseeder.deployed(); @@ -57,7 +61,7 @@ async function main() { await writeFile(`../src/utils/addresses/localNounsToken_${network.name}.ts`, addresses4, () => { }); const factoryMinter = await ethers.getContractFactory('LocalNounsMinter'); - const minterContract = await factoryMinter.deploy(token.address); + const minterContract = await factoryMinter.deploy(token.address, tokenGate.address); await minterContract.deployed(); console.log(`##LocalNounsMinter="${minterContract.address}"`); await runCommand(`npx hardhat verify ${minterContract.address} ${token.address} --network ${network.name} &`); From 9a0f2cfbf16b05354d030ec2465fa58869eb70f4 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 26 Oct 2023 07:36:52 +0900 Subject: [PATCH 095/146] =?UTF-8?q?*=5Flocalhost.ts=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 390fe766..54c23a40 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,5 @@ pnpm-debug.log* *~ -contract/contracts/fonts/font.sol \ No newline at end of file +contract/contracts/fonts/font.sol +src/utils/addresses/*_localhost.ts \ No newline at end of file From 99b35481e5af8cddc612be8d5aaa255044d766a5 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 26 Oct 2023 08:03:47 +0900 Subject: [PATCH 096/146] =?UTF-8?q?Send=20ETH=20=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contracts/localNouns/LocalNounsMinter.sol | 12 ++++- contract/test/localNouns.ts | 52 ++++++++++++++----- 2 files changed, 50 insertions(+), 14 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol index d5225813..f84ae172 100644 --- a/contract/contracts/localNouns/LocalNounsMinter.sol +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -25,8 +25,8 @@ contract LocalNounsMinter is Ownable { ILocalNounsToken public token; ITokenGate public immutable tokenGate; - uint256 public mintPriceForSpecified = 0.03 ether; - uint256 public mintPriceForNotSpecified = 0.01 ether; + uint256 public mintPriceForSpecified = 0.003 ether; + uint256 public mintPriceForNotSpecified = 0.001 ether; uint256 public constant mintMax = 1500; @@ -74,6 +74,14 @@ contract LocalNounsMinter is Ownable { } else if (phase == SalePhase.PreSale) { require(tokenGate.balanceOf(msg.sender) > 0, 'TokenGate token is needed'); } + + uint256 mintPrice; + if(_prefectureId == 0){ + mintPrice = mintPriceForNotSpecified; + }else{ + mintPrice = mintPriceForSpecified; + } + require(msg.value >= mintPrice * _amount, 'Must send the mint price'); return token.mintSelectedPrefecture(msg.sender, _prefectureId, _amount); } diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 28b3cd73..a19201dd 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -83,7 +83,9 @@ describe('mint functions', function () { }); it('mint from minter', async function () { - await minter.connect(user1).functions.mintSelectedPrefecture(1, 1); + + const txParams = { value: ethers.utils.parseUnits("0.001", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(0, 1,txParams); const [balance] = await token.functions.balanceOf(user1.address); expect(balance.toNumber()).to.equal(1); // user1は1つ保持 @@ -98,7 +100,9 @@ describe('mint functions', function () { it('multiple mint', async function () { const [balance0] = await token.functions.balanceOf(user3.address); - await minter.connect(user3).functions.mintSelectedPrefecture(1, 3); + + const txParams = { value: ethers.utils.parseUnits("0.009", "ether") }; + await minter.connect(user3).functions.mintSelectedPrefecture(1, 3, txParams); const [balance] = await token.functions.balanceOf(user3.address); @@ -123,17 +127,18 @@ describe('mint functions', function () { const [phaze] = await minter.functions.phase(); expect(phaze).to.equal(1); // PreSale - await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 1)) + const txParams = { value: ethers.utils.parseUnits("0.009", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 1, txParams)) .revertedWith('TokenGate token is needed'); // sampleTokenをミント await sampleToken.connect(user4).functions.mint(); - await minter.connect(user4).functions.mintSelectedPrefecture(1, 3); + await minter.connect(user4).functions.mintSelectedPrefecture(1, 3, txParams); const [balance] = await token.functions.balanceOf(user4.address); - expect(balance.toNumber()).to.equal(3); // user3は3つ追加 + expect(balance.toNumber()).to.equal(3); // user4は3つ追加 await minter.connect(owner).functions.setPhase(2); const [phaze2] = await minter.functions.phase(); @@ -141,6 +146,24 @@ describe('mint functions', function () { }); + it('Send eth', async function () { + + await minter.connect(owner).functions.setPhase(2); + const [phaze] = await minter.functions.phase(); + expect(phaze).to.equal(2); // PreSale + + // 都道府県指定 OKパターンは'multiple mint'テストで実施 + const txParams = { value: ethers.utils.parseUnits("0.0059", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 2, txParams)) + .revertedWith('Must send the mint price'); + + // 都道府県指定なし OKパターンは'mint from minter'テストで実施 + const txParams2 = { value: ethers.utils.parseUnits("0.0019", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(0, 2, txParams2)) + .revertedWith('Must send the mint price'); + + }); + // バッチミントは削除 // it('batch mint', async function () { @@ -198,7 +221,9 @@ describe('P2P', function () { const price = ethers.BigNumber.from('1000000000000000'); it('not on sale', async function () { - await minter.connect(user1).functions.mintSelectedPrefecture(10, 1); + + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; @@ -244,12 +269,13 @@ describe('P2PTradable', function () { it('mint for test', async function () { // for user1 - await minter.connect(user1).functions.mintSelectedPrefecture(5, 1); + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; // for user2 - await minter.connect(user2).functions.mintSelectedPrefecture(10, 1); + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); result = await token.totalSupply(); tokenId2 = result.toNumber() - 1; @@ -308,12 +334,13 @@ describe('P2PTradable', function () { it('put trade(都道府県指定なし)', async function () { // for user1 - await minter.connect(user1).functions.mintSelectedPrefecture(10, 1); + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; // for user2 - await minter.connect(user2).functions.mintSelectedPrefecture(10, 1); + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); result = await token.totalSupply(); tokenId2 = result.toNumber() - 1; @@ -340,12 +367,13 @@ describe('P2PTradable', function () { it('cancel trade', async function () { // for user1 - await minter.connect(user1).functions.mintSelectedPrefecture(10, 1); + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; // for user2 - await minter.connect(user2).functions.mintSelectedPrefecture(10, 1); + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); result = await token.totalSupply(); tokenId2 = result.toNumber() - 1; From e494a5793137b165f6fd8a22bdc840a314946edf Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 26 Oct 2023 08:49:52 +0900 Subject: [PATCH 097/146] =?UTF-8?q?=5FnextTokenId=E3=81=AF=5FsafeMint?= =?UTF-8?q?=E3=81=A7=E6=9B=B4=E6=96=B0=E3=81=95=E3=82=8C=E3=82=8B=E3=81=AE?= =?UTF-8?q?=E3=81=A7=20index=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 5ad2f851..72ef81ef 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -74,13 +74,12 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { ) public virtual returns (uint256 tokenId) { require(msg.sender == minter, 'Sender is not the minter'); for (uint256 i = 0; i < _amount; i++) { - assetProvider2.mint(_prefectureId, _nextTokenId()); + assetProvider2.mint(_prefectureId, _nextTokenId() + i); } _safeMint(_to, _amount); return _nextTokenId() - 1; } - function mint() public payable override returns (uint256 tokenId) { revert('Cannot use this function'); } From eb3397205415946a5d61d31ce57280b7ef8c1f2b Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 26 Oct 2023 08:51:17 +0900 Subject: [PATCH 098/146] =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C?= =?UTF-8?q?=E3=81=94=E3=81=A8=E3=81=AE=E3=83=9F=E3=83=B3=E3=83=88=E6=95=B0?= =?UTF-8?q?mintNumberPerPrefecture=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../localNouns/LocalNounsProvider.sol | 5 +- contract/test/localNouns.ts | 74 ++++++------------- 2 files changed, 26 insertions(+), 53 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index 8fad8bff..c0f6e201 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -32,6 +32,7 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { mapping(uint256 => INounsSeeder.Seed) public seeds; mapping(uint256 => uint256) public tokenIdToPrefectureId; mapping(uint256 => string) public prefectureName; + mapping(uint256 => uint256) public mintNumberPerPrefecture; // 都道府県ごとのミント数 constructor( INounsDescriptor _descriptor, @@ -172,7 +173,9 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { } seeds[_assetId] = generateSeed(prefectureId, _assetId); - tokenIdToPrefectureId[_assetId] = prefectureId % 100; // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 + uint256 prefectureId = prefectureId % 100; // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 + tokenIdToPrefectureId[_assetId] = prefectureId; + mintNumberPerPrefecture[prefectureId]++; nextTokenId++; return _assetId; diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index a19201dd..2d345565 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -95,6 +95,10 @@ describe('mint functions', function () { const [totalSupply] = await token.functions.totalSupply(); expect(totalSupply.toNumber()).to.equal(1); // tokenId=1 + + const [traits1] = await provider.functions.generateTraits(0); + console.log('mint from minter',traits1); + }); it('multiple mint', async function () { @@ -102,7 +106,7 @@ describe('mint functions', function () { const [balance0] = await token.functions.balanceOf(user3.address); const txParams = { value: ethers.utils.parseUnits("0.009", "ether") }; - await minter.connect(user3).functions.mintSelectedPrefecture(1, 3, txParams); + await minter.connect(user3).functions.mintSelectedPrefecture(16, 3, txParams); const [balance] = await token.functions.balanceOf(user3.address); @@ -119,6 +123,23 @@ describe('mint functions', function () { const [totalSupply] = await token.functions.totalSupply(); expect(totalSupply.toNumber()).to.equal(4); // tokenId=1 + + // Traitsに指定した都道府県名が設定される + const [traits1] = await provider.functions.generateTraits(1); + const [traits2] = await provider.functions.generateTraits(2); + const [traits3] = await provider.functions.generateTraits(3); + // head,accessoryがランダムなので県のみチェック(head,accessoryは目視) + console.log('multiple mint',traits1); + console.log('multiple mint',traits2); + console.log('multiple mint',traits3); + expect(traits1.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); + expect(traits2.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); + expect(traits3.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); + + // 都道府県ごとのミント数 + const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(16); + expect(mintNumberPerPrefecture.toNumber()).to.equal(3); // tokenId=1 + }); it('tokenGate', async function () { @@ -164,57 +185,6 @@ describe('mint functions', function () { }); - // バッチミントは削除 - // it('batch mint', async function () { - - // //Aomori,Iwate(バージョン指定),ランダム,ランダム(バージョン指定)を、2個,3個ずつ、user2にmint - // // await minter.connect(user2).functions.mintSelectedPrefectureBatch([2, 103, 0, 100], [1, 1, 2, 2]); - // await minter.connect(user2).functions.mintSelectedPrefectureBatch([2, 3, 0, 0], [1, 1, 2, 2]); // バージョン未登録なのでバージョン指定なし - - // // user2に合計6個ミントされる - // const [balance] = await token.functions.balanceOf(user2.address); - // expect(balance.toNumber()).to.equal(1 + 2 + 3); - - // const [owner1] = await token.functions.ownerOf(1); - // const [owner2] = await token.functions.ownerOf(2); - // const [owner3] = await token.functions.ownerOf(3); - // const [owner4] = await token.functions.ownerOf(4); - // const [owner5] = await token.functions.ownerOf(5); - // const [owner6] = await token.functions.ownerOf(6); - - // expect(owner1).to.equal(user2.address); - // expect(owner2).to.equal(user2.address); - // expect(owner3).to.equal(user2.address); - // expect(owner4).to.equal(user2.address); - // expect(owner5).to.equal(user2.address); - // expect(owner6).to.equal(user2.address); - - // // Traitsに指定した都道府県名が設定される - // const [traits1] = await provider.functions.generateTraits(1); - // const [traits2] = await provider.functions.generateTraits(2); - // const [traits3] = await provider.functions.generateTraits(3); - // const [traits4] = await provider.functions.generateTraits(4); - // const [traits5] = await provider.functions.generateTraits(5); - // const [traits6] = await provider.functions.generateTraits(6); - // // head,accessoryがランダムなので除外 - // // expect(traits1).to.equal('{"trait_type": "prefecture" , "value":"Aomori"}'); - // // expect(traits2).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); - // // expect(traits3).to.equal('{"trait_type": "prefecture" , "value":"Iwate"}'); - // // expect(traits4).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); - // // expect(traits5).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); - // // expect(traits6).to.equal('{"trait_type": "prefecture" , "value":"Miyagi"}'); - // // console.log(traits1); - // // console.log(traits2); - // // console.log(traits3); - // // console.log(traits4); - // // console.log(traits5); - // // console.log(traits6); - - // const [totalSupply] = await token.functions.totalSupply(); - // expect(totalSupply.toNumber()).to.equal(7); - // }); -}); - describe('P2P', function () { let tx, result, tokenId1: number; const zeroAddress = '0x0000000000000000000000000000000000000000'; From d808505a0b2397b1fdf8c783ead69713e8acff2c Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 26 Oct 2023 09:40:56 +0900 Subject: [PATCH 099/146] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/localNouns/LocalNounsProvider.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index c0f6e201..7e9f6470 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -173,7 +173,7 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { } seeds[_assetId] = generateSeed(prefectureId, _assetId); - uint256 prefectureId = prefectureId % 100; // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 + uint256 prefectureId = prefectureId % 100; // 下2桁:都道府県番号、下3桁より上位:バージョン番号 tokenIdToPrefectureId[_assetId] = prefectureId; mintNumberPerPrefecture[prefectureId]++; nextTokenId++; From 0490555adccc2bc4c6e0d5aca9dadfdca6bc36fc Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 26 Oct 2023 09:52:51 +0900 Subject: [PATCH 100/146] =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C?= =?UTF-8?q?=E7=95=AA=E5=8F=B7=E3=81=AE=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 2 ++ contract/test/localNouns.ts | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 72ef81ef..f8c79af0 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -73,6 +73,8 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { uint256 _amount ) public virtual returns (uint256 tokenId) { require(msg.sender == minter, 'Sender is not the minter'); + require(_prefectureId % 100 <= 47, 'Invalid prefectureId'); + for (uint256 i = 0; i < _amount; i++) { assetProvider2.mint(_prefectureId, _nextTokenId() + i); } diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 2d345565..55323bba 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -82,6 +82,14 @@ describe('mint functions', function () { }); + it('Invalid prefectureId', async function () { + + // OKパターンは別テストで実施 + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(48, 1, txParams)) + .revertedWith('Invalid prefectureId'); + }); + it('mint from minter', async function () { const txParams = { value: ethers.utils.parseUnits("0.001", "ether") }; @@ -184,6 +192,7 @@ describe('mint functions', function () { .revertedWith('Must send the mint price'); }); +}); describe('P2P', function () { let tx, result, tokenId1: number; From 3712ded5567b332bb7077f7764b95dd9c73cd83c Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 26 Oct 2023 09:59:43 +0900 Subject: [PATCH 101/146] =?UTF-8?q?=E7=B6=99=E6=89=BF=E5=85=83=E3=81=AEmin?= =?UTF-8?q?tPrice,=20mintLimit=E3=81=AF=E4=BD=BF=E7=94=A8=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index f8c79af0..2af59518 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -27,9 +27,8 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { ) ProviderTokenA2(_assetProvider, 'Local Nouns', 'Local Nouns') { description = 'Local Nouns Token.'; assetProvider2 = _assetProvider; - // mintPrice = 1e13; // 0.001 - mintPrice = 0; - mintLimit = 5000; + // mintPrice = 1e13; // 0.001 ※ mintPriceは Minterコントラクトで制御するため使用しない + // mintLimit = 5000; ※ mintLimitは Minterコントラクトで制御するため使用しない minter = _minter; administratorsAddress = msg.sender; } From d086ec91040ae638acc2a26ad9d5fefaf7168638 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 26 Oct 2023 10:05:36 +0900 Subject: [PATCH 102/146] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 2af59518..ff4e8601 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -66,6 +66,12 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { ); } + /** + 都道府県番号を指定してミントします。 + 都道府県番号の下2桁=0を指定すると都道府県がランダムで選択されます。 + 都道府県番号の下3桁目以降はバージョン番号です。 + ミント価格、ミント上限数は、Minterコントラクト側で制御するため、継承元のmintPrice, mintLimitは使用しません。 + */ function mintSelectedPrefecture( address _to, uint256 _prefectureId, From 8f48318d8b9defd6a8634ae900099f95d4009a81 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 26 Oct 2023 10:56:28 +0900 Subject: [PATCH 103/146] =?UTF-8?q?=E3=83=9F=E3=83=B3=E3=83=88=E6=95=B0?= =?UTF-8?q?=E4=B8=8A=E9=99=90=E3=81=AE=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 5 ++++ .../contracts/localNouns/LocalNounsMinter.sol | 10 +++++-- .../interfaces/ILocalNounsToken.sol | 3 ++ contract/test/localNouns.ts | 28 +++++++++++++++++-- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index ff4e8601..655d3b44 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -171,4 +171,9 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { (bool sent, ) = payable(administratorsAddress).call{ value: address(this).balance }(''); require(sent, 'failed to move fund to administratorsAddress contract'); } + + // iLocalNounsTokenでERC721のtotalSupplyを使用したいけど、二重継承でエラーになるので個別関数を準備 + function totalSupply2() public view returns (uint256) { + return super.totalSupply(); + } } diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol index f84ae172..9195dce6 100644 --- a/contract/contracts/localNouns/LocalNounsMinter.sol +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -28,7 +28,7 @@ contract LocalNounsMinter is Ownable { uint256 public mintPriceForSpecified = 0.003 ether; uint256 public mintPriceForNotSpecified = 0.001 ether; - uint256 public constant mintMax = 1500; + uint256 public mintMax = 1500; mapping(address => uint256) public preferentialPurchacedCount; @@ -48,6 +48,10 @@ contract LocalNounsMinter is Ownable { tokenGate = _tokenGate; } + function setMintMax(uint256 _mintMax) external onlyOwner { + mintMax = _mintMax; + } + function setLocalNounsToken(ILocalNounsToken _token) external onlyOwner { token = _token; } @@ -74,7 +78,9 @@ contract LocalNounsMinter is Ownable { } else if (phase == SalePhase.PreSale) { require(tokenGate.balanceOf(msg.sender) > 0, 'TokenGate token is needed'); } - + + require(token.totalSupply2() + _amount <= mintMax, 'Over the mint limit'); + uint256 mintPrice; if(_prefectureId == 0){ mintPrice = mintPriceForNotSpecified; diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol index 12964e93..f756793d 100644 --- a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol +++ b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol @@ -22,6 +22,9 @@ interface ILocalNounsToken { function setMinter(address _minter) external; + // iLocalNounsTokenでERC721のtotalSupplyを使用したいけど、二重継承でエラーになるので個別関数を準備 + function totalSupply2() external returns (uint256); + // Fires when the owner puts the trade event PutTradePrefecture(uint256 indexed tokenId, uint256[] _prefectures); diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 55323bba..98d5e631 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -4,7 +4,7 @@ import { addresses } from '../../src/utils/addresses'; import { ethers } from 'ethers'; import { abi as sampleTokenAbi } from "../artifacts/contracts/sampleToken.sol/sampleToken"; -let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, user3: SignerWithAddress, user4: SignerWithAddress, admin: SignerWithAddress; +let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, user3: SignerWithAddress, user4: SignerWithAddress, user5: SignerWithAddress, admin: SignerWithAddress; let token: Contract, minter: Contract, provider: Contract, tokenGate: Contract, sampleToken: Contract; const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; @@ -24,7 +24,7 @@ before(async () => { # npx hardhat run scripts/deploy_sample.ts */ - [owner, user1, user2, user3, user4, admin] = await ethers.getSigners(); + [owner, user1, user2, user3, user4, user5, admin] = await ethers.getSigners(); const factoryTokenGate = await ethers.getContractFactory('AssetTokenGate'); tokenGate = await factoryTokenGate.deploy(); @@ -210,6 +210,30 @@ describe('P2P', function () { await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Token is not on sale'); }); + it('Over the mint limit', async function () { + + // mintMaxに現在の発行数+1をセット + const [totalSupply] = await token.functions.totalSupply(); + await minter.functions.setMintMax(totalSupply.toNumber()+1); + const [mintMax] = await minter.functions.mintMax(); + expect(mintMax.toNumber()).to.equal(totalSupply.toNumber()+1); + + const txParams = { value: ethers.utils.parseUnits("0.006", "ether") }; + await expect(minter.connect(user5).functions.mintSelectedPrefecture(47, 2, txParams)) + .revertedWith('Over the mint limit'); + + // 一つだけならOK + const txParams2 = { value: ethers.utils.parseUnits("0.003", "ether") }; + await minter.connect(user5).functions.mintSelectedPrefecture(47, 1,txParams2); + + const [balance] = await token.functions.balanceOf(user5.address); + expect(balance.toNumber()).to.equal(1); // user1は1つ保持 + + await minter.functions.setMintMax(1500); + const [mintMax2] = await minter.functions.mintMax(); + expect(mintMax2.toNumber()).to.equal(1500); + }); + it('SetPrice', async function () { await expect(token.connect(user2).setPriceOf(tokenId1, price)).revertedWith('Only the onwer can set the price'); await token.connect(user1).setPriceOf(tokenId1, price); From 403929be072ba9b364b3b5064d7fdecfa123e199 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 27 Oct 2023 10:54:33 +0900 Subject: [PATCH 104/146] =?UTF-8?q?ownerMint=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 18 ++++++++++++-- contract/test/localNouns.ts | 34 +++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 655d3b44..11d171dd 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -77,7 +77,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { uint256 _prefectureId, uint256 _amount ) public virtual returns (uint256 tokenId) { - require(msg.sender == minter, 'Sender is not the minter'); + require(msg.sender == minter || msg.sender == owner(), 'Sender is not minter nor owner'); require(_prefectureId % 100 <= 47, 'Invalid prefectureId'); for (uint256 i = 0; i < _amount; i++) { @@ -87,6 +87,20 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { return _nextTokenId() - 1; } + function ownerMint( + address[] memory _to, + uint256[] memory _prefectureId, + uint256[] memory _amount + ) public onlyOwner returns (uint256 tokenId) { + // 引数の整合性チェック + require(_to.length == _prefectureId.length && _to.length == _amount.length, 'Invalid Arrays length'); + + for (uint256 i; i < _to.length; i++) { + mintSelectedPrefecture(_to[i], _prefectureId[i], _amount[i]); + } + return _nextTokenId() - 1; + } + function mint() public payable override returns (uint256 tokenId) { revert('Cannot use this function'); } @@ -171,7 +185,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { (bool sent, ) = payable(administratorsAddress).call{ value: address(this).balance }(''); require(sent, 'failed to move fund to administratorsAddress contract'); } - + // iLocalNounsTokenでERC721のtotalSupplyを使用したいけど、二重継承でエラーになるので個別関数を準備 function totalSupply2() public view returns (uint256) { return super.totalSupply(); diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 98d5e631..4db0f6b0 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -64,7 +64,10 @@ describe('mint functions', function () { .revertedWith('Cannot use this function'); await expect(token.connect(user1).functions.mintSelectedPrefecture(user1.address, 1, 1)) - .revertedWith('Sender is not the minter'); + .revertedWith('Sender is not minter nor owner'); + + await expect(token.connect(user1).functions.ownerMint([user1.address], [1], [1])) + .revertedWith('Ownable: caller is not the owner'); }); @@ -150,6 +153,29 @@ describe('mint functions', function () { }); + it('owner mint', async function () { + + const [balance3] = await token.functions.balanceOf(user3.address); + const [balance4] = await token.functions.balanceOf(user4.address); + const [balance5] = await token.functions.balanceOf(user5.address); + const [totalSupply] = await token.functions.totalSupply(); + + const txParams = { value: 0 }; + await token.connect(owner).functions.ownerMint([user3.address, user4.address, user5.address],[16,17,18],[1,2,3], txParams); + + const [balance3a] = await token.functions.balanceOf(user3.address); + const [balance4a] = await token.functions.balanceOf(user4.address); + const [balance5a] = await token.functions.balanceOf(user5.address); + + expect(balance3a.toNumber()).to.equal(balance3.toNumber() + 1); + expect(balance4a.toNumber()).to.equal(balance4.toNumber() + 2); + expect(balance5a.toNumber()).to.equal(balance5.toNumber() + 3); + + const [totalSupplya] = await token.functions.totalSupply(); + expect(totalSupplya.toNumber()).to.equal(totalSupply.toNumber() + 6); + + }); + it('tokenGate', async function () { await minter.connect(owner).functions.setPhase(1); @@ -192,6 +218,7 @@ describe('mint functions', function () { .revertedWith('Must send the mint price'); }); + }); describe('P2P', function () { @@ -223,11 +250,12 @@ describe('P2P', function () { .revertedWith('Over the mint limit'); // 一つだけならOK + const [balance] = await token.functions.balanceOf(user5.address); const txParams2 = { value: ethers.utils.parseUnits("0.003", "ether") }; await minter.connect(user5).functions.mintSelectedPrefecture(47, 1,txParams2); - const [balance] = await token.functions.balanceOf(user5.address); - expect(balance.toNumber()).to.equal(1); // user1は1つ保持 + const [balancea] = await token.functions.balanceOf(user5.address); + expect(balancea.toNumber()).to.equal(balance.toNumber() + 1); // user1は1つ保持 await minter.functions.setMintMax(1500); const [mintMax2] = await minter.functions.mintMax(); From bb88bb939c2522adaf70ffcd9a93daee54bc81a5 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 13:05:12 +0900 Subject: [PATCH 105/146] =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=83=80=E3=83=A0=E3=83=9F=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E5=89=B2=E5=90=88=E3=82=92=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../localNouns/LocalNounsProvider.sol | 59 +++++++++++++++++-- contract/test/localNouns.ts | 40 +++++++++---- 2 files changed, 80 insertions(+), 19 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index 7e9f6470..43e38b59 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -33,6 +33,13 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { mapping(uint256 => uint256) public tokenIdToPrefectureId; mapping(uint256 => string) public prefectureName; mapping(uint256 => uint256) public mintNumberPerPrefecture; // 都道府県ごとのミント数 + // mapping(uint256 => uint256) public prefectureRatio; // ランダムミント時に決定される都道府県の割合 + uint256 totalPrefectureRatio; + + uint256[5] ratioRank = [5, 4, 3, 3, 2]; + uint256[5] acumurationRatioRank; + uint256 acumurationRatioRankTotal; + mapping(uint256 => uint256[]) public prefectureRatio; constructor( INounsDescriptor _descriptor, @@ -94,6 +101,17 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { prefectureName[45] = 'Miyazaki'; prefectureName[46] = 'Kagoshima'; prefectureName[47] = 'Okinawa'; + + prefectureRatio[0] = [13, 14, 27, 23, 11, 12, 28, 1, 40]; + prefectureRatio[1] = [22, 8, 34, 26, 4, 15, 20, 21, 10]; + prefectureRatio[2] = [9, 33, 7, 24, 43, 46, 47, 25, 35]; + prefectureRatio[3] = [29, 38, 42, 2, 3, 17, 44, 45, 6, 16]; + prefectureRatio[4] = [37, 5, 30, 19, 41, 18, 36, 39, 32, 31]; + + for (uint256 i = 0; i < ratioRank.length; i++) { + acumurationRatioRankTotal += ratioRank[i]; + acumurationRatioRank[i] = acumurationRatioRankTotal; + } } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { @@ -166,16 +184,45 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { ); } - function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256) { + uint256 randomValueForTest = 0; + + function setRandomValueForTest(uint256 _randomValue) public onlyOwner { + randomValueForTest = _randomValue; + } + + // テスト用にpublic + function determinePrefectureId(uint256 _assetId) public returns (uint256) { + uint256 randomValue; + if (randomValueForTest > 0) { + // For TEST + randomValue = randomValueForTest; + } else { + // ブロック番号とアセット番号から計算した値 -> ランダム値 + randomValue = uint256(keccak256(abi.encodePacked(block.timestamp, _assetId))); + } + + uint256 rank = randomValue % acumurationRatioRankTotal; + for (uint256 i = 0; i < acumurationRatioRank.length; i++) { + if (rank < acumurationRatioRank[i]) { + rank = i; + break; + } + } + return prefectureRatio[rank][randomValue % prefectureRatio[rank].length]; + } + + function mint(uint256 _prefectureId, uint256 _assetId) external returns (uint256) { + uint256 prefectureId; // 末尾2桁が00の場合は都道府県をランダムに決定する - if (prefectureId % 100 == 0) { - prefectureId = prefectureId + ((block.number * _assetId) % 46) + 1; + if (_prefectureId % 100 == 0) { + prefectureId = _prefectureId + determinePrefectureId(_assetId); + } else { + prefectureId = _prefectureId; } seeds[_assetId] = generateSeed(prefectureId, _assetId); - uint256 prefectureId = prefectureId % 100; // 下2桁:都道府県番号、下3桁より上位:バージョン番号 - tokenIdToPrefectureId[_assetId] = prefectureId; - mintNumberPerPrefecture[prefectureId]++; + tokenIdToPrefectureId[_assetId] = prefectureId % 100; + mintNumberPerPrefecture[prefectureId % 100]++; nextTokenId++; return _assetId; diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 4db0f6b0..aaffaad7 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -66,7 +66,7 @@ describe('mint functions', function () { await expect(token.connect(user1).functions.mintSelectedPrefecture(user1.address, 1, 1)) .revertedWith('Sender is not minter nor owner'); - await expect(token.connect(user1).functions.ownerMint([user1.address], [1], [1])) + await expect(token.connect(user1).functions.ownerMint([user1.address], [1], [1])) .revertedWith('Ownable: caller is not the owner'); }); @@ -96,7 +96,7 @@ describe('mint functions', function () { it('mint from minter', async function () { const txParams = { value: ethers.utils.parseUnits("0.001", "ether") }; - await minter.connect(user1).functions.mintSelectedPrefecture(0, 1,txParams); + await minter.connect(user1).functions.mintSelectedPrefecture(0, 1, txParams); const [balance] = await token.functions.balanceOf(user1.address); expect(balance.toNumber()).to.equal(1); // user1は1つ保持 @@ -108,7 +108,7 @@ describe('mint functions', function () { expect(totalSupply.toNumber()).to.equal(1); // tokenId=1 const [traits1] = await provider.functions.generateTraits(0); - console.log('mint from minter',traits1); + console.log('mint from minter', traits1); }); @@ -140,9 +140,9 @@ describe('mint functions', function () { const [traits2] = await provider.functions.generateTraits(2); const [traits3] = await provider.functions.generateTraits(3); // head,accessoryがランダムなので県のみチェック(head,accessoryは目視) - console.log('multiple mint',traits1); - console.log('multiple mint',traits2); - console.log('multiple mint',traits3); + console.log('multiple mint', traits1); + console.log('multiple mint', traits2); + console.log('multiple mint', traits3); expect(traits1.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); expect(traits2.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); expect(traits3.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); @@ -160,8 +160,15 @@ describe('mint functions', function () { const [balance5] = await token.functions.balanceOf(user5.address); const [totalSupply] = await token.functions.totalSupply(); + // for (var i = 1; i <= 47; i++) { + // const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(i); + // if (mintNumberPerPrefecture > 0) { + // console.log("bf:mintNumberPerPrefecture", i, mintNumberPerPrefecture); + // } + // } + const txParams = { value: 0 }; - await token.connect(owner).functions.ownerMint([user3.address, user4.address, user5.address],[16,17,18],[1,2,3], txParams); + await token.connect(owner).functions.ownerMint([user3.address, user4.address, user5.address], [3, 5, 0], [1, 2, 20], txParams); const [balance3a] = await token.functions.balanceOf(user3.address); const [balance4a] = await token.functions.balanceOf(user4.address); @@ -169,10 +176,17 @@ describe('mint functions', function () { expect(balance3a.toNumber()).to.equal(balance3.toNumber() + 1); expect(balance4a.toNumber()).to.equal(balance4.toNumber() + 2); - expect(balance5a.toNumber()).to.equal(balance5.toNumber() + 3); + expect(balance5a.toNumber()).to.equal(balance5.toNumber() + 20); const [totalSupplya] = await token.functions.totalSupply(); - expect(totalSupplya.toNumber()).to.equal(totalSupply.toNumber() + 6); + expect(totalSupplya.toNumber()).to.equal(totalSupply.toNumber() + 23); + + // for (var i = 1; i <= 47; i++) { + // const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(i); + // if (mintNumberPerPrefecture > 0) { + // console.log("af:mintNumberPerPrefecture", i, mintNumberPerPrefecture); + // } + // } }); @@ -218,7 +232,7 @@ describe('mint functions', function () { .revertedWith('Must send the mint price'); }); - + }); describe('P2P', function () { @@ -241,9 +255,9 @@ describe('P2P', function () { // mintMaxに現在の発行数+1をセット const [totalSupply] = await token.functions.totalSupply(); - await minter.functions.setMintMax(totalSupply.toNumber()+1); + await minter.functions.setMintMax(totalSupply.toNumber() + 1); const [mintMax] = await minter.functions.mintMax(); - expect(mintMax.toNumber()).to.equal(totalSupply.toNumber()+1); + expect(mintMax.toNumber()).to.equal(totalSupply.toNumber() + 1); const txParams = { value: ethers.utils.parseUnits("0.006", "ether") }; await expect(minter.connect(user5).functions.mintSelectedPrefecture(47, 2, txParams)) @@ -252,7 +266,7 @@ describe('P2P', function () { // 一つだけならOK const [balance] = await token.functions.balanceOf(user5.address); const txParams2 = { value: ethers.utils.parseUnits("0.003", "ether") }; - await minter.connect(user5).functions.mintSelectedPrefecture(47, 1,txParams2); + await minter.connect(user5).functions.mintSelectedPrefecture(47, 1, txParams2); const [balancea] = await token.functions.balanceOf(user5.address); expect(balancea.toNumber()).to.equal(balance.toNumber() + 1); // user1は1つ保持 From 800b2ca52d05276194c88db4e9611d38083c583f Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 13:45:38 +0900 Subject: [PATCH 106/146] =?UTF-8?q?determinePrefectureId=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=B3=E3=83=BC=E3=83=89=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../localNouns/LocalNounsProvider.sol | 12 +++++------ contract/test/localNouns.ts | 21 +++++++++++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index 43e38b59..0074defb 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -184,18 +184,18 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { ); } - uint256 randomValueForTest = 0; + bool randomValueForTest = false; - function setRandomValueForTest(uint256 _randomValue) public onlyOwner { - randomValueForTest = _randomValue; + function setRandomValueForTest(bool _test) public onlyOwner { + randomValueForTest = _test; } // テスト用にpublic - function determinePrefectureId(uint256 _assetId) public returns (uint256) { + function determinePrefectureId(uint256 _assetId) public view returns (uint256) { uint256 randomValue; - if (randomValueForTest > 0) { + if (randomValueForTest) { // For TEST - randomValue = randomValueForTest; + randomValue = _assetId; } else { // ブロック番号とアセット番号から計算した値 -> ランダム値 randomValue = uint256(keccak256(abi.encodePacked(block.timestamp, _assetId))); diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index aaffaad7..6d62798f 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -235,6 +235,27 @@ describe('mint functions', function () { }); +describe('determinePrefectureId', function () { + it('determinePrefectureId', async function () { + + await provider.connect(owner).functions.setRandomValueForTest(true); + let prefectureCount = new Array(47).fill(0); + + for (var i = 0; i < 300; i++) { + const [prefectureId] = await provider.connect(owner).functions.determinePrefectureId(i); + prefectureCount[prefectureId.toNumber()-1]++; + } + + // 全ての都道府県が1以上出現する + for (var i = 0; i < prefectureCount.length; i++) { + expect(prefectureCount[i]).to.greaterThan(0); + // console.log("prefectureId", i, prefectureCount[i]); + } + + await provider.connect(owner).functions.setRandomValueForTest(false); + }); +}); + describe('P2P', function () { let tx, result, tokenId1: number; const zeroAddress = '0x0000000000000000000000000000000000000000'; From ddbad2e6c4f9974f413d27bedd1df85d1e315d89 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 13:47:19 +0900 Subject: [PATCH 107/146] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/test/localNouns.ts | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 6d62798f..6052aeb0 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -160,13 +160,6 @@ describe('mint functions', function () { const [balance5] = await token.functions.balanceOf(user5.address); const [totalSupply] = await token.functions.totalSupply(); - // for (var i = 1; i <= 47; i++) { - // const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(i); - // if (mintNumberPerPrefecture > 0) { - // console.log("bf:mintNumberPerPrefecture", i, mintNumberPerPrefecture); - // } - // } - const txParams = { value: 0 }; await token.connect(owner).functions.ownerMint([user3.address, user4.address, user5.address], [3, 5, 0], [1, 2, 20], txParams); @@ -181,13 +174,6 @@ describe('mint functions', function () { const [totalSupplya] = await token.functions.totalSupply(); expect(totalSupplya.toNumber()).to.equal(totalSupply.toNumber() + 23); - // for (var i = 1; i <= 47; i++) { - // const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(i); - // if (mintNumberPerPrefecture > 0) { - // console.log("af:mintNumberPerPrefecture", i, mintNumberPerPrefecture); - // } - // } - }); it('tokenGate', async function () { @@ -243,7 +229,7 @@ describe('determinePrefectureId', function () { for (var i = 0; i < 300; i++) { const [prefectureId] = await provider.connect(owner).functions.determinePrefectureId(i); - prefectureCount[prefectureId.toNumber()-1]++; + prefectureCount[prefectureId.toNumber() - 1]++; } // 全ての都道府県が1以上出現する From a0282e0389c630fd239499dab19e3079ae44292a Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 14:51:31 +0900 Subject: [PATCH 108/146] =?UTF-8?q?=E9=96=8B=E7=99=BA=E8=80=85=E3=83=AD?= =?UTF-8?q?=E3=82=A4=E3=83=A4=E3=83=AA=E3=83=86=E3=82=A3=E3=82=92=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 17 ++++++++++++++--- contract/test/localNouns.ts | 20 ++++++++++++++------ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 11d171dd..316b0dfd 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -20,6 +20,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { mapping(uint256 => uint256[]) public tradePrefecture; // トレード先指定の都道府県 address public administratorsAddress; // 運営ウォレット + address public developpersAddress; // 開発者ウォレット constructor( IAssetProviderExMint _assetProvider, @@ -31,6 +32,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { // mintLimit = 5000; ※ mintLimitは Minterコントラクトで制御するため使用しない minter = _minter; administratorsAddress = msg.sender; + developpersAddress = msg.sender; } function tokenName(uint256 _tokenId) internal pure override returns (string memory) { @@ -113,6 +115,10 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { administratorsAddress = _admin; } + function setDeveloppersAddress(address _developper) external onlyOwner { + developpersAddress = _developper; + } + /** * @param _tokenId the token id for put on the trade list. * @param _prefectures prefectures that you want to trade. if you don't want specific prefecture, you don't need to set. @@ -175,9 +181,14 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { // pay royalties to admin here function _processRoyalty(uint _salesPrice, uint _tokenId) internal override returns (uint256 royalty) { - royalty = (_salesPrice * 50) / 1000; // 5.0% - address payable payableTo = payable(administratorsAddress); - payableTo.transfer(royalty); + royalty = (_salesPrice * 100) / 1000; // 10.0% + + (bool sent, ) = payable(administratorsAddress).call{ value: royalty/2 }(''); + require(sent, 'failed to move fund to administratorsAddress contract'); + + (bool sent2, ) = payable(developpersAddress).call{ value: royalty/2 }(''); + require(sent2, 'failed to move fund to developpersAddress contract'); + } function withdraw() external payable onlyOwner { diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 6052aeb0..389cdb89 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -4,7 +4,7 @@ import { addresses } from '../../src/utils/addresses'; import { ethers } from 'ethers'; import { abi as sampleTokenAbi } from "../artifacts/contracts/sampleToken.sol/sampleToken"; -let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, user3: SignerWithAddress, user4: SignerWithAddress, user5: SignerWithAddress, admin: SignerWithAddress; +let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, user3: SignerWithAddress, user4: SignerWithAddress, user5: SignerWithAddress, admin: SignerWithAddress, developper: SignerWithAddress; let token: Contract, minter: Contract, provider: Contract, tokenGate: Contract, sampleToken: Contract; const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; @@ -24,7 +24,7 @@ before(async () => { # npx hardhat run scripts/deploy_sample.ts */ - [owner, user1, user2, user3, user4, user5, admin] = await ethers.getSigners(); + [owner, user1, user2, user3, user4, user5, admin, developper] = await ethers.getSigners(); const factoryTokenGate = await ethers.getContractFactory('AssetTokenGate'); tokenGate = await factoryTokenGate.deploy(); @@ -296,17 +296,25 @@ describe('P2P', function () { it('Purchase', async function () { await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Not enough fund'); + await token.connect(owner).setAdministratorsAddress(admin.address); + await token.connect(owner).setDeveloppersAddress(developper.address); + + result = await token.ownerOf(tokenId1); + const balance1 = await ethers.provider.getBalance(user1.address); - const balanceT = await ethers.provider.getBalance(owner.address); + const balanceA = await ethers.provider.getBalance(admin.address); + const balanceD = await ethers.provider.getBalance(developper.address); await token.connect(user2).purchase(tokenId1, user2.address, zeroAddress, { value: price }); result = await token.ownerOf(tokenId1); expect(result).equal(user2.address); const balance12 = await ethers.provider.getBalance(user1.address); - expect(balance12.sub(balance1)).equal(price.div(20).mul(19)); // 95% - const balanceT2 = await ethers.provider.getBalance(owner.address); - expect(balanceT2.sub(balanceT)).equal(price.div(20).mul(1)); // 5% + expect(balance12.sub(balance1)).equal(price.div(20).mul(18)); // 90% + const balanceA2 = await ethers.provider.getBalance(admin.address); + expect(balanceA2.sub(balanceA)).equal(price.div(20).mul(1)); // 5% + const balanceD2 = await ethers.provider.getBalance(developper.address); + expect(balanceD2.sub(balanceD)).equal(price.div(20).mul(1)); // 5% }); From 7fde374499dcebe6d62ce5d9d09aec9bc7a81b89 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 15:45:21 +0900 Subject: [PATCH 109/146] =?UTF-8?q?=E3=83=9F=E3=83=B3=E3=83=88=E4=BE=A1?= =?UTF-8?q?=E6=A0=BC=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contracts/localNouns/LocalNounsMinter.sol | 4 ++-- contract/test/localNouns.ts | 24 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol index 9195dce6..4fb79736 100644 --- a/contract/contracts/localNouns/LocalNounsMinter.sol +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -25,8 +25,8 @@ contract LocalNounsMinter is Ownable { ILocalNounsToken public token; ITokenGate public immutable tokenGate; - uint256 public mintPriceForSpecified = 0.003 ether; - uint256 public mintPriceForNotSpecified = 0.001 ether; + uint256 public mintPriceForSpecified = 0.03 ether; + uint256 public mintPriceForNotSpecified = 0.01 ether; uint256 public mintMax = 1500; diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 389cdb89..80600771 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -88,14 +88,14 @@ describe('mint functions', function () { it('Invalid prefectureId', async function () { // OKパターンは別テストで実施 - const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; await expect(minter.connect(user4).functions.mintSelectedPrefecture(48, 1, txParams)) .revertedWith('Invalid prefectureId'); }); it('mint from minter', async function () { - const txParams = { value: ethers.utils.parseUnits("0.001", "ether") }; + const txParams = { value: ethers.utils.parseUnits("0.01", "ether") }; await minter.connect(user1).functions.mintSelectedPrefecture(0, 1, txParams); const [balance] = await token.functions.balanceOf(user1.address); @@ -116,7 +116,7 @@ describe('mint functions', function () { const [balance0] = await token.functions.balanceOf(user3.address); - const txParams = { value: ethers.utils.parseUnits("0.009", "ether") }; + const txParams = { value: ethers.utils.parseUnits("0.09", "ether") }; await minter.connect(user3).functions.mintSelectedPrefecture(16, 3, txParams); const [balance] = await token.functions.balanceOf(user3.address); @@ -182,7 +182,7 @@ describe('mint functions', function () { const [phaze] = await minter.functions.phase(); expect(phaze).to.equal(1); // PreSale - const txParams = { value: ethers.utils.parseUnits("0.009", "ether") }; + const txParams = { value: ethers.utils.parseUnits("0.09", "ether") }; await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 1, txParams)) .revertedWith('TokenGate token is needed'); @@ -208,12 +208,12 @@ describe('mint functions', function () { expect(phaze).to.equal(2); // PreSale // 都道府県指定 OKパターンは'multiple mint'テストで実施 - const txParams = { value: ethers.utils.parseUnits("0.0059", "ether") }; + const txParams = { value: ethers.utils.parseUnits("0.059", "ether") }; await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 2, txParams)) .revertedWith('Must send the mint price'); // 都道府県指定なし OKパターンは'mint from minter'テストで実施 - const txParams2 = { value: ethers.utils.parseUnits("0.0019", "ether") }; + const txParams2 = { value: ethers.utils.parseUnits("0.019", "ether") }; await expect(minter.connect(user4).functions.mintSelectedPrefecture(0, 2, txParams2)) .revertedWith('Must send the mint price'); @@ -249,7 +249,7 @@ describe('P2P', function () { it('not on sale', async function () { - const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; @@ -266,13 +266,13 @@ describe('P2P', function () { const [mintMax] = await minter.functions.mintMax(); expect(mintMax.toNumber()).to.equal(totalSupply.toNumber() + 1); - const txParams = { value: ethers.utils.parseUnits("0.006", "ether") }; + const txParams = { value: ethers.utils.parseUnits("0.06", "ether") }; await expect(minter.connect(user5).functions.mintSelectedPrefecture(47, 2, txParams)) .revertedWith('Over the mint limit'); // 一つだけならOK const [balance] = await token.functions.balanceOf(user5.address); - const txParams2 = { value: ethers.utils.parseUnits("0.003", "ether") }; + const txParams2 = { value: ethers.utils.parseUnits("0.03", "ether") }; await minter.connect(user5).functions.mintSelectedPrefecture(47, 1, txParams2); const [balancea] = await token.functions.balanceOf(user5.address); @@ -329,7 +329,7 @@ describe('P2PTradable', function () { it('mint for test', async function () { // for user1 - const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; @@ -394,7 +394,7 @@ describe('P2PTradable', function () { it('put trade(都道府県指定なし)', async function () { // for user1 - const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; @@ -427,7 +427,7 @@ describe('P2PTradable', function () { it('cancel trade', async function () { // for user1 - const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); result = await token.totalSupply(); tokenId1 = result.toNumber() - 1; From a48e3af563c14a7f477390a929e7a892c9622e63 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 16:12:15 +0900 Subject: [PATCH 110/146] =?UTF-8?q?P2PTradable=E3=81=AE=E6=89=8B=E6=95=B0?= =?UTF-8?q?=E6=96=99=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 23 +++++++++++++++++++--- contract/test/localNouns.ts | 27 ++++++++++++++++++++------ 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 316b0dfd..6436e0f5 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -22,6 +22,8 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { address public administratorsAddress; // 運営ウォレット address public developpersAddress; // 開発者ウォレット + uint256 public tradeRoyalty = 0.003 ether; // P2Pトレードのロイヤリティ + constructor( IAssetProviderExMint _assetProvider, address _minter @@ -147,7 +149,9 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { emit CancelTradePrefecture(_tokenId); } - function executeTradeLocalNoun(uint256 _myTokenId, uint256 _targetTokenId) public { + function executeTradeLocalNoun(uint256 _myTokenId, uint256 _targetTokenId) public payable { + require(msg.value >= tradeRoyalty, 'Must send the royalty'); + // tradePrefectureがない場合は、希望都道府県がないためチェック不要 if (tradePrefecture[_targetTokenId].length > 0) { uint256 myTokenIdPrefecture = assetProvider2.getPrefectureId(_myTokenId); @@ -162,6 +166,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { } super.executeTrade(_myTokenId, _targetTokenId); + _processTradeRoyalty(msg.value); } function putTrade(uint256 _tokenId, bool _isOnTrade) public override { @@ -179,16 +184,28 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { super._beforeTokenTransfers(from, to, startTokenId, quantity); } + function setTradeRoyalty(uint256 _royalty) public onlyOwner { + tradeRoyalty = _royalty; + } + // pay royalties to admin here function _processRoyalty(uint _salesPrice, uint _tokenId) internal override returns (uint256 royalty) { royalty = (_salesPrice * 100) / 1000; // 10.0% - (bool sent, ) = payable(administratorsAddress).call{ value: royalty/2 }(''); + (bool sent, ) = payable(administratorsAddress).call{ value: royalty / 2 }(''); require(sent, 'failed to move fund to administratorsAddress contract'); - (bool sent2, ) = payable(developpersAddress).call{ value: royalty/2 }(''); + (bool sent2, ) = payable(developpersAddress).call{ value: royalty / 2 }(''); require(sent2, 'failed to move fund to developpersAddress contract'); + } + // pay royalties to admin here + function _processTradeRoyalty(uint _royalty) internal returns (uint256 royalty) { + (bool sent, ) = payable(administratorsAddress).call{ value: _royalty / 2 }(''); + require(sent, 'failed to move fund to administratorsAddress contract'); + + (bool sent2, ) = payable(developpersAddress).call{ value: _royalty - _royalty / 2 }(''); + require(sent2, 'failed to move fund to developpersAddress contract'); } function withdraw() external payable onlyOwner { diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 80600771..5d2e495e 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -326,6 +326,7 @@ describe('P2P', function () { describe('P2PTradable', function () { let result, tx, err, balance, tokenId1: number, tokenId2: number; + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; it('mint for test', async function () { // for user1 @@ -349,11 +350,11 @@ describe('P2PTradable', function () { }); it('Attempt to trade non-tradable token', async function () { - await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1)).revertedWith('TargetTokenId is not on trade'); + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams)).revertedWith('TargetTokenId is not on trade'); }); it('Attempt to execute trade non-owner token', async function () { - await expect(token.connect(user2).executeTradeLocalNoun(tokenId1, tokenId2)).revertedWith('Only the onwer can trade'); + await expect(token.connect(user2).executeTradeLocalNoun(tokenId1, tokenId2, txParams)).revertedWith('Only the onwer can trade'); }); it('Attempt to put trade non-owner token', async function () { @@ -368,7 +369,7 @@ describe('P2PTradable', function () { it('put trade', async function () { // 希望都道府県外のトークンと交換しようとする await token.connect(user1).putTradeLocalNoun(tokenId1, [1, 11, 12]); - await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1)).revertedWith('unmatch to the wants list'); + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams)).revertedWith('unmatch to the wants list'); result = await token.connect(user1).getTradePrefectureFor(tokenId1); expect(result.length).equal(3); @@ -380,7 +381,14 @@ describe('P2PTradable', function () { result = await token.connect(user1).trades(tokenId1); expect(result).equal(true); - tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1); + // 実行前の保持ETH + const balanceA = await ethers.provider.getBalance(admin.address); + const balanceD = await ethers.provider.getBalance(developper.address); + + const txParams2 = { value: ethers.utils.parseUnits("0.0029", "ether") }; + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams2)).revertedWith('Must send the royalty'); + + tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams); await tx.wait(); result = await token.connect(user1).trades(tokenId1); expect(result).equal(false); //トレードリストから解除 @@ -390,6 +398,13 @@ describe('P2PTradable', function () { result = await token.connect(user1).ownerOf(tokenId2); expect(result).equal(user1.address); + + // 実行後の保持ETH + const balanceA2 = await ethers.provider.getBalance(admin.address); + const balanceD2 = await ethers.provider.getBalance(developper.address); + expect(balanceA2.sub(balanceA)).to.equal(ethers.utils.parseUnits("0.0015", "ether")); + expect(balanceD2.sub(balanceD)).to.equal(ethers.utils.parseUnits("0.0015", "ether")); + }); it('put trade(都道府県指定なし)', async function () { @@ -413,7 +428,7 @@ describe('P2PTradable', function () { result = await token.connect(user1).getTradePrefectureFor(tokenId1); expect(result.length).equal(0); - tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1); + tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams); await tx.wait(); result = await token.connect(user1).trades(tokenId1); expect(result).equal(false); //トレードリストから解除 @@ -451,7 +466,7 @@ describe('P2PTradable', function () { result = await token.connect(user1).trades(tokenId1); expect(result).equal(false); //トレードリストから解除 - await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1)).revertedWith('TargetTokenId is not on trade'); + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams)).revertedWith('TargetTokenId is not on trade'); }); From 88ddb55f477c79a6fbed87acabd1b8f5f7c04565 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 16:19:20 +0900 Subject: [PATCH 111/146] =?UTF-8?q?=5FsendRoyalty=E3=81=A7=E5=85=B1?= =?UTF-8?q?=E9=80=9A=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 6436e0f5..dbcb955f 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -191,16 +191,16 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { // pay royalties to admin here function _processRoyalty(uint _salesPrice, uint _tokenId) internal override returns (uint256 royalty) { royalty = (_salesPrice * 100) / 1000; // 10.0% - - (bool sent, ) = payable(administratorsAddress).call{ value: royalty / 2 }(''); - require(sent, 'failed to move fund to administratorsAddress contract'); - - (bool sent2, ) = payable(developpersAddress).call{ value: royalty / 2 }(''); - require(sent2, 'failed to move fund to developpersAddress contract'); + _sendRoyalty(royalty); } // pay royalties to admin here - function _processTradeRoyalty(uint _royalty) internal returns (uint256 royalty) { + function _processTradeRoyalty(uint _royalty) internal { + _sendRoyalty(_royalty); + } + + // send royalties to admin and developper + function _sendRoyalty(uint _royalty) internal { (bool sent, ) = payable(administratorsAddress).call{ value: _royalty / 2 }(''); require(sent, 'failed to move fund to administratorsAddress contract'); From 00b09d5fd6caf81a3133b3c49a466ebf516bb8c5 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 16:22:59 +0900 Subject: [PATCH 112/146] =?UTF-8?q?typo=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contracts/localNouns/LocalNounsProvider.sol | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index 0074defb..ba5588b5 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -37,8 +37,8 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { uint256 totalPrefectureRatio; uint256[5] ratioRank = [5, 4, 3, 3, 2]; - uint256[5] acumurationRatioRank; - uint256 acumurationRatioRankTotal; + uint256[5] accumulationRatioRank; + uint256 accumulationRatioRankTotal; mapping(uint256 => uint256[]) public prefectureRatio; constructor( @@ -109,8 +109,8 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { prefectureRatio[4] = [37, 5, 30, 19, 41, 18, 36, 39, 32, 31]; for (uint256 i = 0; i < ratioRank.length; i++) { - acumurationRatioRankTotal += ratioRank[i]; - acumurationRatioRank[i] = acumurationRatioRankTotal; + accumulationRatioRankTotal += ratioRank[i]; + accumulationRatioRank[i] = accumulationRatioRankTotal; } } @@ -201,9 +201,9 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { randomValue = uint256(keccak256(abi.encodePacked(block.timestamp, _assetId))); } - uint256 rank = randomValue % acumurationRatioRankTotal; - for (uint256 i = 0; i < acumurationRatioRank.length; i++) { - if (rank < acumurationRatioRank[i]) { + uint256 rank = randomValue % accumulationRatioRankTotal; + for (uint256 i = 0; i < accumulationRatioRank.length; i++) { + if (rank < accumulationRatioRank[i]) { rank = i; break; } From 71543a76a5314a88d13523eec60fef01cef32205 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 16:31:30 +0900 Subject: [PATCH 113/146] =?UTF-8?q?asset=E6=9C=80=E6=96=B0=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/test/image-local-data.json | 591 ++++++++++++++-------------- 1 file changed, 306 insertions(+), 285 deletions(-) diff --git a/contract/test/image-local-data.json b/contract/test/image-local-data.json index 36296273..a9591df1 100644 --- a/contract/test/image-local-data.json +++ b/contract/test/image-local-data.json @@ -243,146 +243,135 @@ "395ed1", "ffc5f0", "cbc1bc", - "d4cfc0", - "fe6612", - "fe6412", - "fe6b14", - "fff5cb", - "544e4a", - "01499c", - "1f3445", - "282728", - "d3ad78", - "f9e1ba", - "d5d7e1" + "d4cfc0" ], "images": { "bodies": [ { "filename": "body-bege-bsod-bodies", - "data": "0x0015171f090e020e020e020e02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02" + "data": "0x0015171f093a0201000d0201000d0201000d0201000d0201000d0201000d0201000b02" }, { "filename": "body-bege-crt-bodies", - "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + "data": "0x0015171f093a0301000d0301000d0301000d0301000d0301000d0301000d0301000b03" }, { "filename": "body-blue-sky-bodies", - "data": "0x0015171f090e040e040e040e04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04" + "data": "0x0015171f093a0401000d0401000d0401000d0401000d0401000d0401000d0401000b04" }, { "filename": "body-bluegrey-bodies", - "data": "0x0015171f090e050e050e050e05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05" + "data": "0x0015171f093a0501000d0501000d0501000d0501000d0501000d0501000d0501000b05" }, { "filename": "body-cold-bodies", - "data": "0x0015171f090e060e060e060e06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06" + "data": "0x0015171f093a0601000d0601000d0601000d0601000d0601000d0601000d0601000b06" }, { "filename": "body-computerblue-bodies", - "data": "0x0015171f090e070e070e070e07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07" + "data": "0x0015171f093a0701000d0701000d0701000d0701000d0701000d0701000d0701000b07" }, { "filename": "body-darkbrown-bodies", - "data": "0x0015171f090e080e080e080e08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08" + "data": "0x0015171f093a0801000d0801000d0801000d0801000d0801000d0801000d0801000b08" }, { "filename": "body-darkpink-bodies", - "data": "0x0015171f090e090e090e090e09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09" + "data": "0x0015171f093a0901000d0901000d0901000d0901000d0901000d0901000d0901000b09" }, { "filename": "body-foggrey-bodies", - "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + "data": "0x0015171f093a0301000d0301000d0301000d0301000d0301000d0301000d0301000b03" }, { "filename": "body-gold-bodies", - "data": "0x0015171f090e0a0e0a0e0a0e0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a" + "data": "0x0015171f093a0a01000d0a01000d0a01000d0a01000d0a01000d0a01000d0a01000b0a" }, { "filename": "body-grayscale-1-bodies", - "data": "0x0015171f090e0b0e0b0e0b0e0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b" + "data": "0x0015171f093a0b01000d0b01000d0b01000d0b01000d0b01000d0b01000d0b01000b0b" }, { "filename": "body-grayscale-7-bodies", - "data": "0x0015171f090e0c0e0c0e0c0e0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c" + "data": "0x0015171f093a0c01000d0c01000d0c01000d0c01000d0c01000d0c01000d0c01000b0c" }, { "filename": "body-grayscale-8-bodies", - "data": "0x0015171f090e0d0e0d0e0d0e0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d" + "data": "0x0015171f093a0d01000d0d01000d0d01000d0d01000d0d01000d0d01000d0d01000b0d" }, { "filename": "body-grayscale-9-bodies", - "data": "0x0015171f090e0e0e0e0e0e0e0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e" + "data": "0x0015171f093a0e01000d0e01000d0e01000d0e01000d0e01000d0e01000d0e01000b0e" }, { "filename": "body-green-bodies", - "data": "0x0015171f090e0f0e0f0e0f0e0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f" + "data": "0x0015171f093a0f01000d0f01000d0f01000d0f01000d0f01000d0f01000d0f01000b0f" }, { "filename": "body-gunk-bodies", - "data": "0x0015171f090e100e100e100e10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10" + "data": "0x0015171f093a1001000d1001000d1001000d1001000d1001000d1001000d1001000b10" }, { "filename": "body-hotbrown-bodies", - "data": "0x0015171f090e110e110e110e11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11" + "data": "0x0015171f093a1101000d1101000d1101000d1101000d1101000d1101000d1101000b11" }, { "filename": "body-magenta-bodies", - "data": "0x0015171f090e120e120e120e12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12" + "data": "0x0015171f093a1201000d1201000d1201000d1201000d1201000d1201000d1201000b12" }, { "filename": "body-orange-yellow-bodies", - "data": "0x0015171f090e130e130e130e13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13" + "data": "0x0015171f093a1301000d1301000d1301000d1301000d1301000d1301000d1301000b13" }, { "filename": "body-orange-bodies", - "data": "0x0015171f090e140e140e140e14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14" + "data": "0x0015171f093a1401000d1401000d1401000d1401000d1401000d1401000d1401000b14" }, { "filename": "body-peachy-B-bodies", - "data": "0x0015171f090e150e150e150e15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15" + "data": "0x0015171f093a1501000d1501000d1501000d1501000d1501000d1501000d1501000b15" }, { "filename": "body-peachy-a-bodies", - "data": "0x0015171f090e160e160e160e16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16" + "data": "0x0015171f093a1601000d1601000d1601000d1601000d1601000d1601000d1601000b16" }, { "filename": "body-purple-bodies", - "data": "0x0015171f090e170e170e170e17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17" + "data": "0x0015171f093a1701000d1701000d1701000d1701000d1701000d1701000d1701000b17" }, { "filename": "body-red-bodies", - "data": "0x0015171f090e180e180e180e18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18" + "data": "0x0015171f093a1801000d1801000d1801000d1801000d1801000d1801000d1801000b18" }, { "filename": "body-redpinkish-bodies", - "data": "0x0015171f090e190e190e190e19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19" + "data": "0x0015171f093a1901000d1901000d1901000d1901000d1901000d1901000d1901000b19" }, { "filename": "body-rust-bodies", - "data": "0x0015171f090e1a0e1a0e1a0e1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a" + "data": "0x0015171f093a1a01000d1a01000d1a01000d1a01000d1a01000d1a01000d1a01000b1a" }, { "filename": "body-slimegreen-bodies", - "data": "0x0015171f090e1b0e1b0e1b0e1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b" + "data": "0x0015171f093a1b01000d1b01000d1b01000d1b01000d1b01000d1b01000d1b01000b1b" }, { "filename": "body-teal-light-bodies", - "data": "0x0015171f090e1c0e1c0e1c0e1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c" + "data": "0x0015171f093a1c01000d1c01000d1c01000d1c01000d1c01000d1c01000d1c01000b1c" }, { "filename": "body-teal-bodies", - "data": "0x0015171f090e1d0e1d0e1d0e1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d" + "data": "0x0015171f093a1d01000d1d01000d1d01000d1d01000d1d01000d1d01000d1d01000b1d" }, { "filename": "body-yellow-bodies", - "data": "0x0015171f090e1e0e1e0e1e0e1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e" + "data": "0x0015171f093a1e01000d1e01000d1e01000d1e01000d1e01000d1e01000d1e01000b1e" } ], "accessories": [ { "filename": "01-hokkaido-crab-accessories", - "data": "0x0019161c0d0113010001130100011301000113010001130100011301000108011301080100011301000200051302000100011301000313010001130100" + "data": "0x0019161c0d01130100011301000113010001130100011301000113010001080113010801000113030005130300011301000313010001130100" }, { "filename": "01-hokkaido-melon-accessories", @@ -390,27 +379,27 @@ }, { "filename": "01-hokkaido-sheep-accessories", - "data": "0x0018141d0e020001c1010e020003c10300010e0100010e0300040001c1010e020003c101000200010e0100010e0100" + "data": "0x0018141d0e020001c1010e020003c10300010e0100010e070001c1010e020003c10300010e0100010e0100" }, { "filename": "02-aomori-jade-accessories", - "data": "0x0015141e090400010205000102050001020300010201000500017f0102011c01020101010004000101010001dd0102019b0100017f0700015203000b000b000b000b0002010900" + "data": "0x0015141e09040001020500010205000102030001020600017f0102011c0102010105000101010001dd0102019b0100017f070001522f0002010900" }, { "filename": "02-aomori-squid-accessories", - "data": "0x0018151d0f0300010802000100010102080101010002000208020001010100010801330200010001010123013301000101010101000101010001010100" + "data": "0x0018151d0f030001080300010102080101030002080200010101000108013303000101012301330100020101000101010001010100" }, { "filename": "02-aomori-tsugaru-shamisen-accessories", - "data": "0x0018121c0f010001360123012301360123010001360100020b0100020b0100" + "data": "0x0018121c0f01000136022301360123010001360100020b0100020b0100" }, { "filename": "03-iwate-egg-accessories", - "data": "0x0018141b100100020101000101021e01010101021e0101010002010100" + "data": "0x0018141b100100020101000101021e0201021e0101010002010100" }, { "filename": "03-iwate-fujiwara-accessories", - "data": "0x0017141c0f0100012303000200012302000200015d02000100026701cd0100046701310101013101670201" + "data": "0x0017141c0f01000123050001230400015d0300026701cd0100046701310101013101670201" }, { "filename": "04-miyagi-beeftongue-accessories", @@ -418,23 +407,23 @@ }, { "filename": "04-miyagi-matsushima-accessories", - "data": "0x0016171f0c0600022901010100010104000301012903000b000b00025c0100025c01000129010003a205b106000300015c0100015c01290100025c0100030004b1010002b1010001a20a00020002a2010002290400" + "data": "0x0016171f0c060002290101010001010400030101291900025c0100025c01000129010003a205b10900015c0100015c01290100025c040004b1010002b1010001a20c0002a2010002290400" }, { "filename": "04-miyagi-zunda-accessories", - "data": "0x0019131b10024e0100034e014e0101014e" + "data": "0x0019131b10024e0100044e0101014e" }, { "filename": "05-akita-fireworks-accessories", - "data": "0x0015171f0c060001c7010001c70200030001c101c7020001c1010001c10100050001c7010001c7020001c7020001c101c7050001c70100040001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c703000100014a010001c1010001c7020001c702000400014a010001c1020001c101000300014a0100014a05000400014a0600" + "data": "0x0015171f0c060001c7010001c7050001c101c7020001c1010001c1060001c7010001c7020001c7020001c101c7050001c7050001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c70400014a010001c1010001c7020001c70600014a010001c1020001c10400014a0100014a0900014a0600" }, { "filename": "05-akita-hatahata-accessories", - "data": "0x0018141b0e011005000100015d021001230110011001000101025d01010300015d0200" + "data": "0x0018141b0e01100600015d02100123021001000101025d01010300015d0200" }, { "filename": "05-akita-raspberry-accessories", - "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e02b906b9020002b90200" + "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e08b9020002b90200" }, { "filename": "06-yamagata-cherry-accessories", @@ -442,19 +431,19 @@ }, { "filename": "06-yamagata-lafrance-accessories", - "data": "0x0019131c10010001840100010001840122022201c601de0222" + "data": "0x0019131c100100018402000184032201c601de0222" }, { "filename": "06-yamagata-shogi-accessories", - "data": "0x0018131b10010001230100010002230123020001000223" + "data": "0x0018131b10010001230200032303000223" }, { "filename": "07-fukushima-akabeko-accessories", - "data": "0x0019141b0f01230133010101230100013301230133010101330133010001330200" + "data": "0x0019141b0f0123013301010123010001330123013301010233010001330200" }, { "filename": "07-fukushima-inawashiro-accessories", - "data": "0x0018171e0c030001e0010001a2019504000200029203a202950200039208a20b000b000400010101230500030002010600" + "data": "0x0018171e0c030001e0010001a201950600029203a202950200039208a21a0001010123080002010600" }, { "filename": "07-fukushima-train-accessories", @@ -462,23 +451,23 @@ }, { "filename": "08-ibaraki-bellpepper-accessories", - "data": "0x0018121b0f01dd01e101dd01dd010f01dd01dd010f01dd0100010f0100" + "data": "0x0018121b0f01dd01e102dd010f02dd010f01dd0100010f0100" }, { "filename": "08-ibaraki-natto-accessories", - "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + "data": "0x001814190e012b0100012b0100012b0200012b0100012b0100012b" }, { "filename": "08-ibaraki-rokkakudo-accessories", - "data": "0x0017171f09070001860400029107000186060004000161050001860300010001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d408000a0002910200050002910700" + "data": "0x0017171f090700018604000291070001860a00016105000186040001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d412000291070002910700" }, { "filename": "09-tochigi-gyoza-accessories", - "data": "0x0018141b0e0100013401000134010001340134012501340125013401250188022501880225010001340100013401000134" + "data": "0x0018141b0e010001340100013401000234012501340125013401250188022501880225010001340100013401000134" }, { "filename": "09-tochigi-lemon-accessories", - "data": "0x0018131c100152020103c701c7015201c7010101c701010352" + "data": "0x0018131c100152020104c7015201c7010101c701010352" }, { "filename": "09-tochigi-shimotsukare-accessories", @@ -494,11 +483,11 @@ }, { "filename": "10-gunma-yakimanjyu-accessories", - "data": "0x0017161e0e04000236011101220300023401230101010003000136011101340136010002000134011101230101020001000134013601340101013602000100011101340123013403000100012201360134040001220700" + "data": "0x0017161e0e040002360111012203000234012301010400013601110134013603000134011101230101030001340136013401010136030001110134012301340400012201360134040001220700" }, { "filename": "11-saitama-icicle-accessories", - "data": "0x0015171c090e0104000101010001010100010101000101010001010100040001e0010001010100010101000101010001010100060001010100010101000101010001e0010006000101010001e001000101030006000101030001e00300060001e0030001e00300060001e00700" + "data": "0x0015171c090e010400010101000101010001010100010101000101050001e001000101010001010100010101000101070001010100010101000101010001e007000101010001e00100010109000101030001e0090001e0030001e0090001e00700" }, { "filename": "11-saitama-soka-senbei-accessories", @@ -506,19 +495,19 @@ }, { "filename": "12-chiba-inubosaki-accessories", - "data": "0x0018171f0d0128010001280100042802000700010102000700010102000600040f04000154010104b105000254010102b103000354010102b101000354010103b10300" + "data": "0x0018171f0d0128010001280100042809000101090001010800040f04000154010104b105000254010102b103000354010102b101000354010103b10300" }, { "filename": "12-chiba-orca-accessories", - "data": "0x0018151c0d0100010d0600020d0200010d03000200050d01000300020d020b01000100025601000156010d01000156" + "data": "0x0018151c0d0100010d0600020d0200010d0500050d0400020d020b0200025601000156010d01000156" }, { "filename": "12-chiba-peanuts-accessories", - "data": "0x0018131b100100016001d8010002600260010001d801600100" + "data": "0x0018131b100100016001d801000460010001d801600100" }, { "filename": "13-tokyo-tower-accessories", - "data": "0x0016151d0e060001da02000141020001da010002000101030001da02000141020001da010001000301030001000341030001000141010001410300014101000141010001410200" + "data": "0x0016151d0e060001da02000141020001da03000101030001da02000141020001da020003010400034104000141010001410300014101000141010001410200" }, { "filename": "13-tokyo-yamanote-accessories", @@ -526,11 +515,11 @@ }, { "filename": "14-ibaraki-natto-accessories", - "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + "data": "0x001814190e012b0100012b0100012b0200012b0100012b0100012b" }, { "filename": "14-kanagawa-baybridge-accessories", - "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010001a201a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" + "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010002a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" }, { "filename": "14-kanagawa-yacht-accessories", @@ -542,23 +531,23 @@ }, { "filename": "15-niigata-riceear-accessories", - "data": "0x0018131d0f02000128010001000128020001c001280100012801c001000128010002c0020002c00200" + "data": "0x0018131d0f0200012802000128020001c001280100012801c001000128010002c0020002c00200" }, { "filename": "16-toyama-kutabe-accessories", - "data": "0x0019141e030100010e0200030e0a00010e0200020e0201010e0400011803bf0188020e0100020e0201010e0400011801bf020e01bf0100060e0500011804bf0100060e0a000100010e0100010e0100020e0a00" + "data": "0x0019141e030100010e0200030e0a00010e0200020e0201010e0400011803bf0188020e0100020e0201010e0400011801bf020e01bf0100060e0500011804bf0100060e0b00010e0100010e0100020e0a00" }, { "filename": "16-toyama-shiroebi-accessories", - "data": "0x0018131a0e0400010e010002ba010e01ba01ba0400" + "data": "0x0018131a0e0400010e010002ba010e02ba0400" }, { "filename": "16-toyama-tateyama-accessories", - "data": "0x0019171c090100017f020001a2017f0300027f01a20100017f027f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" + "data": "0x0019171c090100017f020001a2017f0300027f01a20100037f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" }, { "filename": "17-ishikawa-kotoji-accessories", - "data": "0x0018131c0e02000172020001000372010002000158020001000158010001580100015803000158" + "data": "0x0018131c0e02000172030003720300015803000158010001580100015803000158" }, { "filename": "17-ishikawa-kutani-kaga-gosai-accessories", @@ -570,7 +559,7 @@ }, { "filename": "18-fukui-echizen-crab-accessories", - "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b80414020001000114010001b80214010001b80100" + "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b8041403000114010001b80214010001b80100" }, { "filename": "18-fukui-heshiko-accessories", @@ -582,15 +571,15 @@ }, { "filename": "19-yamanashi-fuji-accessories", - "data": "0x0017171e0c0600020b03000500020b01eb010b0200030007eb01000beb0b58010007580300020001e0015802e00500030002e0030002a90100" + "data": "0x0017171e0c0600020b0800020b01eb010b050007eb01000beb0b5801000758050001e0015802e0080002e0030002a90100" }, { "filename": "19-yamanashi-grape-accessories", - "data": "0x0018121b0e0200019a01220100019a0112019a019a0112016e01120112016e01450100" + "data": "0x0018121b0e0200019a01220100019a0112029a0112016e0212016e01450100" }, { "filename": "20-nagano-kappa-accessories", - "data": "0x0018131a0e020f0201010f0100013e0123013e01000100023e022a" + "data": "0x0018131a0e020f0201010f0100013e0123013e0200023e022a" }, { "filename": "20-nagano-oyaki-accessories", @@ -598,7 +587,7 @@ }, { "filename": "21-gifu-gero-accessories", - "data": "0x0018141c0e020001010100010101000100010101000101020001c8013d0101013d010101c801c8043d01c8010004c80100" + "data": "0x0018141c0e02000101010001010200010101000101020001c8013d0101013d010102c8043d01c8010004c80100" }, { "filename": "21-gifu-gohei-mochi-accessories", @@ -606,19 +595,23 @@ }, { "filename": "21-gifu-sarubobo-accessories", - "data": "0x0018131d0f010002230100012302440123017102440171010002230100010002230100017102000171" + "data": "0x0018131d0f01000223010001230244012301710244017101000223020002230100017102000171" }, { "filename": "21-gifu-ukaibody-accessories", - "data": "0x0015171f090592075402920592075402920592075402920592075402920292010002920754029202920100029207540292029201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" + "data": "0x0015171f090592075407920754079207540792075404920100029207540492010002920754049201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" }, { "filename": "22-shizuoka-fuji-accessories", - "data": "0x0017171d0c090002e0020003e0020001010300060002320101020003e0020005320100040001e10632020001dd04e1043204dd07e1" + "data": "0x0017171d0c090002e0020003e002000101090002320101020003e002000532050001e10632020001dd04e1043204dd07e1" + }, + { + "filename": "23-aichi-misodengaku-accessories", + "data": "0x0019141c0e03350157020001570235015702600335016302000163023501630260" }, { "filename": "23-aichi-oguratoast-accessories", - "data": "0x0018131c0e0293028401930193028401b80193019301b8028401930193018401b8018401930593" + "data": "0x0018131c0e029302840293028401b8029301b802840293018401b801840693" }, { "filename": "23-aichi-tebasaki-accessories", @@ -626,11 +619,11 @@ }, { "filename": "24-mie-iseebi-accessories", - "data": "0x0017151e0d02000132020001320200010001320100023201000132010001000132010002320100013201000132021802320218013201320100011802b40118010001320100011801000232010001180100030002b40300020001180132011801320200" + "data": "0x0017151e0d02000132020001320300013201000232010001320200013201000232010001320100013202180232021802320100011802b4011801000132010001180100023201000118040002b4050001180132011801320200" }, { "filename": "24-mie-mochi-accessories", - "data": "0x0019121a0f018401b80184018401b80184" + "data": "0x0019121a0f018401b8028401b80184" }, { "filename": "25-shiga-funazushi-accessories", @@ -638,31 +631,39 @@ }, { "filename": "25-shiga-hieizan-accessories", - "data": "0x0018171b090700020f05000500070f0200020f01000b0f028d01000b8d" + "data": "0x0018171b090700020f0a00070f0200020f01000b0f028d01000b8d" }, { "filename": "26-kyoto-daimonji-accessories", - "data": "0x0017161d0d0300011405000200011401490114040003140149031402000749020002000114014901140400021401490100014904140249030003490100" + "data": "0x0017161d0d03000114070001140149011404000314014903140200074904000114014901140400021401490100014904140249030003490100" }, { "filename": "26-kyoto-yatsuhashi-accessories", - "data": "0x0018131a0e02000157020001000157018601570100015702860257" + "data": "0x0018131a0e0200015703000157018601570100015702860257" }, { "filename": "27-osaka-cheesecake-accessories", - "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b015707570100015701b7015701b701570100" + "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b08570100015701b7015701b701570100" }, { "filename": "27-osaka-jinbezame-accessories", - "data": "0x0018161c0d010001a2020001a20400010601a2010002a20400020001a2010602a20106020002a2012302a20106012302a202000206025f01060200" + "data": "0x0018161c0d010001a2020001a20400010601a2010002a2060001a2010602a20106020002a2012302a20106012302a202000206025f01060200" + }, + { + "filename": "27-osaka-owarai-accessories", + "data": "0x0017141c0e010001330100013303000633010001330100013302000533030001330300023301000233" }, { "filename": "28-hyogo-akashiyaki-accessories", - "data": "0x0019141b0f02000260010001000160015d016001ae015d016002ae0160" + "data": "0x0019141b0f0200026002000160015d016001ae015d016002ae0160" + }, + { + "filename": "28-hyogo-jst-meridian-accessories", + "data": "0x0017161c0d01320800013208000132020001320700023201000232010001320100023202000132070002320300" }, { "filename": "28-hyogo-tower-museum-accessories", - "data": "0x0017171e0c020001010800020001490200013f0500020001c20200026f0100013e0200020001490100013e016f023e0300020001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" + "data": "0x0017171e0c020001010a0001490200013f070001c20200026f0100013e040001490100013e016f023e050001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" }, { "filename": "29-nara-kakinohasushi-accessories", @@ -670,11 +671,15 @@ }, { "filename": "29-nara-narazuke-accessories", - "data": "0x0019121a0f03b801b8010001b8" + "data": "0x0019121a0f04b8010001b8" + }, + { + "filename": "30-wakayama-meharizushi-accessories", + "data": "0x0018141c0e010004e1010002e1030101e102c00101021b010102e1030101e1010002e101c001e10100" }, { "filename": "30-wakayama-mikan-kaki-accessories", - "data": "0x0018121a0f03c201c201e101c203c2" + "data": "0x0018121a0f04c201e104c2" }, { "filename": "30-wakayama-nankoume-accessories", @@ -686,23 +691,23 @@ }, { "filename": "33-okauama-muscat-accessories", - "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" + "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e020001c0014e0200" }, { "filename": "33-okayama-denim-jacket01-accessories", - "data": "0x0015171f090354049201000492025404540392010103920354055401920354019204540e540754010106540a54019201010192015402540100075403920154025401000454010102540392015402540100085401920254025401000b5402540100045401010654" + "data": "0x0015171f0903540492010004920654039201010392085401920354019219540101105401920101019203540100075403920354010004540101025403920354010008540192045401000d540100045401010654" }, { "filename": "33-okayama-denim-jacket02-accessories", - "data": "0x0015171f0903540392040003920154045402920400029202540554019204000192035406540400045405540101040004540654040001540192010101920254010003540400015403920254010002540101040001540392025401000354040002540192015402540100035404000454025401000254010104000454" + "data": "0x0015171f09035403920400039205540292040002920754019204000192095404000954010104000a540400015401920101019202540100035404000154039202540100025401010400015403920254010003540400025401920354010003540400065401000254010104000454" }, { "filename": "33-okayama-denim-jacket03-accessories", - "data": "0x0015171f09035302540700025403530254070002540453025405000254015306530500035306530500010102530653050003530253010003530500010102530253010003530500035302530c0002530c0002530c00" + "data": "0x0015171f09035302540700025403530254070002540453025405000254075305000953050001010853050005530100035305000101045301000353050005530c0002530c0002530c00" }, { "filename": "33-okayama-kibidango-accessories", - "data": "0x0018131b0f010002570100015703eb04eb010002eb0100" + "data": "0x0018131b0f010002570100015707eb010002eb0100" }, { "filename": "33-okayama-momotaro-accessories", @@ -710,19 +715,19 @@ }, { "filename": "33-okayama-peach02-accessories", - "data": "0x0018151c0e0300015f03000200035f02000100055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" + "data": "0x0018151c0e0300015f0500035f0300055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" }, { "filename": "33-okayama-retainer-accessories", - "data": "0x0015171f09054d010105040101024d054d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" + "data": "0x0015171f09054d010105040101074d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" }, { "filename": "34-hiroshima-battleship-accessories", - "data": "0x0019171f09060001d70700030001d7010002d7070001d7020004d7010001d7010001d7020001d702d701000ad70100024801000b4802a201000ba202a201000ba2" + "data": "0x0019171f09060001d70a0001d7010002d7070001d7020004d7010001d7010001d7020003d701000ad70100024801000b4802a201000da201000ba2" }, { "filename": "34-hiroshima-lemon-accessories", - "data": "0x0019131c0f0100022901220429042903290100" + "data": "0x0019131c0f0100022901220b290100" }, { "filename": "34-hiroshima-oyster-accessories", @@ -730,51 +735,51 @@ }, { "filename": "34-hiroshima-rice-scoop-accessories", - "data": "0x0018131c10036003600360010001600100010001600100" + "data": "0x0018131c10096001000160020001600100" }, { "filename": "34-hiroshima-shrine-accessories", - "data": "0x0018171f09040008770200050006bf0300060001bf020001bf0400050006bf0300060001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" + "data": "0x0018171f0904000877070006bf090001bf020001bf090006bf090001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" }, { "filename": "34-hiroshima-wani-accessories", - "data": "0x0017141d0d04560300015602000156030003000156030001000256040003000456070003000456" + "data": "0x0017141d0d045603000156020001560600015604000256070004560a000456" }, { "filename": "35-yamaguchi-kintaikyo-accessories", - "data": "0x001b171f09010001ca020002ca010002ca010002ca010001ca01ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188013f023f01000b3f023f01000b3f" + "data": "0x001b171f09010001ca020002ca010002ca010002ca010002ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188033f01000d3f01000b3f" }, { "filename": "35-yamaguchi-motonosumiinari-accessories", - "data": "0x0017171f090e53055303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" + "data": "0x0017171f09135303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" }, { "filename": "35-yamaguchi-white -snake-accessories", - "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" + "data": "0x0017151e0e060001bf040002010300010101af020102000101060001af03010700010101000201030001af030001af02010200" }, { "filename": "35-yamaguhchi-tsunoshima-big-bridge-accessories", - "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" + "data": "0x0015171f091c3c041b02e101e0071b035603e1015601e008560100045601e008560100045601e008560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" }, { "filename": "36-tokushima-awaodori-accessories", - "data": "0x0018131b0f0220015a01010100022301000100025f01000100025f0100" + "data": "0x0018131b0f0220015a0101010002230200025f0200025f0100" }, { "filename": "36-tokushima-citrus-sudachi-accessories", - "data": "0x0018131c0e0100035c0100015c010101c70101015c015c01c7010101c7015c015c010101c70101015c0100035c0100" + "data": "0x0018131c0e0100035c0100015c010101c70101025c01c7010101c7025c010101c70101015c0100035c0100" }, { "filename": "36-tokushima-narutomaki-accessories", - "data": "0x0017141c0d02000301020001000101034f010101000101014f0301014f01010101014f0101014f0101014f01010101034f0101014f0101010005010100" + "data": "0x0017141c0d0200030103000101034f010101000101014f0301014f0201014f0101014f0101014f0201034f0101014f0101010005010100" }, { "filename": "37-kagawa-oliveoil-accessories", - "data": "0x0017121c0f010001ac01000100015c0100035c015c01c6015c015c01c6015c035c" + "data": "0x0017121c0f010001ac0200015c0100045c01c6025c01c6045c" }, { "filename": "38-ehime-dango-accessories", - "data": "0x0018131c0e0300021b020002a6011b0100027001a60100010001570170020001570400" + "data": "0x0018131c0e0300021b020002a6011b0100027001a6020001570170020001570400" }, { "filename": "38-ehime-juice-accessories", @@ -782,43 +787,43 @@ }, { "filename": "38-ehime-mandarin-orange-accessories", - "data": "0x0019121a0f014201e101420342" + "data": "0x0019121a0f014201e10442" }, { "filename": "38-ehime-turt-accessories", - "data": "0x0018141c0e0100045701000157037002570157017001570270015701570270015701700157010004570100" + "data": "0x0018141c0e01000457010001570370035701700157027002570270015701700157010004570100" }, { "filename": "39-kochi-seared-bonito-accessories", - "data": "0x0019131b0f0378010001780294017801780394" + "data": "0x0019131b0f037801000178029402780394" }, { "filename": "40-fukuoka-mentaiko-accessories", - "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf016a026a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" + "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf036a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" }, { "filename": "40-fukuoka-umegaeda-accessories", - "data": "0x0018131c0e010003c1010002c1019702c101c1019701c1019701c101c1029702c1010003c10100" + "data": "0x0018131c0e010003c1010002c1019703c1019701c1019702c1029702c1010003c10100" }, { "filename": "41-saga-saga-accessories", - "data": "0x0017151d0e010002560200015601000100015602000156010001560256020001560100015607000156040001560100015601000156010001560100015603560100015601000156" + "data": "0x0017151d0e010002560200015602000156020001560100035602000156010001560700015604000156010001560100015601000156010004560100015601000156" }, { "filename": "41-saga-yobuko-squid-accessories", - "data": "0x0017131c0e020001510200010003510100010003510100055101000123015101230100025101000251" + "data": "0x0017131c0e0200015103000351020003510100055101000123015101230100025101000251" }, { "filename": "42-nagasaki-castella-accessories", - "data": "0x0018131b0f04ae0428042804ae" + "data": "0x0018131b0f04ae082804ae" }, { "filename": "42-nagasaki-gunkanto-accessories", - "data": "0x0016171f09020001010b000e00010001010c00050002620200016204000400036201000262040001000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" + "data": "0x0016171f09020001011a0001011100026202000162080003620100026205000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" }, { "filename": "42-nagasaki-milkshake-accessories", - "data": "0x0018121d0f014d02000157017101570357037f0100017f0100037f" + "data": "0x0018121d0f014d0200015701710457037f0100017f0100037f" }, { "filename": "43-kumamoto-hitomojiguruguru-accessories", @@ -826,15 +831,15 @@ }, { "filename": "43-kumamoto-ikinaridango-accessories", - "data": "0x0018131b0e01000351010001d401b8028401d401d40129012a012901d4010003d40100" + "data": "0x0018131b0e01000351010001d401b8028402d40129012a012901d4010003d40100" }, { "filename": "44-oita-toriten-accessories", - "data": "0x0019121b0f01000293039301930200" + "data": "0x0019121b0f010006930200" }, { "filename": "44-oita-yaseuma-accessories", - "data": "0x0018121a0e026002880288026002600288" + "data": "0x0018121a0e0260048804600288" }, { "filename": "45-miyazaki-mango-accessories", @@ -842,615 +847,631 @@ }, { "filename": "45-miyazaki-takachihokyo-accessories", - "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e10127010501270106010101050127012701050201013d010501270127053d0127" + "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e1012701050127010601010105022701050201013d01050227053d0127" }, { "filename": "46-kagoshima-senganen-accessories", - "data": "0x0016171f0907000201050005000101019d0500020103000461070001000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" + "data": "0x0016171f09070002010a000101019d050002010300046108000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" }, { "filename": "46-kagoshima-shochu-accessories", - "data": "0x0017121c0f0100012301000100013401000334017f01b7017f01b7027f0334" + "data": "0x0017121c0f010001230200013401000334017f01b7017f01b7027f0334" }, { "filename": "47-okinawa-fish-accessories", - "data": "0x0017171d0d012401000224060001000224010001240500012401000224010001280100022801000600022801000128019b0100029b010001280100022801000100029b0100019b0500019b0100029b0600" + "data": "0x0017171d0d0124010002240700022401000124050001240100022401000128010002280700022801000128019b0100029b01000128010002280200029b0100019b0500019b0100029b0600" }, { "filename": "47-okinawa-satokibi-accessories", - "data": "0x0018161c0d0100011e010001c00100011e0100011e0100010001c00100011e010001c00100011e01c001c0011e010001c00100011e010001c00100010001c0010001c0010001c00100011e01000100011e0100011e0100011e0100011e0100" + "data": "0x0018161c0d0100011e010001c00100011e0100011e020001c00100011e010001c00100011e02c0011e010001c00100011e010001c0020001c0010001c0010001c00100011e0200011e0100011e0100011e0100011e0100" }, { "filename": "47-okinawa-sukugarasu-accessories", - "data": "0x0018141d0e0200020102000100040101000101010e02b101ef01010101039d0201010004010100020002010200" + "data": "0x0018141d0e020002010300040101000101010e02b101ef0201039d020101000401030002010200" } ], "heads": [ { "filename": "01-hokkaido-goryokaku-heads", - "data": "0x00021b16040b0002540a000a00045409000900025401c001dd025408000800025401c001dd01c001dd025407000700035401dd02c001dd0254018706000500035402c001dd03c001dd0187035404000300035401c0015401c002dd03c0018702dd045402000100035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd025401000300025401c001dd02c00287029204c002dd01c00254010003000187015402c001dd03c0029203c001dd02c0025402000200015402870154018701dd08c001dd01c0025403000100015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c0025404000100025401c0025401c001dd02c004dd02c001dd01c0015404000300035401c001dd01c001dd04c001dd01c001dd01c0025403000400025401c002dd01c0045401c002dd01c0025403000400025401dd02c0065402c001dd025403000500055404000554040005000354080003540400" + "data": "0x00021b16040b000254140004541200025401c001dd02541000025401c001dd01c001dd02540e00035401dd02c001dd025401870b00035402c001dd03c001dd018703540700035401c0015401c002dd03c0018702dd04540300035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd02540400025401c001dd02c00287029204c002dd01c0025404000187015402c001dd03c0029203c001dd02c002540400015402870154018701dd08c001dd01c002540400015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c002540500025401c0025401c001dd02c004dd02c001dd01c001540700035401c001dd01c001dd04c001dd01c001dd01c002540700025401c002dd01c0045401c002dd01c002540700025401dd02c0065402c001dd0254080005540400055409000354080003540400" }, { "filename": "01-hokkaido-ishikari-heads", - "data": "0x00031c15040400067f0200017f0b000200037f0400017f0300027f0100017f07000100017f0200037f0200010d037f02e1010003a201e004000200027f0100017f020d06e103a203e004000400020d015702e101a2019501a201e103a2010d02e0019504000300020d015702a2019501ce029704a204e0010d03000200020d019501a201ce029703ce03a205e0020d02000100020d015704ce01cd02ce01cd02a206e00157020d01000100010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d010e010e010d01220957015d0657034e010d010e010e010d03010e570149024e010d010e0100010d0301015701f30c570249014e010d01000100010d01220101015701490d570149014e020d01000200020d034901570434025705010157020d02000300020d01490157023401af033405010157020d03000400030d033402af01340501020d04000600020d05340257030d060009000334030d0900" + "data": "0x00031c15040400067f0200017f0d00037f0400017f0300027f0100017f0800017f0200037f0200010d037f02e1010003a201e00600027f0100017f020d06e103a203e00800020d015702e101a2019501a201e103a2010d02e001950700020d015702a2019501ce029704a204e0010d0500020d019501a201ce029703ce03a205e0020d0300020d015704ce01cd02ce01cd02a206e00157020d0200010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d020e010d01221057034e010d020e010d03010e570149024e010d010e0100010d03010e570249014e010d0200010d01220101015701490d570149014e020d0300020d034901570434025705010157020d0500020d01490157023401af033405010157020d0700030d033402af01340501020d0a00020d05340257030d0f000334030d0900" }, { "filename": "01-hokkaido-tokeidai-heads", - "data": "0x00011b14060a00010b0a00090002a101370900070002a1013701e9013701a10137070007000237030102370700080001e901010196010101e908000800015d01960201015d0800080002e9013702e90800080001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033702a102a1013702a10237010b01e903ca01e9010b01a1023702a10237023702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e901000100015d016f035d016f035d010b035d016f035d016f015d01000100080b013701a10137080b01000100035d010b035d02a10337035d010b035d0100010001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e901000100015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d0100010003e9010b04e9030b04e9010b03e90100" + "data": "0x00011b14060a00010b130002a10137100002a1013701e9013701a101370e000237030102370f0001e901010196010101e91000015d01960201015d100002e9013702e9100001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033704a1013702a10237010b01e903ca01e9010b01a1023702a1043702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e90200015d016f035d016f035d010b035d016f035d016f015d0200080b013701a10137080b0200035d010b035d02a10337035d010b035d020001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e90200015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d020003e9010b04e9030b04e9010b03e90100" }, { "filename": "02-aomori-apple-heads", - "data": "0x00051915080800011b080004000455011b045504000200045502a6011b02a60455020001000655011e011b011e025501010355010001000a5501010455010011551155115511551155115511550100025501a60c55010001000f5501000200065502a60555020003000b550300050007550500" + "data": "0x00051915080800011b0c000455011b04550600045502a6011b02a6045503000655011e011b011e02550101035502000a5501010455010077550100025501a60c5502000f550300065502a6055505000b55080007550500" }, { "filename": "02-aomori-dogu-heads", - "data": "0x00021814080400080a04000400020a0236010a0236010a040004000136030a01ca020a013604000600020a0136010a06000500010a04ca010a05000500030a01ca020a0500010001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a01000500010a01ca030a01ca0500050001ca020a018a010a01ca05000500010a01ca010a01ca020a0500050006ca05000500060a0500050001ca040a01ca05000600010a02ca010a0600" + "data": "0x00021814080400080a0800020a0236010a0236010a08000136030a01ca020a01360a00020a0136010a0b00010a04ca010a0a00030a01ca020a060001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a0600010a01ca030a01ca0a0001ca020a018a010a01ca0a00010a01ca010a01ca020a0a0006ca0a00060a0a0001ca040a01ca0b00010a02ca010a0600" }, { "filename": "02-aomori-goldfish-nebuta-heads", - "data": "0x000119170409000333090008000533080007000233010101330101023307000700033301010333070005000b3305000400053301010133010105330400030002330101043301010433010102330300030003330101033303bf01330101033303000300053307bf033303000100053303bf010103bf010103bf0333010005330dbf03330233010101330fbf0233033301010fbf023301000233022301010bbf0101022301000200013302230dbf02230100040001230dbf01230200040001bf012304bf032304bf012301bf020005000123030101bf010d01b4010d01bf03010123030006000301010d0301010d030104000200010101000201010001330301012303010133010002010100010103000101010001010100013302000123010101230200013301000101010001010100030002010d0002010100050001010b0001010300" + "data": "0x000119170409000333110005330f00023301010133010102330e000333010103330c000b3309000533010101330101053307000233010104330101043301010233060003330101033303bf0133010103330600053307bf03330400053303bf010103bf010103bf0333010005330dbf0533010101330fbf053301010fbf023301000233022301010bbf010102230300013302230dbf0223050001230dbf0123060001bf012304bf032304bf012301bf07000123030101bf010d01b4010d01bf0301012309000301010d0301010d0301060001010100020101000133030101230301013301000201010001010300010101000101010001330200012301010123020001330100010101000101040002010d000201060001010b0001010300" }, { "filename": "03-iwate-moriokamen-heads", - "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" + "data": "0x00031d15040b00012303bf1300012302bf020103bf1100012301bf010105bf1000012303bf03a003bf0f00012302bf04a003bf0f00012302bf05a002bf1000012302bf02a003bf0c0001060401010006bf01000433060001060201034701930201010003bf023304010233030001060101019305470293010102000133040101570301013302000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd012202570101013302000106010102930397019303dd02000133030102570301013303000106020101930297019302010400023304010233050002060401080004330400" }, { "filename": "03-iwate-nanbutekki-heads", - "data": "0x00031b14060700050e09000400030e0500030e06000300010e0b00010e05000200010e0d00010e04000200010e0d00010e04000200010e0600010e0600010e04000300010e0100090e0100010e050003000d0e050002000f0e04000100110e03000100110e0100020e150e140e0100140e01000100130e01000100050e0163010e0163010e0163010e0163060e020002000f0e040003000d0e0500" + "data": "0x00031b14060700050e0d00030e0500030e0900010e0b00010e0700010e0d00010e0600010e0d00010e0600010e0600010e0600010e0700010e0100090e0100010e08000d0e07000f0e0500110e0400110e01002b0e0100140e0200130e0200050e0163010e0163010e0163010e0163060e04000f0e07000d0e0500" }, { "filename": "04-miyagi-datemasamune-heads", - "data": "0x00011d150517000128150002280100120002010128030008000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e080003000528030103280192010e019207000100020e01000192010e0192020103280192010e0192010e0192010e0100020e03000100010e0100010e0192010e0b92020e0100010e03000200020e0292030e0192010e0192010e0192030e0192020e04000200030e0192020e0192020e0192020e0192020e0192020e04000300010e01920188010e0192030e0192030e0192020e019205000300010e01920c880192010e05000300010e01540c880154010e05000300012801540c8801540128050002000128010e01540788016004880154010e012804000200020e01540788016004880154020e040001000128020e01540788016004880154020e012803000100030e01540588026004880154040e03000200030e01540388042303880154030e04000400020e025406880254020e0600080006540a00" + "data": "0x00011d150517000128150002281300020101280b000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e0b000528030103280192010e01920800020e01000192010e0192020103280192010e0192010e0192010e0100020e0400010e0100010e0192010e0b92020e0100010e0500020e0292030e0192010e0192010e0192030e0192020e0600030e0192020e0192020e0192020e0192020e0192020e0700010e01920188010e0192030e0192030e0192020e01920800010e01920c880192010e0800010e01540c880154010e0800012801540c880154012807000128010e01540788016004880154010e01280600020e01540788016004880154020e05000128020e01540788016004880154020e01280400030e01540588026004880154040e0500030e01540388042303880154030e0800020e025406880254020e0e0006540a00" }, { "filename": "04-miyagi-hoya-heads", - "data": "0x0004191407050001710194017102000371050005000394020003940500050001710194017102000371050004000a71040002000e71020002000e710200010010710100010010710100127112711271127112711271010006e405ae05e40100010010e4010002000ee40200" + "data": "0x00041914070500017101940171020003710a000394020003940a000171019401710200037109000a7106000e7104000e71030010710200107101006c71010006e405ae05e4020010e403000ee40200" }, { "filename": "04-miyagi-tanabata-heads", - "data": "0x00041c160406000de1010001bf0300050001e1010001010400010104000101010002e1010001560100040001e1020001010400010104000101020001c701e10200030001e102000356020003bf020003c7030001bf0100020001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c7020001560100010001e10300055605bf05c70400010001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" + "data": "0x00041c160406000de1010001bf080001e1010001010400010104000101010002e101000156050001e1020001010400010104000101020001c701e1050001e102000356020003bf020003c7030001bf030001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c702000156020001e10300055605bf05c7050001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" }, { "filename": "05-akita-akitainu-heads", - "data": "0x00031a14021100012b06001000022b010105001000032b020103000f00042b01010123020101800e00042b06010c00062b0301025f01000b00072b0501015f0a00092b0201030009000b2b010103000200040103000b2b0101030001000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b050001000201032b0101052b020102000101022b05000200040101000101042b010103000201012b05000800032b0301030003010400" + "data": "0x00031a14021100012b1600022b01011500032b02011200042b01010123020101800e00042b06010c00062b0301025f0c00072b0501015f0a00092b02010c000b2b01010500040103000b2b010104000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b06000201032b0101052b020102000101022b0700040101000101042b010103000201012b0d00032b0301030003010400" }, { "filename": "05-akita-magewappa-heads", - "data": "0x00041a15040200108e0400010012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de0200010001de0788016001880184068801de0300020007de01d801de018406de04001600030012c90100020014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de018803000888016001880184078801000400018e01de018e02de018e04de018e02de018e01de018e0200" + "data": "0x00041a15040200108e050012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de030001de0788016001880184068801de050007de01d801de018406de1d0012c9030014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de01880300088801600188018407880500018e01de018e02de018e04de018e02de018e01de018e0200" }, { "filename": "05-akita-namahage-heads", - "data": "0x00021a16040700014109000141040007000241070002410400080002410500024105000600062301000523040005000123060e0123050e0123030004000123010e0623010e0523010e0123020003000123010e0123010e0123040e0123040e0223010e0123010003000123010e0123010e022307410323010e0123010003000123010e0123010e014103230318032301410123010e0123010003000123010e0123010e034102230141022303410123010e0123010002000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e0123010001000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e0123010001000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e0123010001000123010e0123010e012301410101012301cf041801cf0123010101410123010e0123010001000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" + "data": "0x00021a160407000141090001410b000241070002410c000241050002410b0006230100052309000123060e0123050e012307000123010e0623010e0523010e012305000123010e0123010e0123040e0123040e0223010e012304000123010e0123010e022307410323010e012304000123010e0123010e014103230318032301410123010e012304000123010e0123010e034102230141022303410123010e012303000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e012302000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e012302000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e012302000123010e0123010e012301410101012301cf041801cf0123010101410123010e012302000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" }, { "filename": "06-yamagata-hanagasa-heads", - "data": "0x00021b170508000641080006000241065702410600040002410a5702410400030001410a5701320141025701410300020001410157013201410132025701c603570132024101320257014102000200014101570441025701dd025703410132014101570141020001000141015701320341025701dd045701410132014103570141010001000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd085701410141035701c6035702dd0341085701410141075701dd024101320241035701410132025701410141035701410357024101320141013201410257044101570141014102570132024102570332024101320141015702410132014101570141014102570141013201410132025702410232014102570132024101320157014101000141015701320241013203570341015701280257023201570141010001000141025701410132075701280123012804570141010002000141035701c6075701280123012802570141020002000141065701320341013201570128012301280157014102000300014105570141013201410132035701280157014103000400024104570141013204570241040006000241065702410600080006410800" + "data": "0x00021b1705080006410e000241065702410a0002410a570241070001410a570132014102570141050001410157013201410132025701c60357013202410132025701410400014101570441025701dd02570341013201410157014103000141015701320341025701dd04570141013201410357014102000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd08570241035701c6035702dd034108570241075701dd0241013202410357014101320257024103570141035702410132014101320141025704410157024102570132024102570332024101320141015702410132014101570241025701410132014101320257024102320141025701320241013201570141010001410157013202410132035703410157012802570232015701410200014102570141013207570128012301280457014103000141035701c60757012801230128025701410400014106570132034101320157012801230128015701410500014105570141013201410132035701280157014107000241045701410132045702410a000241065702410e0006410800" }, { "filename": "06-yamagata-imoni-heads", - "data": "0x00041b14050800060d08000600020d0600020d06000400020d0a00020d04000300010d0e00010d03000200010d0400080e0400010d02000200010d0200020e028501880103028501970185020e0200010d02000100010d0100020e0185021b01970303029702030185020e0100010d01000100010d010e0185030302970203019702e102030385010e010d01000100010d02850288021b0188020b021b0285020b021b0185010d0100010e010d01970203020b030301850397020302e101880185010d010e020e01970203019701030188020303e10103028802970203020e010e038502e10103018802e1028801850203039701030285010e0100020e01e102970285020301880497020b0285020e01000100040e029702e1020301850297021b0185040e01000200050e0285016201bc016201bc01620185050e02000300100e030005000c0e0500" + "data": "0x00041b14050800060d0e00020d0600020d0a00020d0a00020d0700010d0e00010d0500010d0400080e0400010d0400010d0200020e028501880103028501970185020e0200010d0300010d0100020e0185021b01970303029702030185020e0100010d0200010d010e0185030302970203019702e102030385010e010d0200010d02850288021b0188020b021b0285020b021b0185010d0100010e010d01970203020b030301850397020302e101880185010d030e01970203019701030188020303e10103028802970203030e038502e10103018802e1028801850203039701030285010e0100020e01e102970285020301880497020b0285020e0200040e029702e1020301850297021b0185040e0300050e0285016201bc016201bc01620185050e0500100e08000c0e0500" }, { "filename": "06-yamagata-zaookama-heads", - "data": "0x00041d14040a00072702010227040007000b2703010127030005000e27024c0101012702000400022701010c2704010127010003000127020103270a010127024c0101012701000200020102270301073004010127030101270100010102270201019b0b3002010127024c01010127022703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f3003010127020001000201014c01010e3003010127020002000101014c03010a300201014c01010127030003000201014c0b01014c0101014c0101040005000401014c0101014c0101014c0301014c01010600" + "data": "0x00041d14040a000727020102270b000b270301012708000e27024c010101270600022701010c270401012704000127020103270a010127024c010101270300020102270301073004010127030101270100010102270201019b0b3002010127024c0101032703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f300301012703000201014c01010e300301012704000101014c03010a300201014c0101012706000201014c0b01014c0101014c010109000401014c0101014c0101014c0301014c01010600" }, { "filename": "07-fukushima-peach-heads", - "data": "0x00041d16040500020f12000300030f0197010f0100030f0d000100060f0297030f0100020f0a000100030f05b90297030f0197010f09000100020f04b9011902b9020f0297030f0100020f05000100020f04b9011903b9040f0197010f0100030f04000100010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297020f040f05b9040f05b9011902b9040f0d0f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f01000600020f0100050f03b9021903b903000a00030f04b9011903b904000a00010f020003b9011904b90400100003b90600" + "data": "0x00041d16040500020f1500030f0197010f0100030f0e00060f0297030f0100020f0b00030f05b90297030f0197010f0a00020f04b9011902b9020f0297030f0100020f0600020f04b9011903b9040f0197010f0100030f0500010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297060f05b9040f05b9011902b9110f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f0700020f0100050f03b9021903b90d00030f04b9011903b90e00010f020003b9011904b9140003b90600" }, { "filename": "07-fukushima-takizakura-heads", - "data": "0x00021e14021200035f07001000045f01db025f05000c00035f01db035f01b8045f04000a00045f01db045f01b8025f01db015f0100025f01000600025f0200035f01b801db025f0100015f01b8025f01db0100015f02b8015f0500025f01b8015f0200015f010001b8035f0100025f01b8010001db01b8015f01db025f0200055f01b8025f0200015f010001b80400015f04b8015f01db015f01db0100015f01db01b8025f01b8015f01db095f020003b8025f0100015f01db0100015f01db025f02b8025f01b8025f0100035f01b8015f04b80100015f04000300035f01b8025f01b8025f0200035f05b806000100025f0200015f01b80100055f0100015f0100015f03b80100015f01b8045f0100015f01b8035f020001b8015f01db015f01b8015f040003b80100025f01db02b8025f025f02b8015f0100025f010001db020003b8010003b80200025f01db045f01db035f01b8025f01b8015f040006b80300015f01db0100015f01db015f01db0100015f02b8015f010001b8015f050005b8025f0100015f0200015f01db01000200035f02b8045f020005b8065f04000200015f0100035f01db01b8025f06b80100025f01db035f01db03000400025f010001db0200015f010005b80100015f010001db015f0100015f01db03000500015f050005b8040001db0200015f0400" + "data": "0x00021e14021200035f1700045f01db025f1100035f01db035f01b8045f0e00045f01db045f01b8025f01db015f0100025f0700025f0200035f01b801db025f0100015f01b8025f01db0100015f02b8015f0500025f01b8015f0200015f010001b8035f0100025f01b8010001db01b8015f01db025f0200055f01b8025f0200015f010001b80400015f04b8015f01db015f01db0100015f01db01b8025f01b8015f01db095f020003b8025f0100015f01db0100015f01db025f02b8025f01b8025f0100035f01b8015f04b80100015f0700035f01b8025f01b8025f0200035f05b80700025f0200015f01b80100055f0100015f0100015f03b80100015f01b8045f0100015f01b8035f020001b8015f01db015f01b8015f040003b80100025f01db02b8045f02b8015f0100025f010001db020003b8010003b80200025f01db045f01db035f01b8025f01b8015f040006b80300015f01db0100015f01db015f01db0100015f02b8015f010001b8015f050005b8025f0100015f0200015f01db0300035f02b8045f020005b8065f0600015f0100035f01db01b8025f06b80100025f01db035f01db0700025f010001db0200015f010005b80100015f010001db015f0100015f01db0800015f050005b8040001db0200015f0400" }, { "filename": "07-fukushima-tsurugacastle-heads", - "data": "0x00011a140309000162050001620700080001620700016206000900078907000900078907000800098906000900020103080201070007000b89050006000d89040007000201017f0108010101890101017f0108020105000600068901010689040005000689010101a301010689030006000101017f010107890101017f01010400050005890201017f0201058903000300019406890501068901940100020002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" + "data": "0x00011a140309000162050001620f000162070001620f000789100007890f0009890f000201030802010e000b890b000d890b000201017f0108010101890101017f010802010b0006890101068909000689010101a30101068909000101017f010107890101017f0101090005890201017f02010589060001940689050106890194030002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" }, { "filename": "08-ibaraki-anglerfish-heads", - "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + "data": "0x00031e1401070005981500027e0a981000047e0b980d00047e03000a980c00037e06000a980b00017e06000c980f000f980c0012980a001498080015980500037e1598037e0100047e1598087e1598047e0100027e010015980100027e060005980a390598090003980e3902980b000198103901980d000e980700" }, { "filename": "08-ibaraki-hananuki-ravine-heads", - "data": "0x00041c1502040001c006000136019701c601d80197013602bf0700020001c0060001bf01000136019701d801bf01970136060001bf0200060001bf010001bf0100029704d802970800040002c604000136019701d8019702d801970136020002bf0400070001c601000197013601d80188019701bf018801d8013601bf030001c0030009000136019702d8029702d801970136010001c0020002c00100010002c0020001c0010001bf01000136019701bf018802970288019701360700030001c0010002bf01000197013603d8029703d8013601970600080002970388029703880297020001c6010001bf010007000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf0300010002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d802970400010002bf02000136029705d8029705d802970136030005000136019701d802bf02d802bf019701d802bf03d801c60136010001bf01000400019701360197038802bf0188019702bf048801c60197013602bf0100040001970136019706d8029706d8019704bf170002bf0100" + "data": "0x00041c1502040001c006000136019701c601d80197013602bf090001c0060001bf01000136019701d801bf01970136060001bf080001bf010001bf0100029704d802970c0002c604000136019701d8019702d801970136020002bf0b0001c601000197013601d80188019701bf018801d8013601bf030001c00c000136019702d8029702d801970136010001c0020002c0020002c0020001c0010001bf01000136019701bf018802970288019701360a0001c0010002bf01000197013603d8029703d8013601970e0002970388029703880297020001c6010001bf08000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf040002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d80297050002bf02000136029705d8029705d80297013608000136019701d802bf02d802bf019701d802bf03d801c60136010001bf0500019701360197038802bf0188019702bf048801c60197013602bf050001970136019706d8029706d8019704bf170002bf0100" }, { "filename": "08-ibaraki-rocket-heads", - "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a26010101000500057f0b2601000400057f0b2602000300057f0b26030002000155047f0b260400024201000155027f020109260500040001550100030107260600030001420100020d0301032601290126017f060002000142010001730100020d03010326017f0700050001420100010d0100027f0201017f08000600017301000155027f0101017f0900030001730200024201000155027f0a000a0001550b00" + "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a2601010600057f0b260500057f0b260500057f0b2605000155047f0b260400024201000155027f0201092609000155010003010726090001420100020d0301032601290126017f08000142010001730100020d03010326017f0c0001420100010d0100027f0201017f0e00017301000155027f0101017f0c0001730200024201000155027f140001550b00" }, { "filename": "09-tochigi-sanzaru-heads", - "data": "0x00041e1401050003340500043404000434040003000634030006340200063403000300023401af013401af02340100023401af013401af063401af013401af013403000200013401b805af033405af043405af013402000200013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af01340200020002b805af01b8023404af01b801af01340135013405b803000300023401af020e01af01b8023401af04b80135033402b8010e02b8013402000200033403af0434013504b801340135033402af04340100010001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af013403000100063402af0100023405af0135033403af01340400010003340235013401af0234020005af0135043401af013405000200013401350734010005af053401350234040002000b3403af013506340135023403000100063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" + "data": "0x00041e14010500033405000434040004340700063403000634020006340600023401af013401af02340100023401af013401af063401af013401af01340500013401b805af033405af043405af01340400013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af0134040002b805af01b8023404af01b801af01340135013405b80600023401af020e01af01b8023401af04b80135033402b8010e02b801340400033403af0434013504b801340135033402af0434020001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af01340400063402af0100023405af0135033403af0134050003340235013401af0234020005af0135043401af01340700013401350734010005af05340135023406000b3403af01350634013502340400063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" }, { "filename": "09-tochigi-strawberry-heads", - "data": "0x000416150602000122020001c0010001c008000300012204c003710500020001c0022204c004710300010005c00571010102710200020002c006710101017101010171020002c0017101c0077101010371010001000e71010001000f7101000f7101000f7101000f7102000e7102000d71010003000c710100040004710146027101460371010005000471024603710200070007710200090004710300" + "data": "0x000416150602000122020001c0010001c00b00012204c00371070001c0022204c00471040005c0057101010271040002c006710101017101010171020002c0017101c007710101037102000e7102000f7101000f7101000f7101000f7102000e7102000d7104000c710500047101460271014603710600047102460371090007710b0004710300" }, { "filename": "09-tochigi-toshogu-heads", - "data": "0x00031f1402060001c70f0001c70600070003c7022901c7012908c70700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30700060002c702e3012701e3012701e3012701e3012701e3012702e302c706000500012902e301c7012901c701e302c7015402c701e303c702e301c705000600016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0600050001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290500090001c7027f01c7037f01c7027f01c70900070002c70154014101c70154014101c70141015401c70141015402c70700010001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014102c701c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" + "data": "0x00031f1402060001c70f0001c70d0003c7022901c7012908c70e0001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30e0001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30e0001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30d0002c702e3012701e3012701e3012701e3012701e3012702e302c70b00012902e301c7012901c701e302c7015402c701e303c702e301c70b00016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0b0001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290e0001c7027f01c7037f01c7027f01c7100002c70154014101c70154014101c70141015401c70141015402c7080001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014103c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" }, { "filename": "10-gunma-kusatsu-heads", - "data": "0x00041d15030600020d0200020d0200020d0200020d06000400013201da028802da028802da028802da028801da013204000400013201da023202da023202da023202da023201da01320400050001da025702da025702da025702da025701da0500060002570200025702000257020002570600060002570200025702000257020002570600030003e6025702e6025702e6025702e6025703e6030003000193013e018d0257023e0257023e0257023e02570101013e0193030003000193013e0101033e018d023e018d033e018d033e018d013e0193030003000193013e028d053e018d043e028d023e018d0193030003000193023e018d013e018d013e018d023e018d013e028d013e018d033e0193030003000193018d053e018d023e018d053e018d013e018d0193030003000193013e018d033e018d063e018d013e018d023e010101930300030001930101033e018d033e018d023e018d023e018d013e018d013e0193030003000193033e018d033e047f018d013e018d043e019303000100027f0193033e018d033e017f023e018d033e027f023e027f0100017f017f0200017f03e6017f0ce6027f01e603000100027f0100027f1400" + "data": "0x00041d15030600020d0200020d0200020d0200020d0a00013201da028802da028802da028802da028801da01320800013201da023202da023202da023202da023201da0132090001da025702da025702da025702da025701da0b0002570200025702000257020002570c000257020002570200025702000257090003e6025702e6025702e6025702e6025703e606000193013e018d0257023e0257023e0257023e02570101013e019306000193013e0101033e018d023e018d033e018d033e018d013e019306000193013e028d053e018d043e028d023e018d019306000193023e018d013e018d013e018d023e018d013e028d013e018d033e019306000193018d053e018d023e018d053e018d013e018d019306000193013e018d033e018d063e018d013e018d023e01010193060001930101033e018d033e018d023e018d023e018d013e018d013e019306000193033e018d033e047f018d013e018d043e01930400027f0193033e018d033e017f023e018d033e027f023e027f0100027f0200017f03e6017f0ce6027f01e60400027f0100027f1400" }, { "filename": "10-gunma-negi-heads", - "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030001dd03dd0100034c03dd0100034c010003dd04dd034c04dd034c03dd0100010003dd034c04dd024c04dd0100010003dd034c04dd024c03dd0200010004dd024c03dd024c04dd0200020003dd024c03dd024c03dd0300030002dd024c03dd024c02dd0400050001dd014c02dd024c01dd06000500074e06000600054e0700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c103ca01c10700060001c1010101c1010101c107000700010101c101010800" + "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030004dd0100034c03dd0100034c010007dd034c04dd034c03dd020003dd034c04dd024c04dd020003dd034c04dd024c03dd030004dd024c03dd024c04dd040003dd024c03dd024c03dd060002dd024c03dd024c02dd090001dd014c02dd024c01dd0b00074e0c00054e0d0001c1010101c1010101c10d0001c1010101c1010101c10d0001c1010101c1010101c10d0001c1010101c1010101c10d0001c103ca01c10d0001c1010101c1010101c10e00010101c101010800" }, { "filename": "10-gunma-takasakidaruma-heads", - "data": "0x00061a1607050009410500030002410101014102010741030002000f41020001000141016001410123020102230101022302010123014101e601410100010001e6022301010423010104230101022301e60100014101e60123020103a70101010e010103a7020101230141016001e60160020101a7030101a7010101a7030101a7020101e6016001e60160020101a7030101a7010101a7030101a7020101e6014101e60141020101a7030101a7010101a7030101a7020101e60160014101600223010103a7030103a701010223014101e602410123030101a1010101a1010101a1010101a1030101230241010001410123010e040102410501010e012301410100010002410223010e0123014102010141010e0123010e02230241010002000341010e0123010e0301010e0123010e034102000300014101600141016001410260024101600141016001410300040001e6014101e6024101e6024101e6014101e60400060001e6014101e6014101e6014101e60600" + "data": "0x00061a16070500094108000241010101410201074105000f4103000141016001410123020102230101022302010123014101e60141020001e6022301010423010104230101022301e60100014101e60123020103a70101010e010103a7020101230141016001e60160020101a7030101a7010101a7030101a7020101e6016001e60160020101a7030101a7010101a7030101a7020101e6014101e60141020101a7030101a7010101a7030101a7020101e60160014101600223010103a7030103a701010223014101e602410123030101a1010101a1010101a1010101a1030101230241010001410123010e040102410501010e01230141020002410223010e0123014102010141010e0123010e0223024103000341010e0123010e0301010e0123010e0341050001410160014101600141026002410160014101600141070001e6014101e6024101e6024101e6014101e60a0001e6014101e6014101e6014101e60600" }, { "filename": "11-saitama-tokinokane-heads", - "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" + "data": "0x000315140a050002ab070006ab03000aab020001d701b801000292010001b8030001d7010001b801000292010001b80200038601b801000292010001b8050001b8040001b8050001b8048501b8050001b8048501b8040008ab02000aab030001b8048501b8050001b8048501b8050001b8048501b8040001b8068501b8030001b801b601a401b601a401b6018501b8030001b8068501b8030001b8068501b80100" }, { "filename": "11-saitama-whitetiger-heads", - "data": "0x00031a1406020002010b00020103000100040109000401020001000101015f020109000201015f010102000201025f020107000201025f01010200090103e3060102000100030101e3050101e3050101e3010102000200010101e3040101e3030101e3040101e302000200040101e3020101e3010101e3020101e303010200020010010200020001e30e0101e30200020010010200020010010200020001e30e0101e30200020010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" + "data": "0x00031a1406020002010b000201040004010900040103000101015f020109000201015f010102000201025f020107000201025f01010200090103e306010300030101e3050101e3050101e301010400010101e3040101e3030101e3040101e30400040101e3020101e3010101e3020101e3030104001001040001e30e0101e30400100104001001040001e30e0101e3040010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" }, { "filename": "12-chiba-loquat-heads", - "data": "0x0003181508070002c9070006000426060004000826040003000a26030002000c26020001000e26010001000e260100102610261026102610261026102601000f26010006260186012601860526010002000626018605260200040008260400050006260500" + "data": "0x0003181508070002c90d0004260a00082607000a2605000c2603000e2602000e260100702601000f26010006260186012601860526030006260186052606000826090006260500" }, { "filename": "12-chiba-nanohana-heads", - "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a02000300012a0100012a0100022a0100022a0100012a0100022a0100022a06000200012a0100122a0100012a02000200172a01000100062a0122112a01000100152a0122022a01000100032a0122152a1a2a042a01c0102a01c0042a032a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a02000100012a020001c0102a01c0012a0100012a0100" + "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a0500012a0100012a0100022a0100022a0100012a0100022a0100022a0800012a0100122a0100012a0400172a0200062a0122112a0200152a0122022a0200032a0122332a01c0102a01c0072a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a0300012a020001c0102a01c0012a0100012a0100" }, { "filename": "12-chiba-soysauce-heads", - "data": "0x000317140b010008b40300020006b4020001850100020006b404000200066f030001850200016f0101046f04000200016f0101046f04000100016f01b8010104b8016f03000100016f010105b8016f0300026f06b8026f0200026f06b8026f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f02b803ea03b8016f0200016f08b8016f02000a6f0200" + "data": "0x000317140b010008b4050006b402000185030006b40600066f030001850200016f0101046f0600016f0101046f0500016f01b8010104b8016f0400016f010105b8016f0300026f06b8026f0200026f06b8026f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f02b803ea03b8016f0200016f08b8016f02000a6f0200" }, { "filename": "13-tokyo-station-heads", - "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" + "data": "0x00011c14050b0001362d000136160001361200030d0336030d0d00010d010b010d0136010d010b010d0136010d010b010d0c00030d0136030d0136030d0700013604000bbf04000136070001bf020b01bf030b01bf020b01bf070001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf020b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf020b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf020b02bf0272010b04bf037201bf010b02bf010b027202bf010b" }, { "filename": "13-tokyo-tower-heads", - "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" + "data": "0x0000181408030001e0010002e001a203e0010001e0060001e0010001e0010001a201e0010001e0010001e0060003e0010001a201e0010003e0060003e0010001a201e0010003e0060001e0010001e0010002e0010001e0010001e0050001e0020002e001a203e0020001e0040001e0010002e0010001a201e0010002e0010001e0040001e0010002e0010001a201e0010002e0010001e0040001e0010001e0020001a201e0020001e0010001e0040001e0010001e0020002e0020001e0010001e0040003e0010001e001a202e0010003e0040001e0010002e0010001a201e0010002e0010001e0030001e0020002e0010001a201e0010002e0020001e0020001e0010002e0020001a201e0020002e0010001e0020001e0010002e0020002e0030001e0010001e0020001e0010001e0020001e002a201e0020001e0010001e0020003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020002e0010001e0020001e0010002a2010001e0020001e0010002e0010001e0010001e0020002a2020001e0010001e0010006e0020002a2020005e0" }, { "filename": "14-ibaraki-anglerfish-heads", - "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + "data": "0x00031e1401070005981500027e0a981000047e0b980d00047e03000a980c00037e06000a980b00017e06000c980f000f980c0012980a001498080015980500037e1598037e0100047e1598087e1598047e0100027e010015980100027e060005980a390598090003980e3902980b000198103901980d000e980700" }, { "filename": "14-kanagawa-curry-heads", - "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d4043502010100030102000400020105d40535020106000300030105d40635020105000300020106d40635020105000300020106d40635020105000300030105d40635020105000400020104d40635020106000400030103d40635020106000500030101d401860142016003350201070006000401033503010800070008010900090004010b00" + "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d404350201010003010600020105d4053502010900030105d4063502010800020106d4063502010800020106d4063502010800030105d4063502010900020104d4063502010a00030103d4063502010b00030101d4018601420160033502010d000401033503010f000801120004010b00" }, { "filename": "14-kanagawa-king-heads", - "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" + "data": "0x0002171409070001210d0001a90d0001a90c0001a7011301a70a0001a7011301a7011301a7080001a7011301a7011301a7011301a70500012101a9012101a9012101a9012101a9012101a90121040001b3014201270142012701420127014201b30500014901130127011301270113012701420149030003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b30142011303000142011301490127014901270149012701490113014203000113014201b3012701b3012701b3012701b30142011303000142011301490127014901270149012701490113014203000113014201b3012701b3012701b3012701b30142011303000142011301490127014901270149012701490113014203000113014201b3012701b3012701b3012701b301420113030001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" }, { "filename": "15-niigata-sasadango-heads", - "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" + "data": "0x00021c1604100001e11500011b01e11500021b070002e10c00031b040004e10c000129021b030006e10900021b0129011b0129020007e1070001290100021b0129021b0129010008e107000129031b0129011b0129011b08e10800011b0129011b0329021b08e10700021b0429031b08e10700031b0229031b08e10700031b0429011b01e103dd05e10700021b0129011b0129021b012905dd03e10800011b0129021b0129021b06dd03e108000129021b0129021b07dd02e10700031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10e0009e1100006e10b00" }, { "filename": "15-niigata-tulip-heads", - "data": "0x00041a1506090002b90900080004b90800010002b9040006b9040002b9010004b9030006b9030004b905b9010008b9010005b914b914b914b914b914b914b914b9010012b90100010012b90100020010b90200020009b9016a06b90200040006b9016a05b90400060008b90600" + "data": "0x00041a1506090002b9110004b9090002b9040006b9040002b9010004b9030006b9030009b9010008b9010091b9010012b9020012b9030010b9040009b9016a06b9060006b9016a05b90a0008b90600" }, { "filename": "16-toyama-blackramen-heads", - "data": "0x00041b150508000633080006000a33060004000e3304000300053306850533030002000433038502d3058504330200010003330385018803d303e4048503330100010002330285018803d302010222010103e402850233010003330285018802d3070103e40185033302330285018803d3082202e40285023302330285018802d3092203e4018502330233028503d3080104e4018502330333018504d3062204e40185033301000233028504d3040104e4028502330100010003330185018805d3078503330100020003330185018803d3028503e402850333020003000333048503e40385033303000400043306850433040006000a330600" + "data": "0x00041b1505080006330e000a330a000e33070005330685053305000433038502d305850433030003330385018803d303e404850333020002330285018803d302010222010103e402850233010003330285018802d3070103e4018505330285018803d3082202e4028504330285018802d3092203e401850433028503d3080104e401850533018504d3062204e40185033301000233028504d3040104e402850233020003330185018805d307850333030003330185018803d3028503e40285033305000333048503e40385033307000433068504330a000a330600" }, { "filename": "16-toyama-kutabe-heads", - "data": "0x00031a17010d00060e06000b000a0e04000400010e04000e0e02000300010e04000f0e02000300020e0300100e01000300030e0200050e0501060e01000400070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e0401030e0a0e0701010e0401030e0a0e0501020e0501030e0a0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e01000500010e1300" + "data": "0x00031a17010d00060e11000a0e0800010e04000e0e0500010e04000f0e0500020e0300100e0400030e0200050e0501060e0500070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e04010d0e0701010e04010d0e0501020e05010d0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e0600010e1300" }, { "filename": "16-toyama-raicho-heads", - "data": "0x00031d15021200047f05001100077f03001100047f020e017f010e02000600010f0a00077f020e0100050001dd010f01dd0800077f0400050001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f04000100010e017f0200010f01dd017e107f03000100017f020e157f02000200177f02000200177f02000300167f02000300157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e0300010002dd017e010f0300027f0400027f0500010f017e02dd02000300010f037e0100027f010e0300027f010e0300027e010f0400" + "data": "0x00031d15021200047f1600077f1400047f020e017f010e0800010f0a00077f020e060001dd010f01dd0800077f090001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f0500010e017f0200010f01dd017e107f0400017f020e157f0400177f0400177f0500167f0500157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e040002dd017e010f0300027f0400027f0500010f017e02dd0500010f037e0100027f010e0300027f010e0300027e010f0400" }, { "filename": "17-ishikawa-curry-heads", - "data": "0x00071c1504060001010172020108720600040003720ab8037204000300027201b80225013403250234022502b8022201720300020002720325013401250134012502340125013402250422017202000100027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b80172017201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b80172027201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b802720100020003720fb8027202000300037204b8036406b8027203000500037208b80372050007000a720700" + "data": "0x00071c1504060001010172020108720a0003720ab803720700027201b80225013403250234022502b80222017205000272032501340125013401250234012501340225042201720300027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b8027201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b8037201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b80272030003720fb802720500037204b8036406b802720800037208b803720c000a720700" }, { "filename": "17-ishikawa-jibuni-heads", - "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b8032302000300032301de0123038301b8012301de032303000400032301de052301880223040006000223018801de022301de01230600" + "data": "0x00051a1406080004230d000a23080003230110012302100723050010230300042304e101b804d8052302000323055c01e1046002b8032301000323016a01b804e101b804d803b80523015f016a02b80483026004d802b80423015f02b8051a012201b8046002b8032302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d012302000223023402490383031a04b80223030003230249031a038302b803230500032301de0123038301b8012301de03230700032301de0523018802230a000223018801de022301de01230600" }, { "filename": "17-ishikawa-kinpaku-heads", - "data": "0x000518150705a6076d05ea03a60b6d03a60aa6066d01ea09a6086d07a60a6d10a6016d11a611a604ea0da611a6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" + "data": "0x000518150705a6076d05ea03a60b6d0da6066d01ea09a6086d07a60a6d10a6016d22a604ea1ea6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" }, { "filename": "18-fukui-dinosaur-heads", - "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b02000b0001e8011b01e8011b01e8011b01e80200071b011b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a03000100011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a04000200021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a04000300041b01e8011b01e8051b01e8061b05000400022a071b01e8081b05000600022a051b01e8081b05000800012a091b022a0100041b02000900032a021b01e8032a09000c00031b0c000d00021b0c000e00011b0c000e00021b0b00" + "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b0d0001e8011b01e8011b01e8011b01e80200081b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a0400011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a0600021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a0700041b01e8011b01e8051b01e8061b0900022a071b01e8081b0b00022a051b01e8081b0d00012a091b022a0100041b0b00032a021b01e8032a1500031b1900021b1a00011b1a00021b0b00" }, { "filename": "18-fukui-sabae-glasses-heads", - "data": "0x00091c1206030004710800047103000100027102060201027104000271020602010271010001000171020603010106017104000171020603010106017101000171020603010306047102060301030601710171010603010406017102000171010603010406017101710301050601710200017103010506017101710201060601710200017102010606017101000171060601710400017106060171010001000271040602710400027104060271010003000471080004710300" + "data": "0x00091c120603000471080004710400027102060201027104000271020602010271020001710206030101060171040001710206030101060171010001710206030103060471020603010306027101060301040601710200017101060301040602710301050601710200017103010506027102010606017102000171020106060171010001710606017104000171060601710200027104060271040002710406027104000471080004710300" }, { "filename": "18-fukui-tojinbo-heads", - "data": "0x00051c15050d00037407000800037402000374027205000500037203740272037402720274030005000372037402720374027202740300030002740372037402720374027202740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372039902720374020502740300030002990372039902720374020502740300030002990305039902720374020502990300030002990305039902720399020502990300030002990305039902720399020502990272010003000299030503990205039902050299027201000100027702990305030c02050399020502990272017703000299030503990205039902050299027701000177010013770200" + "data": "0x00051c15050d0003740f0003740200037402720a00037203740272037402720274080003720374027203740272027406000274037203740272037402720274060002740372037402720374020502740600027403720374027203740205027406000274037203740272037402050274060002740372039902720374020502740600029903720399027203740205027406000299030503990272037402050299060002990305039902720399020502990600029903050399027203990205029902720400029903050399020503990205029902720200027702990305030c02050399020502990272017703000299030503990205039902050299027701000177010013770200" }, { "filename": "19-yamanashi-shingen-heads", - "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" + "data": "0x00011c1604050001280d000128080001280f000128070001280f0001280700022801000501010005010100022807000228010101280901012801010228070001010228020103280101032802010228010105000401042801010106012801060101042804010200015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a90455020002010355048803550488035502010300030101550d8801550301030004010d880401020005010d880401020005010d880401020005010123038801230288016001230388012304010200050104230188036001880423040102000501058803230488050102000601038801230388012303880401030004010100010102000788010005010200010101000201010001010a000201010002010300" }, { "filename": "19-yamanashi-wine-heads", - "data": "0x0001161409050003e705000500035b0500050003e70500050003e705000500037905000200011b082202000100011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" + "data": "0x0001161409050003e70a00035b0a0003e70a0003e70a0003790700011b08220300011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" }, { "filename": "20-nagano-matumotocastle-heads", - "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" + "data": "0x00011f16020a00010d0300010d180001e3030d01e3180001e3030d01e31600020d01e3030d01e3020d150007011600030e0123030e1500090d1300050d01e3050d1400020101e3010101e302011500020d01e3030e01e3020d12000d0d060001e3070001e30200040103230401060001e3010101e3050001e3010101e30100040e0323040e050001e3030e01e3030001e3030e01e30c0d0300070d010007e30c0d0400030e0400016602e302660c0104e3050d020006e3040e0523030e03e3070d08e30c0d080e03000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e013605010300040101de03d802de02d801de03d801de023601970136050e070002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" }, { "filename": "20-nagano-wasabi-heads", - "data": "0x0003161505040002220100024e08000100024e01000222034e08000122024e0222034e09000122034e0122014e0222090001000122034e032201c90122070002000622014e022206000200013f022201c9014e042206000200013f014e0622014e01c90500030001c90922040003000a22040003000422014e062203000400013f014e0522014e0322020005000922014e020005000b22010006000122014e082201000700042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" + "data": "0x0003161505040002220100024e0900024e01000222034e08000122024e0222034e09000122034e0122014e02220a000122034e032201c9012209000622014e02220800013f022201c9014e04220800013f014e0622014e01c9080001c9092207000a2207000422014e06220700013f014e0522014e032207000922014e07000b2207000122014e08220800042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" }, { "filename": "21-gifu-gassho-summer-heads", - "data": "0x00021d14040b0003d80b000b0003d80b000a0002d8018402d80a00090002d8038402d80900080002d80184037c018402d80800070002d8028402010123028404d80500070001d8028401ca0201012301ca028401d80700060001d8028407ca028401d80600050001d80184057c01ca057c018401d80500040002d8018401ca030103ca030101ca018402d80400030002d8028401ca030103ca030101ca028402d80300030001d802840dca028401d80300020002d8018402ca020101ca020101ca020101ca020102ca018402d80200010002d8018403ca020101ca020101ca020101ca020103ca018402d80100010001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + "data": "0x00021d14040b0003d8160003d8150002d8018402d8130002d8038402d8110002d80184037c018402d80f0002d8028402010123028404d80c0001d8028401ca0201012301ca028401d80d0001d8028407ca028401d80b0001d80184057c01ca057c018401d8090002d8018401ca030103ca030101ca018402d8070002d8028401ca030103ca030101ca028402d8060001d802840dca028401d8050002d8018402ca020101ca020101ca020101ca020102ca018402d8030002d8018403ca020101ca020101ca020101ca020103ca018402d8020001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018404d8018401ca118401ca018404d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" }, { "filename": "21-gifu-gassho-winter-heads", - "data": "0x00021d14040900070109000800030103d8030108000800030101d8018401d8030108000700030101d8038401d8050105000600030101d80184037c018401d8040105000500030101d8028402010123028401d8010102d805000400030101d8028401ca0201012301ca028401d80200010104000300030101d80184030103ca0301018401d8030103000200030101d80184050101ca0501018401d8030102000200030101d801840bca018401d8030102000100030101d802840bca028401d8030101000100020101d802840dca028401d802010100030101d801840fca018401d80301020101d8018411ca018401d80201010101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + "data": "0x00021d1404090007011100030103d803011000030101d8018401d803010f00030101d8038401d805010b00030101d80184037c018401d804010a00030101d8028402010123028401d8010102d80900030101d8028401ca0201012301ca028401d8020001010700030101d80184030103ca0301018401d803010500030101d80184050101ca0501018401d803010400030101d801840bca018401d803010300030101d802840bca028401d803010200020101d802840dca028401d802010100030101d801840fca018401d8050101d8018411ca018401d8030101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018404d8018401ca118401ca018404d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" }, { "filename": "21-gifu-keichan-heads", - "data": "0x00021d1a03040002061400060004060500050606000a000106090003060300040006060100017d029c0900010602000300010605000322017d029c0200060603000400090601d2019c010001060900030003ca0123022203e901220106017d029c0106022303ca0300020002ca0223022201e9037d01220106027d019c017d0106010c022302ca0200010002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012302ca02ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c0123012301ca0123010c0322047d029c0322027d029c017d0122010c012301ca01230123010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012302ca02ca0123010c0422017d029c037d0422027d0222010c012302ca03ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca0100020004ca0e2304ca0200030014ca03001a001a001a000c00013d0101013d01010a000d00013d0100013d0a00" + "data": "0x00021d1a03040002061a000406050005061000010609000306070006060100017d029c090001060500010605000322017d029c020006060700090601d2019c010001060c0003ca0123022203e901220106017d029c0106022303ca050002ca0223022201e9037d01220106027d019c017d0106010c022302ca030002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012304ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c022301ca0123010c0322047d029c0322027d029c017d0122010c012301ca0223010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012304ca0123010c0422017d029c037d0422027d0222010c012305ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca030004ca0e2304ca050014ca5d00013d0101013d01011700013d0100013d0a00" }, { "filename": "21-gifu-ukai-heads", - "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f5407000300105407000300105407000200115407000200045401920c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c020101f406000100030c0601010c07a6010101f406000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" + "data": "0x00031e190404000b540e000d540a0011540a0004920d540a0002920f540a0010540a00105409001154090005540c0c090002540f0c0700140c0700040c0401050c01a6030c0101010c0600040c0601030c03a6010c0201010c0700030c0601010c07a60101010c0800020c04010ea603ad0300020c040103a603e901c601220210070001ad0300010c050103a603e901c6012202100b00010c050104a602e901c60210160002e90122011001a602ad150001220110020002ad150001220110170001c602e901c6150001c6040001c60400" }, { "filename": "22-shizuoka-oden-heads", - "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" + "data": "0x0004181407060001b1016001b10e0003c90400028601970200025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b02000160020001600200016003000160030001600200016002000160010003e902000160030001600100036301000160010003e9020001600300016005630160010003e9020001600300016005630160010003e902000160030001600563020002e9016a0600016005630200026a01e908000363030002e90600" }, { "filename": "23-aichi-hitsumabushi-heads", - "data": "0x00071a15060800040e08000500050e0134040e05000300040e0234012b013401350134040e03000200010e010b033401350234012b023401350334010e02000100010e010b0134012b03340135053401350234010b010e01000100010e01350234012b0634012b033401350134010e0100020e0834013506340135020e020e023401350234012b033401350334012b0234020e020e010b023401350b34012b020e030e010b093401350334030e050e023401350234012b03340135050e0100080e0234080e01000100120e01000200100e020004000c0e0400" + "data": "0x00071a15060800040e0d00050e0134040e0800040e0234012b013401350134040e0500010e010b033401350234012b023401350334010e0300010e010b0134012b03340135053401350234010b010e0200010e01350234012b0634012b033401350134010e0100020e0834013506340135040e023401350234012b033401350334012b0234040e010b023401350b34012b050e010b093401350334080e023401350234012b03340135050e0100080e0234080e0200120e0300100e06000c0e0400" + }, + { + "filename": "23-aichi-nagoyacastle-heads", + "data": "0x00021b15000c0001da070001da120002da053f02da1200093f11000b3f1100010101e3010101e3010101e3010101e30101100001210b3f01210e00063f0101063f0f000501013f05010f00013f010102580121013f010e013f012102580101013f040001210900043f050e043f0400010101e307000f3f0300020101e3050002210d010221020004e304000221013f010e013f0101015801010158010101580101013f010e013f02210200030104000121023f030e073f030e033f01210101015801010400143f04e30400016f01580101015801010158016f0158016f0158016f01580101015801010158016f0158010005e3020014e3040104000101015801010158020101580101015801010158020101580101015802010100040104e301780105015901630178025902dd0259010502dd015901630159010501000159015e0159015e040101d8015e0178025e0163025e01d8015e0178035e0178015e01d8015e0100" }, { "filename": "23-aichi-tenmusu-heads", - "data": "0x00011b1406090001ce010001ce0900090003ce0900090003ce0900090003e70900070001bc05e701bc0700060001bc010105e7010101bc0600050001bc010107e7010101bc0500050001bc020101e7030101e7020101bc0500040003bc070103bc0400040005bc030105bc0400030007bc010107bc030003000fbc0300020010bc0300020011bc0200020011bc0200020011bc0200010013bc0100010007bc010101bc010101bc010107bc010015bc15bc" + "data": "0x00011b1406090001ce010001ce120003ce120003ce120003e7100001bc05e701bc0d0001bc010105e7010101bc0b0001bc010107e7010101bc0a0001bc020101e7030101e7020101bc090003bc070103bc080005bc030105bc070007bc010107bc06000fbc050010bc050011bc040011bc040011bc030013bc020007bc010101bc010101bc010107bc01002abc" }, { "filename": "24-mie-jingu-heads", - "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" + "data": "0x00041e14010100012a0200012a1200012a0200012a0400017e0100017e1300017e0100017e0500017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab03001bab02001bab01000eab01881aab058816ab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d8040001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d80100086001880d6001880860010001d801d301600200018801600bd3016001880200016001d301d801000260010001d801d301600200018801600bd8016001880200016001d301d801000260020001d301600200018801600bd3016001880200016001d302000160" }, { "filename": "24-mie-ninja-heads", - "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" + "data": "0x0004171705070006920a00039201bc06920700039201bc059201bc02920600039201bc069201bc01920500039201bc01e302da010101da010101da01bc02920400039201bc01e301da01e3010101da010101da01e301bc01920300039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa201920400039209a202920300059202a2039203a20192040002920100039206a20292030003920300029204a20292040003920e0002921000" }, { "filename": "25-shiga-blackbass-heads", - "data": "0x00021d18021700018d0100018d01001700038d01001600058d1700048d0a00016b0c00038d01000900036b010003c50157012303c50100038d02000800036b02c5011e02c5025702c50100028d04000500026b0100016b02c5031e06c50100038d03000500036b01c5041e01c5011e05c5028d05000400036b01c5031e01c5041e02c5010101c5030104000400026b01c5031e01c5031e0101016b060105000400016b01c5061e0201016b0201011e03010600050001c5031e01c5011e0201016b0201031e02010600050001c5041e0201016b0201031e02010700050001c5021e01c50201016b0701011e0700040001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010e000100066b0300031e0e000300046b0300021e0f000300046b14000400036b1400" + "data": "0x00021d18021700018d0100018d1800038d1700058d1700048d0a00016b0c00038d0a00036b010003c50157012303c50100038d0a00036b02c5011e02c5025702c50100028d0900026b0100016b02c5031e06c50100038d0800036b01c5041e01c5011e05c5028d0900036b01c5031e01c5041e02c5010101c503010800026b01c5031e01c5031e0101016b06010900016b01c5061e0201016b0201011e03010b0001c5031e01c5011e0201016b0201031e02010b0001c5041e0201016b0201031e02010c0001c5021e01c50201016b0701011e0b0001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010f00066b0300031e1100046b0300021e1200046b1800036b1400" }, { "filename": "25-shiga-hikonecastle-heads", - "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" + "data": "0x00021d15020a00010d0700010d110001bc090001bc10000bbc10000bbc100004bc010d01eb010d04bc0f0003bc01eb010d0301010d01eb03bc0f00020101a2050101a202010f0001ab010103a20101010d010103a2010101ab0d0006bc010d0101010d06bc0b0006bc010d0301010d06bc0b000401010d0501010d0401090003bc0101010d010109bc0101010d010103bc060003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc050002bc020d03bc020d05bc020d0101020d0201010d01bc0500030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" }, { "filename": "26-kyoto-kinkaku-heads", - "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" + "data": "0x00011d15020c00026d010001291800016d01a6180001010229180003b8060001b8090001b8030004b801a6018506b801850b00018504b803a605e6110002a601e40129010101a6016d01a6016d01a610000129016d018a016d018a0129018a016d01a6016d018a02290d0008b8028504b8090001850ab8018504e606b80185060001290100012907a60101012901e4012901e6012901e60129090001290100012904e403290101012901e4012901e4012901e40229070006290e85070006850135018501a0013501850301018501010185010101850900018501a0018501a00135010a018501ea010a018501ea02350585090001850100018502ea010a018501ea010a018501ea02350185010101850101018508001385080001b6015701ab015701b6015701b6015701ab015701980857070002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" }, { "filename": "26-kyoto-kiyomizu-heads", "data": "0x00061a14051584010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100" }, + { + "filename": "27-osaka-osakacastle-heads", + "data": "0x00021b1406070001da050001da0e00073f0e00073f0d00043f01e3043f0d0001e301ad03e301ad01e30b0001da0100010e01e7010e01e7010101e7010e01e7010e010001da08000221023f012103010121023f0221080001210b3f012108000221010101580201015802010158010102210700072101a60721040001da02000401013f0301013f0401020001da0200032101010158013f01a601010358010101a6013f01580101032102000121113f01210200043f01a6093f01a6043f020001210101013f0301013f01580101015801010158013f0301013f010101210200022101a601580101015801a6013f0321013f01a601580101015801a6022101001521010002c102580101015802c1035802c101580101025802c1020013010100" + }, { "filename": "27-osaka-takoyaki-heads", - "data": "0x00021e15020b0001af010001af020001af027d0900090001af027d01af0100017d01af010002af09000600017d010001af017d03af017d01af020b017d010003af060003000157020001af017d02af017d01af020b01af0134017d013401af027d0700040001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0600050001570100010b02af01dd01af013402af017d0134010b03af010001af05000600015701af023401af010b02af010b023402af020b01dd01af050006000134010b02af010b0234010b0234020b0111010b0234010b050005000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f0100050001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f010005000334010b0134020b0b60050005000234020b0134010b01110260039303600393050005000134010b0234010b013401110b6005000600040b0111046002930560060006000134010b0234011101930134019305600293016006000200037f0200023402110160053404600700017f0300017f0300013401110260013403600293026008000100037f03000234011101930134076009000b00036003930b00" + "data": "0x00021e15020b0001af010001af020001af027d120001af027d01af0100017d01af010002af0f00017d010001af017d03af017d01af020b017d010003af09000157020001af017d02af017d01af020b01af0134017d013401af027d0b0001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0b0001570100010b02af01dd01af013402af017d0134010b03af010001af0b00015701af023401af010b02af010b023402af020b01dd01af0b000134010b02af010b0234010b0234020b0111010b0234010b0a000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f060001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f06000334010b0134020b0b600a000234020b0134010b011102600393036003930a000134010b0234010b013401110b600b00040b01110460029305600c000134010b023401110193013401930560029301600800037f0200023402110160053404600700017f0300017f030001340111026001340360029302600900037f0300023401110193013407601400036003930b00" }, { "filename": "27-osaka-tower-heads", - "data": "0x000216150b05000195050004000395040002000195063c020003000195043c0300040003c604000100016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f01000300019501c6019501c6019503000300019501c6019501c6019503000300019501c6019501c6019503000200029501c6019501c6029502000200029501c6019501c6029502000200029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f010001000195016f019503000195016f019501000100016f019505000195016f010001000195070001950100" + "data": "0x000216150b050001950900039506000195063c05000195043c070003c60500016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f0400019501c6019501c601950600019501c6019501c601950600019501c6019501c601950500029501c6019501c602950400029501c6019501c602950400029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f02000195016f019503000195016f01950200016f019505000195016f02000195070001950100" + }, + { + "filename": "28-hyogo-arimaonsen-heads", + "data": "0x0003171409020003a60a0001e704a6080001e703a6012904a6050001e706a6012902a6040001e708a60600016d01e703a60400019d01460400016d02ea0500010601280c00019d01460c00019d01460c00019d01460c00019d01460c00019d01460c00019d01460c00019d01460700049d0106019d012805000406010005ce030001060301030001ce012901ce0229010003010106020006ce0100" }, { "filename": "28-hyogo-himejicastle-heads", - "data": "0x00021a15010b00017f0700017f05000c0007e006000c0001e0019d01e0019d01e0019d01e006000b0002e0019d0301019d02e005000c00070106000c00010101920101019d01010192010106000800017f020001e0019d01e0019d0101019d01e0019d01e00200017f0200090001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e003000700017f02000101029d01010192010101920101029d01010200017f01000800017f01e0019d0201019d03e0019d0201019d01e0017f02000300017f040002e005010192050102e0020003e00500017f01e0010101920101019201e0010101e00192010101920101027f020001e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d01000192010101920300037f040105920501020001e0019d01e0019d01e00100037f010101920101079201010192020102000101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d019d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f01000192010101920101019201010192100102000401019d01e0019d01e0012b0250012b0350012b0250012b0350012b0200012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" + "data": "0x00021a15000c00017f0700017f120007e0130001e0019d01e0019d01e0019d01e0120002e0019d0301019d02e0120007011300010101920101019d0101019201010f00017f020001e0019d01e0019d0101019d01e0019d01e00200017f0c0001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e00b00017f02000101029d01010192010101920101029d01010200017f0a00017f01e0019d0201019d03e0019d0201019d01e0017f0200017f0300017f040002e005010192050102e0030003e00500017f01e0010101920101019201e0010101e00192010101920101027f020002e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d02000192010101920300037f0401059205010200019d01e0019d01e0019d01e00100037f0101019201010792010101920201020001920101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0039d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f010001010192010101920101019201010192100102000501019d01e0019d01e0012b0250012b0350012b0250012b0350012b02000150012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" }, { "filename": "28-hyogo-tajimaushi-heads", - "data": "0x0004191504010002b50f0002b5010002b5110002b502b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b01000300010b0d0d010b0300150d150d150d0100130d01000300100d020004000c0d05000400060d0ab501000400050d0bb501000400050d05b5020d01b5020d01b501000400050d0bb501000400050d02b5070d02b5010009000ab50200" + "data": "0x0004191504010002b50f0002b5010002b5110004b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b0400010b0d0d010b03003f0d0100130d0400100d06000c0d0900060d0ab50500050d0bb50500050d05b5020d01b5020d01b50500050d0bb50500050d02b5070d02b50a000ab50200" }, { "filename": "29-nara-ashura-heads", - "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" + "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e4040002180600029f05c2029f060002180400021806000118019f01c2031801c2019f011806000218040002180600012302180123011801230218012306000218040002180600091806000218040002180600012302180323021801230600021804000318060007180500041805000418060003180400021801dd03180800021801dd041801e4031801e401dd041801dd010002e406000118030001dd041801e4031801e401dd021804000218050003180400041801e4011801e401dd031804000218050002e40400011801dd061801dd021801dd02180200021805000218020001dd031801dd021801e4011801e401dd011801dd031801dd01000218050003180100011801dd061801dd061801dd041806000a1803dd05180200021808000218010003180100011803dd0318010003180e000218030002dd031803000218130005180c00" }, { "filename": "29-nara-deer-heads", - "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" + "data": "0x00051b140702110a0002110600011101380111080001110138011106000111023801350600013502380111060001110338013504000135033801110700011102570235020002350257011109000a110a000a110a000a110a000a110a000a110a0001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" }, { "filename": "30-wakayama-danjogarandaito-heads", - "data": "0x00011914080800019508000800012108000800019508000800012108000700012701e301270700060001e3012701e3012701e30600040001e3012701e3012701e3012701e3012701e30400020001e3012701e3012701e3012701e3012701e3012701e3012701e3020002000db40200050001b4010101b4010101b4010101b40500050007b405000500012801dd01b401dd01b401dd012805000400090104000100012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b40300030001b401dd01b401dd01b401dd01b401dd01b401dd01b4030003000bb40300030001b4010101b4010e01b4010e01b4010e01b4010101b403000100047f07e0047f0100" + "data": "0x0001191408080001951000012110000195100001210f00012701e301270d0001e3012701e3012701e30a0001e3012701e3012701e3012701e3012701e3060001e3012701e3012701e3012701e3012701e3012701e3012701e304000db4070001b4010101b4010101b4010101b40a0007b40a00012801dd01b401dd01b401dd0128090009010500012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b4060001b401dd01b401dd01b401dd01b401dd01b401dd01b406000bb4060001b4010101b4010e01b4010e01b4010e01b4010101b40400047f07e0047f0100" }, { "filename": "30-wakayama-nachifall-heads", - "data": "0x000216150a0100036102e001610101046101610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e00301026202000400010101e0010101e004000400020101e001010400040001e0030104000500010101e001010400050001e0020104000500030104000500020101e00400050001e0010101e004000500010101e001010400050003010400050003010400050003010400030001010100016201010162010102000101050001010162020103000500020101000101010001010100020001010100010101000101010001010300" + "data": "0x000216150a0100036102e00161010105610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e0030102620600010101e0010101e00800020101e00101080001e003010900010101e00101090001e00201090003010900020101e0090001e0010101e00900010101e001010900030109000301090003010700010101000162010101620101020001010500010101620201080002010100010101000101030001010100010101000101010001010300" + }, + { + "filename": "30-wakayama-wakayamaramen-heads", + "data": "0x00041b1505080006330e000233060102330a0002330a01023307000133040106d80401013305000133030102d8016001d8017d026003d80301013303000133020103d80260037d01d80160025b02d80201013302000133010102d8027d0160047d010f035b016002d80101013301000133020101d8067d030f017d025b026001d802010233010101d8077d030f046003d801010233010101d8067d040f066001d801010233010102d8057d040f066001d801010233020101d80160047d040f056001d80201013301000133010101d8067d076002d80101013302000133020101d8047d0160026c01d8026001d8016001d80201013303000133020101d8027d0160016c02c1016c01d8026001d80201013305000133020102d80160016c02c1016c016002d80201013307000133030102d8026c02d8030101330a000133080101330600" }, { "filename": "33-okayama-denim01-heads", - "data": "0x00061815090a54042b01540799010c0299042b01990754019907540154059901540199015405990154015401f5035401f501540199015401f5035401f501540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" + "data": "0x00061815090a54042b01540799010c0299042b019907540199085405990154019901540599085401990e5401990e5401990e5401990e5401000e5401000e5401000e5401000e54010007540799010007990706010005060101015407060100050601010154" }, { "filename": "33-okayama-denim02-heads", - "data": "0x00061815090a92042b01920799010c0299042b01990792019907920192050c019201990192050c0192079201990792079201990792079201990792079201990792079201000792079201000792079201000792079201000792079201000792079901000799079d0100059d010101f6079d0100059d010101f6" + "data": "0x00061815090a92042b01920799010c0299042b0199079201990892050c019201990192050c089201990e9201990e9201990e9201990e9201000e9201000e9201000e9201000e9201000792079901000799079d0100059d01010192079d0100059d01010192" }, { "filename": "33-okayama-denim03-heads", - "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca07920192050c019201ca0192050c0192079201ca0792079201ca0792079201ca0792079201ca079207920100079207920100079207920100079207920100079207920100079207ca010007ca079d0100059d014d01f6079d0100059d010101f6" + "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca0892050c019201ca0192050c089201ca0e9201ca0e9201ca0e9201ca0e9201000e9201000e9201000e9201000e920100079207ca010007ca079d0100059d014d0192079d0100059d01010192" }, { "filename": "33-okayama-dog-heads", - "data": "0x00031a1506010003260c00022602000100015703260a000226015702000100025703260800022602570200010003570c2602570200010002570e2601570200010003260601016a05010226020001000801036a0601020001000801010f016a010f06010200010003010d26010102000100112602000100052603570326035703260200010011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db018801001000025f0200" + "data": "0x00031a1506010003260c0002260300015703260a0002260157030002570326080002260257030003570c260257030002570e260157030003260601016a0501022603000801036a060103000801010f016a010f0601030003010d26010103001126030005260357032603570326030011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db01881100025f0200" }, { "filename": "33-okayama-horseshoe-crab-heads", - "data": "0x00051815010a00088e0500090003d5098e02000800028e02ca01d5068e0101028e0100060001ca048e01ca01d5028e04c3018e0101018e01000700048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0100090003d5098e02000a00088e0500" + "data": "0x00051815010a00088e0e0003d5098e0a00028e02ca01d5068e0101028e070001ca048e01ca01d5028e04c3018e0101018e0800048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0a0003d5098e0c00088e0500" }, { "filename": "33-okayama-momotaro-heads", - "data": "0x00021914050200020c10000100030c1000040c1000030c0201040c0500040c020003000101060c0374060c010002000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c010012570100010012570100010012570100020001741057010003000557040c0757010003001057010004000e570200" + "data": "0x00021914050200020c1100030c1000040c1000030c0201040c0500040c05000101060c0374060c03000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c01001257020012570200125703000174105704000557040c07570400105705000e570200" }, { "filename": "33-okayama-monkey-heads", - "data": "0x00051a140605000aca050003000eca0300020010ca0200010003ca0601016a050102ca020001000801036a0601020001000801010f016a010f060102000100030106db01ca06db01010200010003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb0100020003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" + "data": "0x00051a140605000aca08000eca050010ca030003ca0601016a050102ca03000801036a060103000801010f016a010f06010300030106db01ca06db0101030003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb030003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" }, { "filename": "33-okayama-peach-heads", - "data": "0x00041e15030d00015f0d000a00075f0a0007000d5f070006000f5f06000500025f01570e5f05000500015f0157065f01e5085f05000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400095f01e5095f04000400095f01e5095f04000400095f01e5095f040002000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f0322010002000322055f0382095f02220300040002220f5f02220400060002220b5f02220600" + "data": "0x00041e15030d00015f1700075f11000d5f0d000f5f0b00025f01570e5f0a00015f0157065f01e5085f0900015f0157075f01e5095f0800015f0157075f01e5095f0800015f0157075f01e5095f0800095f01e5095f0800095f01e5095f0800095f01e5095f06000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f032203000322055f0382095f0222070002220f5f02220a0002220b5f02220600" }, { "filename": "33-okayama-pheasant-heads", - "data": "0x0003191506019212000292110005920a540400010002920d54030002000f540200020002540601016a05010154020002000701036a0501020002000701010f016a010f05010200020002010cb901010200020001540eb90200020001540eb90200020001540eb90200020001540eb90200020001540eb902000200025407b9036d03b9020003000754096d03000854086d03000e540100016d03000e1d0200" + "data": "0x0003191506019212000292110005920a54050002920d5405000f54040002540601016a0501015404000701036a050104000701010f016a010f0501040002010cb90101040001540eb9040001540eb9040001540eb9040001540eb9040001540eb90400025407b9036d03b905000754096d03000854086d03000e540100016d03000e1d0200" }, { "filename": "34-hiroshima-manju-choco-heads", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad02880385028802ad0400010005ad01880585028804ad0100010001ad05880585058801ad0100010001ad01880d85018801ad0100010001ad02880b85028801ad0100020001ad01880b85018801ad0200020001ad02880985028801ad0200020001ad01880b85018801ad0200010002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad0100020002ad02880785028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + "data": "0x00031a1507090001ad110003ad0f0002ad018802ad0d0002ad038802ad0b0002ad02880185028802ad090002ad02880385028802ad050005ad01880585028804ad020001ad05880585058801ad020001ad01880d85018801ad020001ad02880b85028801ad030001ad01880b85018801ad040001ad02880985028801ad040001ad01880b85018801ad030002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad030002ad02880785028802ad050002ad098802ad070003ad010003ad010003ad0400" }, { "filename": "34-hiroshima-manju-custard-heads", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288016d028802ad0500040002ad0288036d028802ad0400010005ad0188056d028804ad0100010001ad0588056d058801ad0100010001ad01880d6d018801ad0100010001ad02880b6d028801ad0100020001ad01880b6d018801ad0200020001ad0288096d028801ad0200020001ad01880b6d018801ad0200010002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad0100020002ad0288076d028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + "data": "0x00031a1507090001ad110003ad0f0002ad018802ad0d0002ad038802ad0b0002ad0288016d028802ad090002ad0288036d028802ad050005ad0188056d028804ad020001ad0588056d058801ad020001ad01880d6d018801ad020001ad02880b6d028801ad030001ad01880b6d018801ad040001ad0288096d028801ad040001ad01880b6d018801ad030002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad030002ad0288076d028802ad050002ad098802ad070003ad010003ad010003ad0400" }, { "filename": "34-hiroshima-manju-koshi-heads", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880180028802ad0500040002ad02880380028802ad0400010005ad01880580028804ad0100010001ad05880580058801ad0100010001ad01880d80018801ad0100010001ad02880b80028801ad0100020001ad01880b80018801ad0200020001ad02880980028801ad0200020001ad01880b80018801ad0200010002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad0100020002ad02880780028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + "data": "0x00031a1507090001ad110003ad0f0002ad018802ad0d0002ad038802ad0b0002ad02880180028802ad090002ad02880380028802ad050005ad01880580028804ad020001ad05880580058801ad020001ad01880d80018801ad020001ad02880b80028801ad030001ad01880b80018801ad040001ad02880980028801ad040001ad01880b80018801ad030002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad030002ad02880780028802ad050002ad098802ad070003ad010003ad010003ad0400" }, { "filename": "34-hiroshima-manju-maccha-heads", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288010f028802ad0500040002ad0288030f028802ad0400010005ad0188050f028804ad0100010001ad0588050f058801ad0100010001ad01880d0f018801ad0100010001ad02880b0f028801ad0100020001ad01880b0f018801ad0200020001ad0288090f028801ad0200020001ad01880b0f018801ad0200010002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad0100020002ad0288070f028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + "data": "0x00031a1507090001ad110003ad0f0002ad018802ad0d0002ad038802ad0b0002ad0288010f028802ad090002ad0288030f028802ad050005ad0188050f028804ad020001ad0588050f058801ad020001ad01880d0f018801ad020001ad02880b0f028801ad030001ad01880b0f018801ad040001ad0288090f028801ad040001ad01880b0f018801ad030002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad030002ad0288070f028802ad050002ad098802ad070003ad010003ad010003ad0400" }, { "filename": "34-hiroshima-manju-tsubu-heads", - "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad028802850180028802ad0400010005ad01880145028501450185028804ad0100010001ad0588024501800285058801ad0100010001ad018802800245018502800385018001450185018801ad0100010001ad02880180018501450480018501800285028801ad0100020001ad018802850380018501450480018801ad0200020001ad0288018501450280024502800145028801ad0200020001ad018801850345028502800345018801ad0200010002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad0100020002ad02880180014502800385028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + "data": "0x00031a1507090001ad110003ad0f0002ad018802ad0d0002ad038802ad0b0002ad02880185028802ad090002ad028802850180028802ad050005ad01880145028501450185028804ad020001ad0588024501800285058801ad020001ad018802800245018502800385018001450185018801ad020001ad02880180018501450480018501800285028801ad030001ad018802850380018501450480018801ad040001ad0288018501450280024502800145028801ad040001ad018801850345028502800345018801ad030002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad030002ad02880180014502800385028802ad050002ad098802ad070003ad010003ad010003ad0400" }, { "filename": "34-hiroshima-okonomiyaki-heads", - "data": "0x00051b14050500015d0300045f0100019307000600025d01d9015f026a0122015d08000600012201d90101026a0122010101220800030001930101010001d90101015f016a015d0101015d01010122015f010105000500010101d90101015f016a0122015d010101220101025f010104000500012201d90101015f016a015d022201010122015d015f01d9010103000400015f015d01d90101015f016a0422015d0122015f02d9010102000300015f015d012201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101016a0722015f02d9010102000200016a015f0c22015f02d9010102000200026a015f0f22020002000560012501600125016001250160012501600125046002001623" + "data": "0x00051b14050500015d0300045f010001930d00025d01d9015f026a0122015d0e00012201d90101026a0122010101220b0001930101010001d90101015f016a015d0101015d01010122015f01010a00010101d90101015f016a0122015d010101220101025f01010900012201d90101015f016a015d022201010122015d015f01d901010700015f015d01d90101015f016a0422015d0122015f02d901010500015f015d012201d90101015f016a0622015f02d901010400016a015f022201d90101015f016a0622015f02d901010400016a015f022201d90101015f016a0622015f02d901010400016a015f022201d90101015f016a0622015f02d901010400016a015f022201d90101016a0722015f02d901010400016a015f0c22015f02d901010400026a015f0f2204000560012501600125016001250160012501600125046002001623" }, { "filename": "34-hiroshima-shrine01-heads", - "data": "0x00051c15050277130002770100157701000200131a020002001341020004000441020003230200044104000500021a03000123019301230300021a0500040004410200032302000441040002001341020002001341020005000241090002410500040003b3090003b30400050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b305000400018d01b30141038d0306038d014101b305000400078d0106068d0500" + "data": "0x00051c1505027713000277010015770300131a040013410600044102000323020004410900021a03000123019301230300021a09000441020003230200044106001341040013410700024109000241090003b3090003b3090001b301410900014101b30a0001b301410900014101b30a0001b301410900014101b30a0001b301410900014101b30900018d01b30141038d0306038d014101b30900078d0106068d0500" }, { "filename": "35-yamaguchi-anglerfish-heads", - "data": "0x00091f15020c0005830c000900048301660683090008000a830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + "data": "0x00091f15020c000583150004830166068311000a83026601830900013403000f83016603830300013401000234020002830266118302000534028301660683012303830123098305340283016611830166048302340100013409830709048301660483013403000283016603830d090683050004830109035f0166055f0166035f0109048307000283010901660d5f016601090283080001830109018302090166015f0166015f0166015f0166015f0166015f01660209018301090e000b090900" + }, + { + "filename": "35-yamaguchi-footballfish-heads", + "data": "0x00031f15020900023402eb18000134040001eb01da15000134050001da015d01da14000134040001da015d0101015d01da14000134040001da015d01da1600023401eb020001da1a0002eb038315000483016601eb05831100068301340383026601830900013403000f83016603830300013401000234020002830266118302000534028301660683012303830123098305340283016611830166048302340100013409830709048301660483013403000283016603830d090683050004830109035f0166055f0166035f0109048307000283010901660d5f016601090283080001830109018302090166015f0166015f0166015f0166015f0166015f01660209018301090e000b090900" }, { "filename": "35-yamaguchi-fuku-heads", - "data": "0x00051b14030400026212000400036211000400046203610495016105950300050001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed02610301016103950161015903610159016105950201010002610401059501590161015904950501010001610300130101000200026212010200020003621101020002000262010011010200060008010259050103000600080101590601030007000d010400" + "data": "0x00051b14030400026216000362150004620361049501610595080001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed0261030101610395016101590361015901610595020101000261040105950159016101590495050101000161030013010300026212010400036211010400026201001101080008010259050109000801015906010a000d010400" }, { "filename": "35-yamaguchi-kawarasoba-heads", - "data": "0x00051e1504030001061600010002060700019e0300019e08000106020001060900019e0300019e0900010601000106080001da010101da010001da010101da05000306020001000306040001d0012301d0012301d0012301d0012301d00900040001060200011501230115012301150123011501230115012301150200010605000400010601000d1503000206020001000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb05000106010604000fe80300020601000100010603000fe802000106030002000106010011e8010001060300040002e80d2302e80200010602000300010c02230d0c0223010c04000200040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" + "data": "0x00051e150403000106170002060700015503000155080001060200010609000155030001550900010601000106080001da010101da010001da010101da0500030603000306040001d0012301d0012301d0012301d0012301d00d000106020001150123011501230115012301150123011501230115020001060900010601000d150300020603000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0500020604000fe8030002060200010603000fe80200010605000106010011e801000106070002e80d2302e8020001060500010c02230d0c0223010c0600040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" }, { "filename": "35-yamaguchi-shoin-heads", - "data": "0x00031715070100030c0c000200050c09000400060c060002000d23010001000f2301000223048805230388012302230e8802230e8802230388032304880323018801230f880588032304880323018806880123028801ca0288012303880a8801ca05880a8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c880100050009880200" - }, - { - "filename": "35-yamagudhi-footballfish-heads", - "data": "0x00031f15020900023402eb100008000134040001eb01da0e0007000134050001da015d01da0d0007000134040001da015d0101015d01da0c0008000134040001da015d01da0d000900023401eb020001da0e000c0002eb03830c0009000483016601eb0583090008000683013403830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + "data": "0x00031715070100030c0e00050c0d00060c08000d2302000f230100022304880523038803230e8802230e880223038803230488032301880123148803230488032307880123028801ca028801230d8801ca0f8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c88060009880200" }, { "filename": "36-tokushima-awa-odori01-heads", - "data": "0x000118140d010002f80800010004f8030001f90200010006f8010001f90200010007f801060200020005f80106020001f90200012303f90106030001f9030003f9030001010100010003010267030102000401026701010400030103670500039e0367050002e2019e0367050004e2014f060002e2044f05000200044f050001000144044f050001000344014f06000300010107000200010108000200012301440700" + "data": "0x000118140d010002d8090004d803000188030006d801000188030007d80106040005d8010602000188020001230388010603000188030003880300010102000301026703010200040102670101040003010367050003890367050002e201890367050004e2014f060002e2044f0700044f06000155044f06000355014f09000101090001010a00012301550700" }, { "filename": "36-tokushima-naruto-wakame-heads", - "data": "0x00021a15070b000194035c04940b000348035c02480b00035c0100025c02000b00035c0200015c020004000748035c01480400020002480723035c012302480200010001480923025c0423014801000148042306de015c02de042301480148022302e90bde022301480148012304e905de015c05de01230148014807de045c06de0148014805de055c07de0148014806de035c03de02e903de014801480bde04e902de0148014811de014802480fde0248034801de055c07de034801001148010002000f48020004000b480400" + "data": "0x00022015070b000194035c0a940b000348035c08480b00035c0100025c1300035c0200015c0c000748035c01480c0002480723035c01230248090001480923025c0423014807000148042306de015c02de0423014806000148022302e90bde0223014806000148012304e905de015c05de012301480600014807de045c06de01480600014805de055c07de01480600014806de035c03de02e903de0148060001480bde04e902de01480600014811de0148060002480fde02480600034801de055c07de03480700114809000f480c000b480a00" }, { "filename": "36-tokusima-whirlpools-heads", - "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" + "data": "0x00011d1503080001011800010101300101058d040001010f000130060102000101013001010b00018d030007300200013001010a00018d010102300801018d02000130018d0800018d01010130018d0101088d0101028d01300101018d04000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d01300101060002010130028d01010330028d02010130028d0101018d0130070001010130018d013001010130068d02010130028d01010130060001010130018d013001010130028d0401028d02010130018d01010130050002010130018d01010130028d0101038d0201018d02010130018d010101300400010101000130028d01010130018d0101028d0101028d0101028d01010130018d0101013002010200010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d01010130010002010500018d0101018d0130018d01300101058d01010130028d0101013001010800013001010130028d013005010130028d0101018d0130010108000130018d01010130028d0530028d0101018d013001010a00023002010130058d0201018d013001010f0006010a00" }, { "filename": "37-kagawa-bonsai-heads", - "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" + "data": "0x00021d14040900071b1000051b020f031b0e00010f041b040f031b0c00030f011b070f011b0200040f0600070f04ca0300010f041b0600050f04ca020f011b02ca031b030f0c0001ca020f031b0200011b040f0800031b010f0100010f051b0d00051b010f030003ca0c00031b03ca010f020004ca0100051b0300021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca150005ca140007ca0f00015401010354048c04540c00015401010b540d000154010109540700" }, { "filename": "38-ehime-iyokan-heads", - "data": "0x00051a140604000c4204000200084201e1074202000100024201250f42010002420125114201420125124201420125124214421442144214421442144214420100054203b30a42010002001042020003000e420300" + "data": "0x00051a140604000c420600084201e107420300024201250f4201000242012512420125134201259e420100054203b30a420300104205000e420300" }, { "filename": "38-ehime-jakoten-heads", - "data": "0x0006191406020010d20100010001d203d102d2018e0bd201d204d10ed201d204d101d2018e0ad2018e01d201d204d106d2018e07d201d204d10ed201d204d10ed201d204d10ed201d204d10ed201d204d10dd2018e01d204d10ed201d204d105d2018e01d2018e06d201d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" + "data": "0x0006191406020010d2020001d203d102d2018e0cd204d10fd204d101d2018e0ad2018e02d204d106d2018e08d204d10fd204d10fd204d10fd204d10fd204d10dd2018e01d204d10fd204d105d2018e01d2018e07d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" }, { "filename": "38-ehime-mandarin-orange-heads", - "data": "0x00061a140604000c4204000200084201e1074202000100024201250f4201000242012511420142012512420142012512421442144214421442144214420100054203b30a42010002001042020003000e420300" + "data": "0x00061a140604000c420600084201e107420300024201250f4201000242012512420125134201258a420100054203b30a420300104205000e420300" }, { "filename": "38-ehime-onsen01-heads", - "data": "0x00031b15050700015504000155040001550400060002550300025503000255040005000255030002550300025505000400025503000255030002550600040002550300025503000255060004000255030002550300025506000400025503000255030002550600050002550300025503000255050006000255030002550300025504000200025502000255030002550300025501000155020001000255030002550300025503000255010002550100025503000255030002550300025503000255025502000255030002550300025504000255025502000155040001550400015505000255025512000255035510000355010003550e000355010002001255020004000e550400" + "data": "0x00031b15050700015504000155040001550a00025503000255030002550900025503000255030002550900025503000255030002550a00025503000255030002550a00025503000255030002550a00025503000255030002550b00025503000255030002550b000255030002550300025506000255020002550300025503000255010001550300025503000255030002550300025501000255010002550300025503000255030002550300045502000255030002550300025504000455020001550400015504000155050004551200055510000355010003550e0003550300125506000e550400" }, { "filename": "38-ehime-onsen02-heads", - "data": "0x00031b150507000101040001010400010104000600020103000201030002010400050002010300020103000201050004000201030002010300020106000400020103000201030002010600040002010300020103000201060004000201030002010300020106000500020103000201030002010500060002010300020103000201040002000374013f0201033f0201033f02010274020001000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f02740274023f0201033f0201033f0201043f02740274023f0101043f0101043f0101053f02740274123f02740374103f0374010003740e3f0374010002001274020004000e740400" + "data": "0x00031b15050700010104000101040001010a00020103000201030002010900020103000201030002010900020103000201030002010a00020103000201030002010a00020103000201030002010a00020103000201030002010b00020103000201030002010b000201030002010300020106000374013f0201033f0201033f0201027403000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f0474023f0201033f0201033f0201043f0474023f0101043f0101043f0101053f0474123f0574103f0374010003740e3f03740300127406000e740400" }, { "filename": "38-ehime-onsen03-heads", - "data": "0x00031c14050b00010c0b000900050c09000800016101740161017401610174016108000700017407de01740700020001610300016101de01ae05de01ae01de0161030001610200030001740161017401de04ae01de04ae01de0174016101740300030003de03ae053f03ae03de0300060003ae013f02e70126013f03ae0600060003ae053f03ae060006000bae060006000b3f0600013f03000f3f0300013f0100153f010002001321020004000f01040002000157010004ae015702ae015702ae015704ae0100015702000200010c010001ae0306015701ae033601ae0157030601ae0100010c02000200010c010001ae030602ae033602ae037401ae0100010c0200" + "data": "0x00031c14050b00010c1400050c110001610174016101740161017401610f00017407de0174090001610300016101de01ae05de01ae01de016103000161050001740161017401de04ae01de04ae01de017401610174060003de03ae053f03ae03de090003ae013f02e70126013f03ae0c0003ae053f03ae0c000bae0c000b3f0600013f03000f3f0300013f0100153f0300132106000f0106000157010004ae015702ae015702ae015704ae010001570400010c010001ae0306015701ae033601ae0157030601ae0100010c0400010c010001ae030602ae033602ae037401ae0100010c0200" }, { "filename": "38-ehime-tai-somen-heads", - "data": "0x00031c18010d000189020001890a000b0001890100015f01890100015f0189090008000357015f01890157015f01890157015f018902570600070003570b20015705000600025701890e200400050002570189102003000500015701890320018d0220018d0220018d0220018d0520020001200300025714200100010001200200015715200100010001890120010001571220028d01200100020001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a20010603200306012003000257018907060401080601000400035712060200040004570f06040004000157010002570400068904000157040004000157010001570f000157040004000157110001570400040001571600" + "data": "0x00031c18010d00018902000189150001890100015f01890100015f018911000357015f01890157015f01890157015f018902570d0003570b2001570b00025701890e2009000257018910200800015701890320018d0220018d0220018d0220018d05200200012003000257142002000120020001571520020001890120010001571220028d0120030001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a200106032003060120030002570189070604010806050003571206060004570f060800015701000257040006890400015708000157010001570f0001570800015711000157080001571600" }, { "filename": "38-ehime-taimeshi-heads", - "data": "0x00041a16060600082306000300030f0848022304000200050f01e90182020101e9015f01010248012303000100060f02e9018202e90182010101e901010148012302000100030f0282015f02e9015f02e9015f02e9015f01010148012301000100020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f02010148012301230148030f03e9044202e9028202e901480123012301480201025f0182044201010142015f04e90148012301230148015f028202e9044201e4014204e9015f0148012301230148018203e9015f064202e9015f01820101014801230123014803e9015f018201e9044201e9015f02820201014801230123014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e901010148012301000100012301480101018201e90101015f03e90182015f018202e9010101480123010002000123014803010182015f03e901010282010101480123020003000123024802010182015f02e9020102480123030004000223084802230400060008230600" + "data": "0x00041a1606060008230900030f084802230600050f01e90182020101e9015f0101024801230400060f02e9018202e90182010101e90101014801230300030f0282015f02e9015f02e9015f02e9015f0101014801230200020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f0201014802230148030f03e9044202e9028202e90148022301480201025f0182044201010142015f04e9014802230148015f028202e9044201e4014204e9015f014802230148018203e9015f064202e9015f0182010101480223014803e9015f018201e9044201e9015f0282020101480223014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e90101014801230200012301480101018201e90101015f03e90182015f018202e901010148012303000123014803010182015f03e90101028201010148012305000123024802010182015f02e902010248012307000223084802230a0008230600" }, { "filename": "39-kochi-bonito-heads", - "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" + "data": "0x00041d15020f0001261b00012619000226100001260700032611000126040006260f0002260c540d0010540a000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e9080012e9090002260ee90a0001260b0002260800" }, { "filename": "40-fukuoka-mojiko-heads", - "data": "0x00031e14030d0001960d0009000196030001960300019609000600019602000196072701960100019607000600019602000927010001960700060002610b27026106000500046102270106016b010101270106022704610500050001a501e0010601a5032701a501aa01a5032701a501e0010601a50500040009aa015709aa0400050001c1025701c1025701e9035701e9025701c1025701c105000200032701c1015701e001c102e001e903e001e902e001c1015701e001c1032702000100042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c1042701000100042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e001060157015702060157010601c10157010601c1010301460197034601970146010301c10157010601c101060157020601570557017f0257017f0103019701460397014601970103017f0257017f0557" + "data": "0x00031e14030d0001961600019603000196030001960f0001960200019607270196010001960d00019602000927010001960d0002610b2702610b00046102270106016b010101270106022704610a0001a501e0010601a5032701a501aa01a5032701a501e0010601a5090009aa015709aa090001c1025701c1025701e9035701e9025701c1025701c10700032701c1015701e001c102e001e903e001e902e001c1015701e001c103270300042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c104270200042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e00106025702060157010601c10157010601c1010301460197034601970146010301c10157010601c10106015702060657017f0257017f0103019701460397014601970103017f0257017f0557" }, { "filename": "40-fukuoka-tenmangu-heads", - "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" + "data": "0x00031e14021b0001660100016a17000166060013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b802850700048501b80185038401bf03c401bf0384018501b804850500061804bf017701c4017704bf06180600031804a201bf017703bf017701bf04a203180700011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb01180700011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b501180700011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b501180700071801bf051801bf071807000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d01180600019d026f029d026f029d026f029d026f029d026f019d026f019d0900016f029d026f029d026f029d026f029d016f0600" }, { "filename": "41-saga-mudskipper-fiddlercrab-heads", - "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" + "data": "0x00021815020700036111000361028d10000261018d03610500027809000161018d0361018d0305018d010501780192010507000461018d01610105018d080506000161018d0161018d0705018d0205029204000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70d000261018d0105018d030502d70c00018d02610405018d02d70d000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d020004750c000161028d0200017501000275010001750100" }, { "filename": "41-saga-yoshinogari-heads", - "data": "0x0002181409030001d8010001d8010001d8010001d8010001d80300040007d80400030009c9030002000bd8020001000dc9010002000b99020001000d9901000f99010001bb050001bb050001bb010001de01bb050001bb050001bb01de0fde01de01bb050001bb050001bb01de0fde010001bb050001bb050001bb0100010001bb050001bb050001bb0100010001bb050001bb050001bb010001000dbb0100010001bb050001bb050001bb0100010001bb050001bb050001bb0100" + "data": "0x0002181409030001d8010001d8010001d8010001d8010001d8070007d8070009c905000bd803000dc903000b9903000d9901000f99010001bb050001bb050001bb010001de01bb050001bb050001bb11de01bb050001bb050001bb10de010001bb050001bb050001bb020001bb050001bb050001bb020001bb050001bb050001bb02000dbb020001bb050001bb050001bb020001bb050001bb050001bb0100" }, { "filename": "42-nagasaki-champon-heads", - "data": "0x00071a1406060008e00600040003e0065703e00400020003e00257066d025703e00200010002e00157032d01d4014e02eb0166012d026d025702e0010002e00257036602eb02d40166012d014e02d4025702e001e00257014e05d4014e01970166012d02d4026d025701e001e00157016d024e01d402eb02d4019702d402eb014e0297015701e001e0015702eb0266039703660197024e032d015701e002e00157032d02d401eb032d019701eb01d4036602e0010002e0016d01eb024e05d4019701eb014e036d01e001000100016f03e0015702d401b3016d02eb016d025703e0016f01000200026f03e0015701cd01b301cd025703e0026f02000300036f08e0036f030004000c6f0400" + "data": "0x00071a1406060008e00a0003e0065703e0060003e00257066d025703e0030002e00157032d01d4014e02eb0166012d026d025702e0010002e00257036602eb02d40166012d014e02d4025703e00257014e05d4014e01970166012d02d4026d025702e00157016d024e01d402eb02d4019702d402eb014e0297015702e0015702eb0266039703660197024e032d015703e00157032d02d401eb032d019701eb01d4036602e0010002e0016d01eb024e05d4019701eb014e036d01e00200016f03e0015702d401b3016d02eb016d025703e0016f0300026f03e0015701cd01b301cd025703e0026f0500036f08e0036f07000c6f0400" }, { "filename": "42-nagasaki-meganebashi-heads", - "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e04080208017e0400017e0408017e0400017e020802080600017e0208017e060002080108017e060004080600017e0108017e080002080800017e019108000291080001910191080002910800019102910700039107000191010003910300029102000391030002910100030004910600049103000700019101000191010001910800" + "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e0608017e0400017e0408017e0400017e04080600017e0208017e06000308017e060004080600017e0108017e080002080800017e01910800029108000291080002910800039107000391070001910100039103000291020003910300029104000491060004910a00019101000191010001910800" }, { "filename": "42-nagasaki-saseboburger-heads", - "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" + "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c2050014c2040014c204000393031c0593011c0493021c02930300151c0100021c0100031c0e55041c07000ee0011c070007e009e5060009e5099302e5030002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0300149704000755058506550600019301c2015501c2045508c2015502c20193050012930300" }, { "filename": "43-kumamoto-karashirenkon-heads", - "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" + "data": "0x00051a1505060009c60a0002c609d402c6060002c606d401c606d402c6030001c604d401c602d403c602d401c604d401c6020001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d402c605d401c607d401c605d402c602d402c60bd402c602d402c601d404c604d401c604d404c601d402c602d402c60bd402c602d402c605d401c607d401c605d402c604d403c605d403c604d401c6010001c602d404c605d404c602d401c6020001c604d401c602d403c602d401c604d401c6030002c605d402c606d402c6060002c609d402c60a0009c60600" }, { "filename": "43-kumamoto-kumamotocastle-heads", - "data": "0x00021d15020800019d12000700019d0101019d11000600059d10000600050e1000040002c80206019d020602c80e00040002c8029d0101029d02c80e00030002c8029d0323029d02c80d0003000501019d05010800019d04000300010e0223010e019d0101019d010e0223010e0700019d0101019d0300020001c8036f019d0323019d036f01c8060003060300020001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c802000100019d0101019d0c01026f020101c80192019d019202c8010001000392010e0623010e0223020e029201230192019d0301019d01010100010003920c0e0492052301920100059d0100010101000101010001010100010101fa010101fa0a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" + "data": "0x00021d15020800019d1900019d0101019d1700059d1600050e140002c80206019d020602c8120002c8029d0101029d02c8110002c8029d0323029d02c810000501019d05010800019d0700010e0223010e019d0101019d010e0223010e0700019d0101019d050001c8036f019d0323019d036f01c806000306050001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c80300019d0101019d0c01026f020101c80192019d019202c802000392010e0623010e0223020e029201230192019d0301019d0101020003920c0e0492052301920100059d012301010123010101230101012301010123010101230a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" }, { "filename": "44-oita-beppujigoku-heads", - "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" + "data": "0x00021c17030a00027f0100017f1300027f1600017f0300017f1400017f0300017f0200039b0230019b0c00037f050006300700029d0500017f1000049d0300017f0100027f06000157010001570500019d01c8019d01c80300017f0300017f040005570300069d0300017f0200017f0400056f0e00017f0500016f0100036f1c00023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e030001010106150001010100010101061700010101060101020006bf0c00010101000101010601000106020006bf0d0001010106070001bf010001bf2f0001bf010001bf0500" }, { "filename": "44-oita-usajingu-heads", - "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" + "data": "0x00031e1501070001b80d0001b80e000fb80d0011b80b0013b80b0002bf01b402bf01b402bf01b402bf01b402bf01b402bf0d0001bf01b4020101b4020101b4020101b4020101b401bf090006b8016d02bf016d05bf016d02bf016d06b8040006b801bf020101bf010103bf010101bf020101bf06b8040006b801bf020101bf010103bf010101bf020101bf06b8040004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b8030006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b8020007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf01010400010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d0400010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010104000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d010103000dbf016d0dbf040005bf016d02bf016d05bf016d02bf016d05bf0300" }, { "filename": "45-miyazaki-aoshima-heads", - "data": "0x00061d14030500109205000600027f0192047f0192047f0192017f0600080001bf040001bf040001bf0700010001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf0700010004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf01920600030005e102bf080002bf0600030003e1011b019202bf010006af019202bf0600020002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d60100010001e1011b02e1019d01e1019209af019201af01990221039901000100011b03e1019d0caf01d6026001d6016001d60200" + "data": "0x00061d1403050010920b00027f0192047f0192047f0192017f0e0001bf040001bf040001bf080001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf080004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf0192090005e102bf080002bf090003e1011b019202bf010006af019202bf080002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d6020001e1011b02e1019d01e1019209af019201af0199022103990200011b03e1019d0caf01d6026001d6016001d60200" }, { "filename": "45-miyazaki-chickennanban-heads", - "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" + "data": "0x00061a1404080007870d0003870179078709000a870179048707000287017902870179028701790587029c0400029c0c87059c0200029c0c87079c0100029c0187017903870179028701790287089c0100029c0a870b9c0a870c9c08870c9c0100029c018701790287017901870c9c0200029c05870d9c0300029c028701790187029c0111099c0400029c0387049c0311069c07000e9c0300" }, { "filename": "46-kagoshima-goromon-heads", - "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" + "data": "0x00051e1502080001a50b0001a50e0001a50d0001a50c0011210a000221019501210195012101950121019501210195012101950121019501210195022108000121019501210195012101950121019501210195012101950121019501210195012101950121019501210800067f0121019501210195012101950121067f0b000f7f0d000554057f05540b0004210354057f05540b000121019501210195012101950121019501210195012101950121019501210195012101950121080002210195012101950121019501210195012101950121019501210195012101950121019502210800017f018a037f018a027f018a017f018a027f018a0195027f018a017f060001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d7020004d7010501ca035001ca015001ca030001ca0150038a015001ca04d7020002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" }, { "filename": "46-kagoshima-shirokuma-heads", - "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" + "data": "0x00011914060400030f1300010f027110000271010101710a0001c00300010104710201020001c0050002c004010271050101c0050001c0020101e4060101b703010500010102e4030101b7060102b90300020102e40a0102b901010200030102e40201017109010100010102650401017101ba0171020102da060102650f0102002501010611010206017f0f06017f0206117f0106010001060f7f010603000106047f0401057f010605000206097f0206080009060500" }, { "filename": "47-okinawa-goya-chanpuru-heads", - "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" + "data": "0x00061915070600018702a2018701a201870a00018701a20187016d010f018701a2028701a2070001a20187020f0201020f018703a205000287010f01380222010f0122016d01380122010f0287030002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f01220587012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f01870200018701a2013801220201016d0122010f0201016d01220138018701a203000287010f01010438010f0222010f028705000287010f0438010f0122010f02a2070002a20187016d0122010f01a203870a00028702a202870600" }, { "filename": "47-okinawa-shuricastle-heads", - "data": "0x00051e1403050001d00f0001d00500050002c40d0002c40500050001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10500050001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10500040001be01d001be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01d001be0400020001be01a101be01a101be01a101be01a101be01a101be01c401be01a101be01a101be01a101be01a101be01a101be020004000848035408480400020001be01a101be01a101be01a101be01a1024d01a601be01a6024d01a101be01a101be01a101be01a101be020001be01a101be01a101be01a101be01a101be014d02a6039202a6014d01be01a101be01a101be01a101be01a101be0200044801be01a1014d01a601d0029201d0029201d001a6014d01a101be0448020002000148013301480133014801330148094d0148013301480133014801330148020002000748014d010101a603be01a60101014d074802000200014801010548014d0101014d0301014d0101014d02480201014801010148020002000148010104480105014d01be01a603be01a601be014d0105014802010148010101480200010007970105014d01be014d03be014d01be014d010507970100019707ee01d7095901d707ee0197" + "data": "0x00051e1403050001d00f0001d00a0002c40d0002c40a0001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10a0001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a1090001be01d001be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01d001be060001be01a101be01a101be01a101be01a101be01a101be01c401be01a101be01a101be01a101be01a101be01a101be0600084803540848060001be01a101be01a101be01a101be01a1024d01a601be01a6024d01a101be01a101be01a101be01a101be020001be01a101be01a101be01a101be01a101be014d02a6039202a6014d01be01a101be01a101be01a101be01a101be0200044801be01a1014d01a601d0029201d0029201d001a6014d01a101be044804000148013301480133014801330148094d014801330148013301480133014804000748014d010101a603be01a60101014d07480400014801010548014d0101014d0301014d0101014d0248020101480101014804000148010104480105014d01be01a603be01a601be014d010501480201014801010148030007970105014d01be014d03be014d01be014d010507970100019707ee01d7095901d707ee0197" }, { "filename": "47-okinawa-siisa-heads", - "data": "0x00041d14030200033706000437060003370200030004370200033702000337020004370300040008370200083704000300023703460137034602370246023702460337030003000237026602370266043701230337012303370300020001460237016601230237016601230337012301370123013701230137012302370146020001000246143702460100020001460337042307370423023701460200010003460837024606370123013702460200030002460637014602000146063702460300030002370746020007460237030001000146010003370246023701460137020001370146023702460337010001460100024601000937020009370100024601460b3702000b37014601000a370123020001230a3701000200013701460837022308370146013702000400023701660200023701660200016602370200016602370400" + "data": "0x00041d14030200033706000437060003370500043702000337020003370200043707000837020008370700023703460137034602370246023702460337060002370266023702660437012303370123033705000146023701660123023701660123033701230137012301370123013701230237014603000246143702460300014603370423073704230237014603000346083702460637012301370246050002460637014602000146063702460600023707460200074602370400014601000337024602370146013702000137014602370246033701000146010002460100093702000937010003460b3702000b37014601000a370123020001230a37030001370146083702230837014601370600023701660200023701660200016602370200016602370400" } ], "glasses": [ { "filename": "glasses-hip-rose-glasses", - "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" + "data": "0x000b1710070300062001000620030001200201022301200100012002010223052002010223032002010223052002010223032002010223022002000120020102230120010001200201022301200300062001000620" }, { "filename": "glasses-square-black-eyes-red-glasses", - "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" + "data": "0x000b17100703000623010006230300012302010264012301000123020102640523020102640323020102640223020001230201026401230100012302010264022302000123020102640123010001230201026401230300062301000623" }, { "filename": "glasses-square-black-rgb-glasses", - "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" + "data": "0x000b1710070300062301000623030003230164022301000323016413230200012301650223015a01230100012301650223015a022302000623010006230300062301000623" }, { "filename": "glasses-square-black-glasses", - "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" + "data": "0x000b171007030006230100062303000123020103230100012302010723020105230201042302000123020103230100012302010423020001230201032301000123020103230300062301000623" }, { "filename": "glasses-square-blue-med-saturated-glasses", - "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" + "data": "0x000b17100703000643010006430300014302010223014301000143020102230543020102230343020102230243020001430201022301430100014302010223024302000143020102230143010001430201022301430300064301000643" }, { "filename": "glasses-square-blue-glasses", - "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" + "data": "0x000b17100703000607010006070300010702010223010701000107020102230507020102230307020102230207020001070201022301070100010702010223020702000107020102230107010001070201022301070300060701000607" }, { "filename": "glasses-square-frog-green-glasses", - "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" + "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022305c00201022303c00201022302c0020001c00201022301c0010001c00201022302c0020001c00201022301c0010001c00201022301c0030006c0010006c0" }, { "filename": "glasses-square-fullblack-glasses", - "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" + "data": "0x000b1710070300062301000623030004230101012301000423010108230101062301010223020006230100072302000623010006230300062301000623" }, { "filename": "glasses-square-green-blue-multi-glasses", - "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" + "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223028b0200010f02010223010f0100018b02010223028b0200010f02010223010f0100018b02010223018b0300060f0100068b" }, { "filename": "glasses-square-grey-light-glasses", - "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" + "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022305c80201022303c80201022302c8020001c80201022301c8010001c80201022302c8020001c80201022301c8010001c80201022301c8030006c8010006c8" }, { "filename": "glasses-square-guava-glasses", - "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + "data": "0x000b17100703000637010006370300013702010223013701000137020102230537020102230337020102230237020001370201022301370100013702010223023702000137020102230137010001370201022301370300063701000637" }, { "filename": "glasses-square-honey-glasses", - "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" + "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022305de0201022303de0201022302de020001de0201022301de010001de0201022302de020001de0201022301de010001de0201022301de030006de010006de" }, { "filename": "glasses-square-magenta-glasses", - "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" + "data": "0x000b17100703000609010006090300010902010223010901000109020102230509020102230309020102230209020001090201022301090100010902010223020902000109020102230109010001090201022301090300060901000609" }, { "filename": "glasses-square-orange-glasses", - "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" + "data": "0x000b17100703000614010006140300011402010223011401000114020102230514020102230314020102230214020001140201022301140100011402010223021402000114020102230114010001140201022301140300061401000614" }, { "filename": "glasses-square-pink-purple-multi-glasses", - "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" + "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223029a020001200201022301200100019a02010223029a020001200201022301200100019a02010223019a030006200100069a" }, { "filename": "glasses-square-red-glasses", - "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" + "data": "0x000b17100703000624010006240300012402010223012401000124020102230524020102230324020102230224020001240201022301240100012402010223022402000124020102230124010001240201022301240300062401000624" }, { "filename": "glasses-square-smoke-glasses", - "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" + "data": "0x000b17100703000659010006590300015902660223015901000159026602230559026602230359026602230259020001590266022301590100015902660223025902000159026602230159010001590266022301590300065901000659" }, { "filename": "glasses-square-teal-glasses", - "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" + "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223051c02010223031c02010223021c0200011c02010223011c0100011c02010223021c0200011c02010223011c0100011c02010223011c0300061c0100061c" }, { "filename": "glasses-square-watermelon-glasses", - "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + "data": "0x000b17100703000637010006370300013702010223013701000137020102230537020102230337020102230237020001370201022301370100013702010223023702000137020102230137010001370201022301370300063701000637" }, { "filename": "glasses-square-yellow-orange-multi-glasses", @@ -1458,7 +1479,7 @@ }, { "filename": "glasses-square-yellow-saturated-glasses", - "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" + "data": "0x000b17100703000628010006280300012802010223012801000128020102230528020102230328020102230228020001280201022301280100012802010223022802000128020102230128010001280201022301280300062801000628" } ] } From c47dad60041c840cd34b9c2ba93c42c16adc3265 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 17:38:28 +0900 Subject: [PATCH 114/146] =?UTF-8?q?=E3=83=88=E3=83=AC=E3=83=BC=E3=83=89?= =?UTF-8?q?=E5=85=88=E3=82=A2=E3=83=89=E3=83=AC=E3=82=B9=E3=82=92=E9=99=90?= =?UTF-8?q?=E5=AE=9A=EF=BC=88contract=20size=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E3=83=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E3=82=82=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 64 +++++++++------ .../interfaces/ILocalNounsToken.sol | 2 +- contract/test/localNouns.ts | 78 ++++++++++++++----- 3 files changed, 99 insertions(+), 45 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index dbcb955f..e87b103c 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -18,6 +18,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { IAssetProviderExMint public assetProvider2; address public minter; mapping(uint256 => uint256[]) public tradePrefecture; // トレード先指定の都道府県 + mapping(uint256 => address) public tradeAddress; // トレード先指定のアドレス address public administratorsAddress; // 運営ウォレット address public developpersAddress; // 開発者ウォレット @@ -28,10 +29,8 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { IAssetProviderExMint _assetProvider, address _minter ) ProviderTokenA2(_assetProvider, 'Local Nouns', 'Local Nouns') { - description = 'Local Nouns Token.'; + description = 'Local Nouns'; assetProvider2 = _assetProvider; - // mintPrice = 1e13; // 0.001 ※ mintPriceは Minterコントラクトで制御するため使用しない - // mintLimit = 5000; ※ mintLimitは Minterコントラクトで制御するため使用しない minter = _minter; administratorsAddress = msg.sender; developpersAddress = msg.sender; @@ -42,7 +41,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { } function tokenURI(uint256 _tokenId) public view override returns (string memory) { - require(_tokenId < _nextTokenId(), 'LocalNounsToken.tokenURI: nonexistent token'); + require(_tokenId < _nextTokenId(), 'nonexistent token'); (string memory svgPart, string memory tag) = assetProvider2.generateSVGPart(_tokenId); bytes memory image = bytes(svgPart); @@ -81,7 +80,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { uint256 _prefectureId, uint256 _amount ) public virtual returns (uint256 tokenId) { - require(msg.sender == minter || msg.sender == owner(), 'Sender is not minter nor owner'); + require(msg.sender == minter || msg.sender == owner(), 'Invalid sender'); require(_prefectureId % 100 <= 47, 'Invalid prefectureId'); for (uint256 i = 0; i < _amount; i++) { @@ -95,7 +94,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { address[] memory _to, uint256[] memory _prefectureId, uint256[] memory _amount - ) public onlyOwner returns (uint256 tokenId) { + ) external onlyOwner returns (uint256 tokenId) { // 引数の整合性チェック require(_to.length == _prefectureId.length && _to.length == _amount.length, 'Invalid Arrays length'); @@ -105,11 +104,11 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { return _nextTokenId() - 1; } - function mint() public payable override returns (uint256 tokenId) { - revert('Cannot use this function'); + function mint() public payable override returns (uint256) { + revert('Cannot use'); } - function setMinter(address _minter) public onlyOwner { + function setMinter(address _minter) external onlyOwner { minter = _minter; } @@ -124,16 +123,20 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { /** * @param _tokenId the token id for put on the trade list. * @param _prefectures prefectures that you want to trade. if you don't want specific prefecture, you don't need to set. + * @param _tradeAddress the address only who can trade. */ - function putTradeLocalNoun(uint256 _tokenId, uint256[] memory _prefectures) public { + function putTradeLocalNoun(uint256 _tokenId, uint256[] memory _prefectures, address _tradeAddress) public { for (uint256 i = 0; i < _prefectures.length; i++) { require(_prefectures[i] > 0 && _prefectures[i] <= 47, 'incorrect prefecutre id'); } super.putTrade(_tokenId, true); tradePrefecture[_tokenId] = _prefectures; + if (_tradeAddress != address(0)) { + tradeAddress[_tokenId] = _tradeAddress; + } - emit PutTradePrefecture(_tokenId, _prefectures); + emit PutTradePrefecture(_tokenId, _prefectures, _tradeAddress); } function getTradePrefectureFor(uint256 _tokenId) public view returns (uint256[] memory) { @@ -145,12 +148,19 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { uint256[] memory emptyArray; tradePrefecture[_tokenId] = emptyArray; + tradeAddress[_tokenId] = address(0); emit CancelTradePrefecture(_tokenId); } function executeTradeLocalNoun(uint256 _myTokenId, uint256 _targetTokenId) public payable { - require(msg.value >= tradeRoyalty, 'Must send the royalty'); + require(msg.value >= tradeRoyalty, 'Insufficial royalty'); + + // tradeAddressがある場合はmsg.senderをチェック + require( + tradeAddress[_targetTokenId] == address(0) || msg.sender == tradeAddress[_targetTokenId], + 'Limited address can trade' + ); // tradePrefectureがない場合は、希望都道府県がないためチェック不要 if (tradePrefecture[_targetTokenId].length > 0) { @@ -169,27 +179,28 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { _processTradeRoyalty(msg.value); } - function putTrade(uint256 _tokenId, bool _isOnTrade) public override { - revert('Cannot use this function'); + function putTrade(uint256, bool) public pure override { + revert('Cannot use'); } - function executeTrade(uint256 _myTokenId, uint256 _targetTokenId) public override { - revert('Cannot use this function'); + function executeTrade(uint256, uint256) public pure override { + revert('Cannot use'); } // transfer時はトレード解除 function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal override { uint256[] memory emptyArray; tradePrefecture[startTokenId] = emptyArray; + tradeAddress[startTokenId] = address(0); super._beforeTokenTransfers(from, to, startTokenId, quantity); } - function setTradeRoyalty(uint256 _royalty) public onlyOwner { + function setTradeRoyalty(uint256 _royalty) external onlyOwner { tradeRoyalty = _royalty; } // pay royalties to admin here - function _processRoyalty(uint _salesPrice, uint _tokenId) internal override returns (uint256 royalty) { + function _processRoyalty(uint _salesPrice, uint) internal override returns (uint256 royalty) { royalty = (_salesPrice * 100) / 1000; // 10.0% _sendRoyalty(royalty); } @@ -201,20 +212,23 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { // send royalties to admin and developper function _sendRoyalty(uint _royalty) internal { - (bool sent, ) = payable(administratorsAddress).call{ value: _royalty / 2 }(''); - require(sent, 'failed to move fund to administratorsAddress contract'); + uint halfRoyalty = _royalty / 2; + _trySendRoyalty(administratorsAddress, halfRoyalty); + _trySendRoyalty(developpersAddress, _royalty - halfRoyalty); + } - (bool sent2, ) = payable(developpersAddress).call{ value: _royalty - _royalty / 2 }(''); - require(sent2, 'failed to move fund to developpersAddress contract'); + function _trySendRoyalty(address to, uint amount) internal { + (bool sent, ) = payable(to).call{ value: amount }(''); + require(sent, 'Failed to send'); } function withdraw() external payable onlyOwner { - require(administratorsAddress != address(0), "administratorsAddress shouldn't be 0"); + require(administratorsAddress != address(0), "Shouldn't be 0"); (bool sent, ) = payable(administratorsAddress).call{ value: address(this).balance }(''); - require(sent, 'failed to move fund to administratorsAddress contract'); + require(sent, 'failed to move fund'); } - // iLocalNounsTokenでERC721のtotalSupplyを使用したいけど、二重継承でエラーになるので個別関数を準備 + // 二重継承でエラーになるので個別関数を準備 function totalSupply2() public view returns (uint256) { return super.totalSupply(); } diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol index f756793d..022409a1 100644 --- a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol +++ b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol @@ -26,7 +26,7 @@ interface ILocalNounsToken { function totalSupply2() external returns (uint256); // Fires when the owner puts the trade - event PutTradePrefecture(uint256 indexed tokenId, uint256[] _prefectures); + event PutTradePrefecture(uint256 indexed tokenId, uint256[] _prefectures, address _tradeAddress); // Fires when the owner cancel the trade event CancelTradePrefecture(uint256 indexed tokenId); diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 5d2e495e..09def109 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -13,6 +13,8 @@ const nounsSeederAddress = addresses.nounsSeeder[network.name]; const localSeederAddress = addresses.localSeeder[network.name]; const sampleTokenAddress = addresses.sampleToken[network.name]; +const zeroAddress = '0x0000000000000000000000000000000000000000'; + before(async () => { /* `npx hardhat node`実行後、このスクリプトを実行する前に、Nouns,LocalNounsの関連するコントラクトを * デプロイする必要があります。(一度実行すると、node停止までは再実施する必要なし) @@ -61,10 +63,10 @@ describe('mint functions', function () { it('mint from non-minter', async function () { await expect(token.connect(user1).functions.mint()) - .revertedWith('Cannot use this function'); + .revertedWith('Cannot use'); await expect(token.connect(user1).functions.mintSelectedPrefecture(user1.address, 1, 1)) - .revertedWith('Sender is not minter nor owner'); + .revertedWith('Invalid sender'); await expect(token.connect(user1).functions.ownerMint([user1.address], [1], [1])) .revertedWith('Ownable: caller is not the owner'); @@ -108,7 +110,7 @@ describe('mint functions', function () { expect(totalSupply.toNumber()).to.equal(1); // tokenId=1 const [traits1] = await provider.functions.generateTraits(0); - console.log('mint from minter', traits1); + // console.log('mint from minter', traits1); }); @@ -140,9 +142,9 @@ describe('mint functions', function () { const [traits2] = await provider.functions.generateTraits(2); const [traits3] = await provider.functions.generateTraits(3); // head,accessoryがランダムなので県のみチェック(head,accessoryは目視) - console.log('multiple mint', traits1); - console.log('multiple mint', traits2); - console.log('multiple mint', traits3); + // console.log('multiple mint', traits1); + // console.log('multiple mint', traits2); + // console.log('multiple mint', traits3); expect(traits1.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); expect(traits2.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); expect(traits3.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); @@ -183,17 +185,19 @@ describe('mint functions', function () { expect(phaze).to.equal(1); // PreSale const txParams = { value: ethers.utils.parseUnits("0.09", "ether") }; + // この後でSampleTokenをmintするので、node起動後の1回目しか正常に動作しない await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 1, txParams)) .revertedWith('TokenGate token is needed'); // sampleTokenをミント await sampleToken.connect(user4).functions.mint(); + const [balance] = await token.functions.balanceOf(user4.address); await minter.connect(user4).functions.mintSelectedPrefecture(1, 3, txParams); - const [balance] = await token.functions.balanceOf(user4.address); + const [balance2] = await token.functions.balanceOf(user4.address); - expect(balance.toNumber()).to.equal(3); // user4は3つ追加 + expect(balance2.toNumber() - balance.toNumber()).to.equal(3); // user4は3つ追加 await minter.connect(owner).functions.setPhase(2); const [phaze2] = await minter.functions.phase(); @@ -244,7 +248,6 @@ describe('determinePrefectureId', function () { describe('P2P', function () { let tx, result, tokenId1: number; - const zeroAddress = '0x0000000000000000000000000000000000000000'; const price = ethers.BigNumber.from('1000000000000000'); it('not on sale', async function () { @@ -343,9 +346,9 @@ describe('P2PTradable', function () { }); it('Attempt to super functions', async function () { - await expect(token.connect(user2).executeTrade(tokenId2, tokenId1)).revertedWith('Cannot use this function'); + await expect(token.connect(user2).executeTrade(tokenId2, tokenId1)).revertedWith('Cannot use'); - await expect(token.connect(user2).putTrade(tokenId1, true)).revertedWith('Cannot use this function'); + await expect(token.connect(user2).putTrade(tokenId1, true)).revertedWith('Cannot use'); }); @@ -358,17 +361,17 @@ describe('P2PTradable', function () { }); it('Attempt to put trade non-owner token', async function () { - await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [])).revertedWith('Only the onwer can trade'); + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [], zeroAddress)).revertedWith('Only the onwer can trade'); }); it('incorrect prefecutre id', async function () { - await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [0])).revertedWith('incorrect prefecutre id'); - await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [48])).revertedWith('incorrect prefecutre id'); + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [0], zeroAddress)).revertedWith('incorrect prefecutre id'); + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [48], zeroAddress)).revertedWith('incorrect prefecutre id'); }); it('put trade', async function () { // 希望都道府県外のトークンと交換しようとする - await token.connect(user1).putTradeLocalNoun(tokenId1, [1, 11, 12]); + await token.connect(user1).putTradeLocalNoun(tokenId1, [1, 11, 12], zeroAddress); await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams)).revertedWith('unmatch to the wants list'); result = await token.connect(user1).getTradePrefectureFor(tokenId1); @@ -377,7 +380,7 @@ describe('P2PTradable', function () { expect(result[1].toNumber()).equal(11); expect(result[2].toNumber()).equal(12); - await token.connect(user1).putTradeLocalNoun(tokenId1, [10, 11, 12]); + await token.connect(user1).putTradeLocalNoun(tokenId1, [10, 11, 12], zeroAddress); result = await token.connect(user1).trades(tokenId1); expect(result).equal(true); @@ -386,7 +389,7 @@ describe('P2PTradable', function () { const balanceD = await ethers.provider.getBalance(developper.address); const txParams2 = { value: ethers.utils.parseUnits("0.0029", "ether") }; - await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams2)).revertedWith('Must send the royalty'); + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams2)).revertedWith('Insufficial royalty'); tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams); await tx.wait(); @@ -420,7 +423,7 @@ describe('P2PTradable', function () { tokenId2 = result.toNumber() - 1; // 希望都道府県なしでトレードリストに出す - await token.connect(user1).putTradeLocalNoun(tokenId1, []); + await token.connect(user1).putTradeLocalNoun(tokenId1, [], zeroAddress); result = await token.connect(user1).trades(tokenId1); expect(result).equal(true); @@ -440,6 +443,43 @@ describe('P2PTradable', function () { expect(result).equal(user1.address); }); + it('put trade(トレード先アドレス指定)', async function () { + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + // ユーザ2のアドレス指定でトレードリストに出す + await token.connect(user1).putTradeLocalNoun(tokenId1, [], user2.address); + + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + result = await token.connect(user1).tradeAddress(tokenId1); + expect(result).equal(user2.address); + + // ユーザ3がトレードしようとする → 失敗 + await expect(token.connect(user3).executeTradeLocalNoun(tokenId2, tokenId1, txParams)).revertedWith('Limited address can trade'); + + // ユーザ2がトレードしようとする → 成功 + tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams); + await tx.wait(); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + result = await token.connect(user1).ownerOf(tokenId1); + expect(result).equal(user2.address); + + result = await token.connect(user1).ownerOf(tokenId2); + expect(result).equal(user1.address); + }); + it('cancel trade', async function () { // for user1 const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; @@ -453,7 +493,7 @@ describe('P2PTradable', function () { tokenId2 = result.toNumber() - 1; // 希望都道府県なしでトレードリストに出す - await token.connect(user1).putTradeLocalNoun(tokenId1, []); + await token.connect(user1).putTradeLocalNoun(tokenId1, [], zeroAddress); result = await token.connect(user1).trades(tokenId1); expect(result).equal(true); From fe246ee13f2b857beeb2d97bb1b98cd966b79a7f Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 1 Nov 2023 18:23:21 +0900 Subject: [PATCH 115/146] =?UTF-8?q?=E5=85=A8=E9=83=A8=E3=81=AE=E9=83=BD?= =?UTF-8?q?=E9=81=93=E5=BA=9C=E7=9C=8C=E3=82=92=E4=BD=9C=E6=88=90=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=81=8B=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/test/localNouns.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 09def109..091491b6 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -244,6 +244,26 @@ describe('determinePrefectureId', function () { await provider.connect(owner).functions.setRandomValueForTest(false); }); + + it('mint all prefecture', async function () { + + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + + // 全ての都道府県が1以上出現する + for (var i = 0; i < 47; i++) { + // ミント前の都道府県ごとのカウント + const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(i + 1); + + console.log("mint all prefecture", i + 1); + await minter.connect(user1).functions.mintSelectedPrefecture(i + 1, 1, txParams); + + // ミント後の都道府県ごとのカウント + const [mintNumberPerPrefecture2] = await provider.functions.mintNumberPerPrefecture(i + 1); + + expect(mintNumberPerPrefecture2.sub(mintNumberPerPrefecture).toNumber(), "prefectureId:" + (i + 1)).to.equal(1); + } + + }); }); describe('P2P', function () { @@ -389,7 +409,7 @@ describe('P2PTradable', function () { const balanceD = await ethers.provider.getBalance(developper.address); const txParams2 = { value: ethers.utils.parseUnits("0.0029", "ether") }; - await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams2)).revertedWith('Insufficial royalty'); + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams2)).revertedWith('Insufficial royalty'); tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams); await tx.wait(); From 01137b578c149c7ef79522dfbfa6d21ed1a22145 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 2 Nov 2023 09:15:22 +0900 Subject: [PATCH 116/146] =?UTF-8?q?tokenGate=E3=81=AEdeploy=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/deploy_localNouns.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index 59ce8bad..4cdea359 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -15,6 +15,8 @@ async function main() { const factoryTokenGate = await ethers.getContractFactory('AssetTokenGate'); const tokenGate = await factoryTokenGate.deploy(); await tokenGate.deployed(); + console.log(`##tokenGate="${tokenGate.address}"`); + await runCommand(`npx hardhat verify ${tokenGate.address} --network ${network.name} &`); const factorySeeder = await ethers.getContractFactory('LocalNounsSeeder'); const localseeder = await factorySeeder.deploy(); @@ -64,7 +66,7 @@ async function main() { const minterContract = await factoryMinter.deploy(token.address, tokenGate.address); await minterContract.deployed(); console.log(`##LocalNounsMinter="${minterContract.address}"`); - await runCommand(`npx hardhat verify ${minterContract.address} ${token.address} --network ${network.name} &`); + await runCommand(`npx hardhat verify ${minterContract.address} ${token.address} ${tokenGate.address} --network ${network.name} &`); const addresses5 = `export const addresses = {\n` + ` localNounsMinter:"${minterContract.address}",\n` + `}\n`; await writeFile(`../src/utils/addresses/localNounsMinter_${network.name}.ts`, addresses5, () => { }); From ad3ddec011fc3d12240ea6e8a0fed5c956c9ecd3 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Mon, 6 Nov 2023 22:31:51 +0900 Subject: [PATCH 117/146] =?UTF-8?q?Background=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/populate_localNouns.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts index 307cf715..8493e57f 100644 --- a/contract/scripts/populate_localNouns.ts +++ b/contract/scripts/populate_localNouns.ts @@ -4,7 +4,7 @@ import { addresses } from '../../src/utils/addresses'; const nounsDescriptor = addresses.nounsDescriptor[network.name]; -import { images, palette } from "../test/image-local-data"; +import { images, palette,bgcolors } from "../test/image-local-data"; import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; @@ -34,6 +34,12 @@ async function main() { const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); if (true) { + + // set Background + console.log(`set backgrounds start`); + await localNounsDescriptor.addManyBackgrounds(bgcolors); + console.log(`set backgrounds end`); + // set Palette console.log(`set Palette start`); await localNounsDescriptor.addManyColorsToPalette(0, palette); From 389acce17518cbdf50962427984dd3fd10a9a500 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 24 Nov 2023 16:23:38 +0900 Subject: [PATCH 118/146] =?UTF-8?q?=E6=9C=80=E9=81=A9=E5=8C=96=E3=83=91?= =?UTF-8?q?=E3=83=A9=E3=83=A1=E3=82=BF=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/hardhat.config.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contract/hardhat.config.ts b/contract/hardhat.config.ts index 588312a0..faaa2626 100644 --- a/contract/hardhat.config.ts +++ b/contract/hardhat.config.ts @@ -12,7 +12,19 @@ const getUrl = () => { }; const config: HardhatUserConfig = { - solidity: "0.8.17", + solidity: { + version: "0.8.17", + settings: { + optimizer: { + enabled: true, + details: { + yulDetails: { + optimizerSteps: "u", + }, + }, + }, + } + }, defaultNetwork: "localhost", networks: { polygon: { From 52c56f0315fc312c3094c0045d6c6fb1cd9ed35e Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 24 Nov 2023 16:23:53 +0900 Subject: [PATCH 119/146] =?UTF-8?q?setApprovalForAll=E5=88=B6=E5=BE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index e87b103c..a6ce3523 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -22,6 +22,8 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { address public administratorsAddress; // 運営ウォレット address public developpersAddress; // 開発者ウォレット + bool public canSetApproval = false; // setApprovalForAll, approveの可否 + uint256 public tradeRoyalty = 0.003 ether; // P2Pトレードのロイヤリティ @@ -112,6 +114,10 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { minter = _minter; } + function setCanSetAproval(bool _canSetApproval) external onlyOwner { + canSetApproval = _canSetApproval; + } + function setAdministratorsAddress(address _admin) external onlyOwner { administratorsAddress = _admin; } @@ -232,4 +238,18 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { function totalSupply2() public view returns (uint256) { return super.totalSupply(); } + + // 誰もがトークンを承認できないようにする + function setApprovalForAll(address operator, bool approved) public override { + // revert( 'Not allowed to set approval for all'); + require(canSetApproval, 'Not allowed to set approval for all'); + super.setApprovalForAll(operator, approved); + } + + // 特定のトークンの承認も不可能にする + function approve(address to, uint256 tokenId) public payable override { + // revert('Not allowed to approve'); + require(canSetApproval, 'Not allowed to approve'); + super.approve(to, tokenId); + } } From daf73667df5311f0aecb2b0db6522c82eb2ef689 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 24 Nov 2023 16:25:25 +0900 Subject: [PATCH 120/146] =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=83=80=E3=83=A0=E3=83=AD=E3=82=B8=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=A4=89=E6=9B=B4=20(OutOfGasError=E5=AF=BE=E7=AD=96,?= =?UTF-8?q?keccak=E4=BD=BF=E3=82=8F=E3=81=AA=E3=81=8F=E3=81=A6=E3=82=82?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=83=80=E3=83=A0=E5=AE=9F=E7=8F=BE=E5=8F=AF?= =?UTF-8?q?=E8=83=BD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../localNouns/LocalNounsProvider.sol | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index ba5588b5..c8f07d94 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -184,31 +184,17 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { ); } - bool randomValueForTest = false; - - function setRandomValueForTest(bool _test) public onlyOwner { - randomValueForTest = _test; - } - // テスト用にpublic function determinePrefectureId(uint256 _assetId) public view returns (uint256) { - uint256 randomValue; - if (randomValueForTest) { - // For TEST - randomValue = _assetId; - } else { - // ブロック番号とアセット番号から計算した値 -> ランダム値 - randomValue = uint256(keccak256(abi.encodePacked(block.timestamp, _assetId))); - } - uint256 rank = randomValue % accumulationRatioRankTotal; + uint256 rank = _assetId % accumulationRatioRankTotal; for (uint256 i = 0; i < accumulationRatioRank.length; i++) { if (rank < accumulationRatioRank[i]) { rank = i; break; } } - return prefectureRatio[rank][randomValue % prefectureRatio[rank].length]; + return prefectureRatio[rank][_assetId % prefectureRatio[rank].length]; } function mint(uint256 _prefectureId, uint256 _assetId) external returns (uint256) { From 8f1c4491e4417a6dc2bf3478e82550f54664eb3e Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 24 Nov 2023 16:27:11 +0900 Subject: [PATCH 121/146] =?UTF-8?q?=E3=83=87=E3=83=97=E3=83=AD=E3=82=A4?= =?UTF-8?q?=E5=BE=8Csetup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/setup_localNouns.ts | 105 +++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 contract/scripts/setup_localNouns.ts diff --git a/contract/scripts/setup_localNouns.ts b/contract/scripts/setup_localNouns.ts new file mode 100644 index 00000000..e0a38540 --- /dev/null +++ b/contract/scripts/setup_localNouns.ts @@ -0,0 +1,105 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; + +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; +import { abi as tokenGateABI } from "../artifacts/contracts/libs/AssetTokenGate.sol/AssetTokenGate"; + +dotenv.config(); + +const localTokenAddress = addresses.localNounsToken[network.name]; +const tokenGateAddress = addresses.tokenGate[network.name]; + +async function main() { + + let wallet; + if (network.name == 'localhost') { + [wallet] = await ethers.getSigners(); // localhost + } else { + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + wallet = new ethers.Wallet(privateKey, ethers.provider); + + } + + // ethers.Contract オブジェクトのインスタンスを作成 + const tokenGate = new ethers.Contract(tokenGateAddress, tokenGateABI, wallet); + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + + // tokengateに設定 + const nfts = [ + "0x898a7dBFdDf13962dF089FBC8F069Fa7CE92cDBb", // NDJ-PFP + "0x866648Ef4Dd51e857cA05ea200eD5D5D0c6f93Ce", // NDJ-POAP + "0x09d53609a3709BBc1206B9Aa8C54DC71625e31aC", // Nounish CNP + "0x4bE962499cE295b1ed180F923bf9c73b6357DE80" // pNouns + ]; + await tokenGate.functions['setWhitelist'](nfts); + + // 運営用初期ミント + // 300体を都道府県割合で運用へミント + const mintNumForPrefecture = [ + [13, 10], + [14, 10], + [27, 10], + [23, 10], + [11, 10], + [12, 10], + [28, 9], + [1, 9], + [40, 9], + [22, 8], + [8, 8], + [34, 8], + [26, 8], + [4, 8], + [15, 8], + [20, 7], + [21, 7], + [10, 7], + [9, 6], + [33, 6], + [7, 6], + [24, 6], + [43, 6], + [46, 6], + [47, 6], + [25, 6], + [35, 6], + [29, 5], + [38, 5], + [42, 5], + [2, 5], + [3, 5], + [17, 5], + [44, 5], + [45, 5], + [6, 5], + [16, 5], + [37, 4], + [5, 4], + [30, 4], + [19, 4], + [41, 4], + [18, 4], + [36, 4], + [39, 4], + [32, 4], + [31, 4] + ]; + + for (var i = 0; i < mintNumForPrefecture.length; i++) { + try { + await localToken.functions['ownerMint']([wallet.address], [mintNumForPrefecture[i][0]], [mintNumForPrefecture[i][1]]); + console.log("mint:", mintNumForPrefecture[i]); + } catch (error) { + console.log("mint error:", mintNumForPrefecture[i]); + // console.error(error); + }; + } +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); From 5d6fb1c1fc7dfe78e96ab2cc3b5d2bf3861bce08 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 24 Nov 2023 16:27:42 +0900 Subject: [PATCH 122/146] =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=83=80=E3=83=A0=E3=83=AD=E3=82=B8=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=A4=89=E6=9B=B4=20=20=20=20=20(OutOfGasError?= =?UTF-8?q?=E5=AF=BE=E7=AD=96,keccak=E4=BD=BF=E3=82=8F=E3=81=AA=E3=81=8F?= =?UTF-8?q?=E3=81=A6=E3=82=82=E3=83=A9=E3=83=B3=E3=83=80=E3=83=A0=E5=AE=9F?= =?UTF-8?q?=E7=8F=BE=E5=8F=AF=E8=83=BD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/test/localNouns.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 091491b6..c4b48be0 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -22,8 +22,12 @@ before(async () => { # npx hardhat run scripts/deploy_nounsDescriptorV1.ts # npx hardhat run scripts/populate_nounsV1.ts # npx hardhat run scripts/deploy_localNouns.ts - # npx hardhat run scripts/populate_localNouns.ts + # npx hardhat run scripts/populate_localNouns_dummy.ts # npx hardhat run scripts/deploy_sample.ts + + note: `npx hardhat node`実行時にJavaScript heap out of memory が発生した場合は環境変数で使用メモリを指定する + export NODE_OPTIONS=--max-old-space-size=4096 + */ [owner, user1, user2, user3, user4, user5, admin, developper] = await ethers.getSigners(); @@ -142,9 +146,9 @@ describe('mint functions', function () { const [traits2] = await provider.functions.generateTraits(2); const [traits3] = await provider.functions.generateTraits(3); // head,accessoryがランダムなので県のみチェック(head,accessoryは目視) - // console.log('multiple mint', traits1); - // console.log('multiple mint', traits2); - // console.log('multiple mint', traits3); + console.log('multiple mint', traits1); + console.log('multiple mint', traits2); + console.log('multiple mint', traits3); expect(traits1.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); expect(traits2.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); expect(traits3.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); @@ -228,10 +232,9 @@ describe('mint functions', function () { describe('determinePrefectureId', function () { it('determinePrefectureId', async function () { - await provider.connect(owner).functions.setRandomValueForTest(true); let prefectureCount = new Array(47).fill(0); - for (var i = 0; i < 300; i++) { + for (var i = 0; i < 1500; i++) { const [prefectureId] = await provider.connect(owner).functions.determinePrefectureId(i); prefectureCount[prefectureId.toNumber() - 1]++; } @@ -239,10 +242,9 @@ describe('determinePrefectureId', function () { // 全ての都道府県が1以上出現する for (var i = 0; i < prefectureCount.length; i++) { expect(prefectureCount[i]).to.greaterThan(0); - // console.log("prefectureId", i, prefectureCount[i]); + console.log("prefectureId", i+1, prefectureCount[i], prefectureCount[i]/1500*100 + '%'); } - await provider.connect(owner).functions.setRandomValueForTest(false); }); it('mint all prefecture', async function () { From 648af179f6dbc3e126a414d29b982f64a7580bed Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 24 Nov 2023 16:28:05 +0900 Subject: [PATCH 123/146] =?UTF-8?q?tokenGate=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/deploy_localNouns.ts | 2 + contract/scripts/populate_localNouns_dummy.ts | 125 ++ .../scripts/populate_localNouns_recover.ts | 119 ++ contract/scripts/test_localNouns.ts | 60 +- contract/test/image-local-data.json | 552 +++--- contract/test/image-local-data_test.json | 1502 +++++++++++++++++ .../localNounsDescriptor_localhost.ts | 2 +- .../addresses/localNounsDescriptor_mumbai.ts | 2 +- .../addresses/localNounsMinter_localhost.ts | 2 +- .../addresses/localNounsMinter_mumbai.ts | 2 +- .../addresses/localNounsProvider_localhost.ts | 2 +- .../addresses/localNounsProvider_mumbai.ts | 2 +- .../addresses/localNounsToken_localhost.ts | 2 +- src/utils/addresses/localNounsToken_mumbai.ts | 2 +- src/utils/addresses/localseeder_localhost.ts | 2 +- src/utils/addresses/localseeder_mumbai.ts | 2 +- src/utils/addresses/nftDescriptor_mumbai.ts | 2 +- src/utils/addresses/nounsDescriptor_mumbai.ts | 2 +- src/utils/addresses/nounsSeeder_mumbai.ts | 2 +- src/utils/addresses/sample_localhost.ts | 4 +- src/utils/addresses/tokenGate_localhost.ts | 4 +- src/utils/addresses/tokenGate_mumbai.ts | 4 +- 22 files changed, 2058 insertions(+), 340 deletions(-) create mode 100644 contract/scripts/populate_localNouns_dummy.ts create mode 100644 contract/scripts/populate_localNouns_recover.ts create mode 100644 contract/test/image-local-data_test.json diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index 4cdea359..b59660b9 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -17,6 +17,8 @@ async function main() { await tokenGate.deployed(); console.log(`##tokenGate="${tokenGate.address}"`); await runCommand(`npx hardhat verify ${tokenGate.address} --network ${network.name} &`); + const addresses0 = `export const addresses = {\n` + ` tokenGate:"${tokenGate.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/tokenGate_${network.name}.ts`, addresses0, () => { }); const factorySeeder = await ethers.getContractFactory('LocalNounsSeeder'); const localseeder = await factorySeeder.deploy(); diff --git a/contract/scripts/populate_localNouns_dummy.ts b/contract/scripts/populate_localNouns_dummy.ts new file mode 100644 index 00000000..d036a6bb --- /dev/null +++ b/contract/scripts/populate_localNouns_dummy.ts @@ -0,0 +1,125 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; + +import { images, palette, bgcolors } from "../test/image-local-data_test"; +import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; +import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; +import { abi as localMinterABI } from "../artifacts/contracts/localNouns/LocalNounsMinter.sol/LocalNounsMinter"; + +dotenv.config(); + + +const localSeederAddress = addresses.localSeeder[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const localProviderAddress = addresses.localProvider[network.name]; +const localTokenAddress = addresses.localNounsToken[network.name]; +const localMinterAddress = addresses.localNounsMinter[network.name]; + +async function main() { + + // const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + // const wallet = new ethers.Wallet(privateKey, ethers.provider); + const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); + const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); + const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); + + if (true) { + // set Background + // console.log(`set backgrounds start`); + // await localNounsDescriptor.addManyBackgrounds(bgcolors); + // console.log(`set backgrounds end`); + + // set Palette + // console.log(`set Palette start`); + // await localNounsDescriptor.addManyColorsToPalette(0, palette); + // console.log(`set Palette end`); + + // set Accessories + // console.log(`set Accessories start`); + // const accessoryChunk = chunkArrayByPrefectureId(images.accessories); + // for (const chunk of accessoryChunk) { + // const prefectureId = chunk[0].prefectureId; + + // // if (Number(prefectureId) == 2) { + // await localNounsDescriptor.addManyAccessories(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + // console.log("chunk:", prefectureId, chunk); + // // } + // } + // console.log(`set Accessories end`); + + // set Heads + console.log(`set Heads start`); + const headChunk = chunkArrayByPrefectureId(images.heads); + for (const chunk of headChunk) { + const prefectureId = chunk[0].prefectureId; + + if (Number(prefectureId) > 30) { + await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + console.log("chunk:", prefectureId, chunk); + } + } + console.log(`set Heads end`); + + } + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + +interface ImageData { + prefectureId: string; + filename: string; + data: string; +} + +function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { + let map = new Map(); + const head_dummy = '0x00041e1405040001a1014d011801a10118014d01a1014d01be01a101be014d01a1014d0700020001a10118024d0318034d03be034d01a1014d05000100024d034801a101be014801a10148014d0115014d01480118014803be0500010001a1014d014801a1014802be0348034d034801be01a101be0115014d030001000218014d0118014d011801150118014d01180148011801480118011501180348024d030001bc01150118034d0318024d0348031801480118014801be0115030012bc024d02be01480115010012bc0115014d0115014d0248010014bc024d030012bc014d011501bc01180115020012bc024d01bc0218020016bc030014bc014d011501000115014d0cbc014d011506bc024d0100024d0cbc024d03bc014d011503bc0300010010bc024d02bc0400020012010500'; + const accessory_dummy = '0x0017151e0e0200030d0200010005b40100014103b4010d01b40141014101b4030d01b40141014102b4020d01b40141014103b4010d01b40141010003b4010d01b401000200030d0200'; + for (let i = 0; i < imagedata.length; i++) { + // dataが空っぽはスキップ + if (imagedata[i].data === undefined) { + console.error("not define data:", imagedata[i].filename); + continue; + } + + let filename = imagedata[i].filename.split('-'); + let id = filename[0]; + imagedata[i].prefectureId = id; + if (false) { + if (filename[filename.length - 1] == 'heads') { + imagedata[i].data = head_dummy; + } else { + imagedata[i].data = accessory_dummy; + } + } + // filenameの抽出 ex)"35-yamaguchi-white -snake-accessories" -> "white-snake" + let name = ''; + for (var j = 2; j < filename.length - 1; j++) { + if (name.length > 0) { + name += '-'; + } + name += filename[j].trim(); + } + imagedata[i].filename = name; + // console.log("imagedata[i].filename", imagedata[i].filename); + if (!map.has(id)) { + map.set(id, []); + } + map.get(id)!.push(imagedata[i]); + } + return Array.from(map.values()); +} \ No newline at end of file diff --git a/contract/scripts/populate_localNouns_recover.ts b/contract/scripts/populate_localNouns_recover.ts new file mode 100644 index 00000000..51ef721e --- /dev/null +++ b/contract/scripts/populate_localNouns_recover.ts @@ -0,0 +1,119 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; + +import { images, palette, bgcolors } from "../test/image-local-data"; +import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; +import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; +import { abi as localMinterABI } from "../artifacts/contracts/localNouns/LocalNounsMinter.sol/LocalNounsMinter"; + +dotenv.config(); + + +const localSeederAddress = addresses.localSeeder[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const localProviderAddress = addresses.localProvider[network.name]; +const localTokenAddress = addresses.localNounsToken[network.name]; +const localMinterAddress = addresses.localNounsMinter[network.name]; + +async function main() { + + // const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + // const wallet = new ethers.Wallet(privateKey, ethers.provider); + const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); + const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); + const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); + + + console.log(`localNounsDescriptor:`, localNounsDescriptor.address); + + if (true) { + + // console.log(`set backgrounds start`); + // await localNounsDescriptor.addManyBackgrounds(bgcolors); + // console.log(`set backgrounds end`); + + + // set Palette + // console.log(`set Palette start`); + // await localNounsDescriptor.addManyColorsToPalette(0, palette); + // console.log(`set Palette end`); + + // set Accessories + // console.log(`set Accessories start`); + // const accessoryChunk = chunkArrayByPrefectureId(images.accessories); + // for (const chunk of accessoryChunk) { + // const prefectureId = chunk[0].prefectureId; + // if (Number(prefectureId) == 3 || Number(prefectureId) == 2) { + // await localNounsDescriptor.addManyAccessories(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + // console.log("chunk:", prefectureId, chunk); + // } + // } + // console.log(`set Accessories end`); + + // set Heads + console.log(`set Heads start`); + const headChunk = chunkArrayByPrefectureId(images.heads); + for (const chunk of headChunk) { + const prefectureId = chunk[0].prefectureId; + if (Number(prefectureId) == 3) { + await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + console.log("chunk:", prefectureId, chunk); + } + } + console.log(`set Heads end`); + + } +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + +interface ImageData { + prefectureId: string; + filename: string; + data: string; +} + +function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { + let map = new Map(); + + for (let i = 0; i < imagedata.length; i++) { + // dataが空っぽはスキップ + if (imagedata[i].data === undefined) { + console.error("not define data:", imagedata[i].filename); + continue; + } + + let filename = imagedata[i].filename.split('-'); + let id = filename[0]; + imagedata[i].prefectureId = id; + + // filenameの抽出 ex)"35-yamaguchi-white -snake-accessories" -> "white-snake" + let name = ''; + for (var j = 2; j < filename.length - 1; j++) { + if (name.length > 0) { + name += '-'; + } + name += filename[j].trim(); + } + imagedata[i].filename = name; + // console.log("imagedata[i].filename", imagedata[i].filename); + if (!map.has(id)) { + map.set(id, []); + } + map.get(id)!.push(imagedata[i]); + } + return Array.from(map.values()); +} \ No newline at end of file diff --git a/contract/scripts/test_localNouns.ts b/contract/scripts/test_localNouns.ts index 1f264683..13ce7c76 100644 --- a/contract/scripts/test_localNouns.ts +++ b/contract/scripts/test_localNouns.ts @@ -21,9 +21,14 @@ const localMinterAddress = addresses.localNounsMinter[network.name]; async function main() { - // const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; - // const wallet = new ethers.Wallet(privateKey, ethers.provider); - const [wallet] = await ethers.getSigners(); // localhost + let wallet; + if(network.name == 'localhost'){ + [wallet] = await ethers.getSigners(); // localhost + }else{ + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + wallet = new ethers.Wallet(privateKey, ethers.provider); + + } // ethers.Contract オブジェクトのインスタンスを作成 const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); @@ -34,15 +39,18 @@ async function main() { console.log("localToken:", localTokenAddress); - for (var i: number = 101; i <= 147; i++) { - // for (var i: number = 1; i <= 47; i++) { + for (var i: number = 3; i <= 3; i++) { try { - await localMinter.functions['mintSelectedPrefecture(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.000001') }); + await localToken.functions['ownerMint']([wallet.address], [ethers.BigNumber.from( String(i))], [5]); + // await localToken.functions['ownerMint'](['0xECbCBAF0515757C48af10BEC8E70d6A4EbE479D6'], [ethers.BigNumber.from( String(i))], [10]); + + // const [svgPart] = await localProvider.generateSVGPart(i); + // console.log(svgPart); console.log(`mint [`, i, `]`); } catch (error) { console.log(`mint error [`, i, `]`); - // console.error(error); + // console.error(error); }; } @@ -61,41 +69,3 @@ main().catch(error => { console.error(error); process.exitCode = 1; }); - -interface ImageData { - prefectureId: string; - filename: string; - data: string; -} - -function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { - let map = new Map(); - - for (let i = 0; i < imagedata.length; i++) { - // dataが空っぽはスキップ - if (imagedata[i].data === undefined) { - console.error("not define data:", imagedata[i].filename); - continue; - } - - let filename = imagedata[i].filename.split('-'); - let id = filename[0]; - imagedata[i].prefectureId = id; - - // filenameの抽出 ex)"35-yamaguchi-white -snake-accessories" -> "white-snake" - let name = ''; - for (var j = 2; j < filename.length - 1; j++) { - if (name.length > 0) { - name += '-'; - } - name += filename[j].trim(); - } - imagedata[i].filename = name; - console.log("imagedata[i].filename", imagedata[i].filename); - if (!map.has(id)) { - map.set(id, []); - } - map.get(id)!.push(imagedata[i]); - } - return Array.from(map.values()); -} \ No newline at end of file diff --git a/contract/test/image-local-data.json b/contract/test/image-local-data.json index a9591df1..a4a94764 100644 --- a/contract/test/image-local-data.json +++ b/contract/test/image-local-data.json @@ -249,129 +249,129 @@ "bodies": [ { "filename": "body-bege-bsod-bodies", - "data": "0x0015171f093a0201000d0201000d0201000d0201000d0201000d0201000d0201000b02" + "data": "0x0015171f090e020e020e020e02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02" }, { "filename": "body-bege-crt-bodies", - "data": "0x0015171f093a0301000d0301000d0301000d0301000d0301000d0301000d0301000b03" + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" }, { "filename": "body-blue-sky-bodies", - "data": "0x0015171f093a0401000d0401000d0401000d0401000d0401000d0401000d0401000b04" + "data": "0x0015171f090e040e040e040e04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04" }, { "filename": "body-bluegrey-bodies", - "data": "0x0015171f093a0501000d0501000d0501000d0501000d0501000d0501000d0501000b05" + "data": "0x0015171f090e050e050e050e05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05" }, { "filename": "body-cold-bodies", - "data": "0x0015171f093a0601000d0601000d0601000d0601000d0601000d0601000d0601000b06" + "data": "0x0015171f090e060e060e060e06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06" }, { "filename": "body-computerblue-bodies", - "data": "0x0015171f093a0701000d0701000d0701000d0701000d0701000d0701000d0701000b07" + "data": "0x0015171f090e070e070e070e07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07" }, { "filename": "body-darkbrown-bodies", - "data": "0x0015171f093a0801000d0801000d0801000d0801000d0801000d0801000d0801000b08" + "data": "0x0015171f090e080e080e080e08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08" }, { "filename": "body-darkpink-bodies", - "data": "0x0015171f093a0901000d0901000d0901000d0901000d0901000d0901000d0901000b09" + "data": "0x0015171f090e090e090e090e09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09" }, { "filename": "body-foggrey-bodies", - "data": "0x0015171f093a0301000d0301000d0301000d0301000d0301000d0301000d0301000b03" + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" }, { "filename": "body-gold-bodies", - "data": "0x0015171f093a0a01000d0a01000d0a01000d0a01000d0a01000d0a01000d0a01000b0a" + "data": "0x0015171f090e0a0e0a0e0a0e0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a" }, { "filename": "body-grayscale-1-bodies", - "data": "0x0015171f093a0b01000d0b01000d0b01000d0b01000d0b01000d0b01000d0b01000b0b" + "data": "0x0015171f090e0b0e0b0e0b0e0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b" }, { "filename": "body-grayscale-7-bodies", - "data": "0x0015171f093a0c01000d0c01000d0c01000d0c01000d0c01000d0c01000d0c01000b0c" + "data": "0x0015171f090e0c0e0c0e0c0e0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c" }, { "filename": "body-grayscale-8-bodies", - "data": "0x0015171f093a0d01000d0d01000d0d01000d0d01000d0d01000d0d01000d0d01000b0d" + "data": "0x0015171f090e0d0e0d0e0d0e0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d" }, { "filename": "body-grayscale-9-bodies", - "data": "0x0015171f093a0e01000d0e01000d0e01000d0e01000d0e01000d0e01000d0e01000b0e" + "data": "0x0015171f090e0e0e0e0e0e0e0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e" }, { "filename": "body-green-bodies", - "data": "0x0015171f093a0f01000d0f01000d0f01000d0f01000d0f01000d0f01000d0f01000b0f" + "data": "0x0015171f090e0f0e0f0e0f0e0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f" }, { "filename": "body-gunk-bodies", - "data": "0x0015171f093a1001000d1001000d1001000d1001000d1001000d1001000d1001000b10" + "data": "0x0015171f090e100e100e100e10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10" }, { "filename": "body-hotbrown-bodies", - "data": "0x0015171f093a1101000d1101000d1101000d1101000d1101000d1101000d1101000b11" + "data": "0x0015171f090e110e110e110e11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11" }, { "filename": "body-magenta-bodies", - "data": "0x0015171f093a1201000d1201000d1201000d1201000d1201000d1201000d1201000b12" + "data": "0x0015171f090e120e120e120e12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12" }, { "filename": "body-orange-yellow-bodies", - "data": "0x0015171f093a1301000d1301000d1301000d1301000d1301000d1301000d1301000b13" + "data": "0x0015171f090e130e130e130e13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13" }, { "filename": "body-orange-bodies", - "data": "0x0015171f093a1401000d1401000d1401000d1401000d1401000d1401000d1401000b14" + "data": "0x0015171f090e140e140e140e14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14" }, { "filename": "body-peachy-B-bodies", - "data": "0x0015171f093a1501000d1501000d1501000d1501000d1501000d1501000d1501000b15" + "data": "0x0015171f090e150e150e150e15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15" }, { "filename": "body-peachy-a-bodies", - "data": "0x0015171f093a1601000d1601000d1601000d1601000d1601000d1601000d1601000b16" + "data": "0x0015171f090e160e160e160e16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16" }, { "filename": "body-purple-bodies", - "data": "0x0015171f093a1701000d1701000d1701000d1701000d1701000d1701000d1701000b17" + "data": "0x0015171f090e170e170e170e17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17" }, { "filename": "body-red-bodies", - "data": "0x0015171f093a1801000d1801000d1801000d1801000d1801000d1801000d1801000b18" + "data": "0x0015171f090e180e180e180e18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18" }, { "filename": "body-redpinkish-bodies", - "data": "0x0015171f093a1901000d1901000d1901000d1901000d1901000d1901000d1901000b19" + "data": "0x0015171f090e190e190e190e19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19" }, { "filename": "body-rust-bodies", - "data": "0x0015171f093a1a01000d1a01000d1a01000d1a01000d1a01000d1a01000d1a01000b1a" + "data": "0x0015171f090e1a0e1a0e1a0e1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a" }, { "filename": "body-slimegreen-bodies", - "data": "0x0015171f093a1b01000d1b01000d1b01000d1b01000d1b01000d1b01000d1b01000b1b" + "data": "0x0015171f090e1b0e1b0e1b0e1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b" }, { "filename": "body-teal-light-bodies", - "data": "0x0015171f093a1c01000d1c01000d1c01000d1c01000d1c01000d1c01000d1c01000b1c" + "data": "0x0015171f090e1c0e1c0e1c0e1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c" }, { "filename": "body-teal-bodies", - "data": "0x0015171f093a1d01000d1d01000d1d01000d1d01000d1d01000d1d01000d1d01000b1d" + "data": "0x0015171f090e1d0e1d0e1d0e1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d" }, { "filename": "body-yellow-bodies", - "data": "0x0015171f093a1e01000d1e01000d1e01000d1e01000d1e01000d1e01000d1e01000b1e" + "data": "0x0015171f090e1e0e1e0e1e0e1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e" } ], "accessories": [ { "filename": "01-hokkaido-crab-accessories", - "data": "0x0019161c0d01130100011301000113010001130100011301000113010001080113010801000113030005130300011301000313010001130100" + "data": "0x0019161c0d0113010001130100011301000113010001130100011301000108011301080100011301000200051302000100011301000313010001130100" }, { "filename": "01-hokkaido-melon-accessories", @@ -379,27 +379,27 @@ }, { "filename": "01-hokkaido-sheep-accessories", - "data": "0x0018141d0e020001c1010e020003c10300010e0100010e070001c1010e020003c10300010e0100010e0100" + "data": "0x0018141d0e020001c1010e020003c10300010e0100010e0300040001c1010e020003c101000200010e0100010e0100" }, { "filename": "02-aomori-jade-accessories", - "data": "0x0015141e09040001020500010205000102030001020600017f0102011c0102010105000101010001dd0102019b0100017f070001522f0002010900" + "data": "0x0015141e090400010205000102050001020300010201000500017f0102011c01020101010004000101010001dd0102019b0100017f0700015203000b000b000b000b0002010900" }, { "filename": "02-aomori-squid-accessories", - "data": "0x0018151d0f030001080300010102080101030002080200010101000108013303000101012301330100020101000101010001010100" + "data": "0x0018151d0f0300010802000100010102080101010002000208020001010100010801330200010001010123013301000101010101000101010001010100" }, { "filename": "02-aomori-tsugaru-shamisen-accessories", - "data": "0x0018121c0f01000136022301360123010001360100020b0100020b0100" + "data": "0x0018121c0f010001360123012301360123010001360100020b0100020b0100" }, { "filename": "03-iwate-egg-accessories", - "data": "0x0018141b100100020101000101021e0201021e0101010002010100" + "data": "0x0018141b100100020101000101021e01010101021e0101010002010100" }, { "filename": "03-iwate-fujiwara-accessories", - "data": "0x0017141c0f01000123050001230400015d0300026701cd0100046701310101013101670201" + "data": "0x0017141c0f0100012303000200012302000200015d02000100026701cd0100046701310101013101670201" }, { "filename": "04-miyagi-beeftongue-accessories", @@ -407,23 +407,23 @@ }, { "filename": "04-miyagi-matsushima-accessories", - "data": "0x0016171f0c060002290101010001010400030101291900025c0100025c01000129010003a205b10900015c0100015c01290100025c040004b1010002b1010001a20c0002a2010002290400" + "data": "0x0016171f0c0600022901010100010104000301012903000b000b00025c0100025c01000129010003a205b106000300015c0100015c01290100025c0100030004b1010002b1010001a20a00020002a2010002290400" }, { "filename": "04-miyagi-zunda-accessories", - "data": "0x0019131b10024e0100044e0101014e" + "data": "0x0019131b10024e0100034e014e0101014e" }, { "filename": "05-akita-fireworks-accessories", - "data": "0x0015171f0c060001c7010001c7050001c101c7020001c1010001c1060001c7010001c7020001c7020001c101c7050001c7050001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c70400014a010001c1010001c7020001c70600014a010001c1020001c10400014a0100014a0900014a0600" + "data": "0x0015171f0c060001c7010001c70200030001c101c7020001c1010001c10100050001c7010001c7020001c7020001c101c7050001c70100040001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c703000100014a010001c1010001c7020001c702000400014a010001c1020001c101000300014a0100014a05000400014a0600" }, { "filename": "05-akita-hatahata-accessories", - "data": "0x0018141b0e01100600015d02100123021001000101025d01010300015d0200" + "data": "0x0018141b0e011005000100015d021001230110011001000101025d01010300015d0200" }, { "filename": "05-akita-raspberry-accessories", - "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e08b9020002b90200" + "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e02b906b9020002b90200" }, { "filename": "06-yamagata-cherry-accessories", @@ -431,19 +431,19 @@ }, { "filename": "06-yamagata-lafrance-accessories", - "data": "0x0019131c100100018402000184032201c601de0222" + "data": "0x0019131c10010001840100010001840122022201c601de0222" }, { "filename": "06-yamagata-shogi-accessories", - "data": "0x0018131b10010001230200032303000223" + "data": "0x0018131b10010001230100010002230123020001000223" }, { "filename": "07-fukushima-akabeko-accessories", - "data": "0x0019141b0f0123013301010123010001330123013301010233010001330200" + "data": "0x0019141b0f01230133010101230100013301230133010101330133010001330200" }, { "filename": "07-fukushima-inawashiro-accessories", - "data": "0x0018171e0c030001e0010001a201950600029203a202950200039208a21a0001010123080002010600" + "data": "0x0018171e0c030001e0010001a2019504000200029203a202950200039208a20b000b000400010101230500030002010600" }, { "filename": "07-fukushima-train-accessories", @@ -451,23 +451,23 @@ }, { "filename": "08-ibaraki-bellpepper-accessories", - "data": "0x0018121b0f01dd01e102dd010f02dd010f01dd0100010f0100" + "data": "0x0018121b0f01dd01e101dd01dd010f01dd01dd010f01dd0100010f0100" }, { "filename": "08-ibaraki-natto-accessories", - "data": "0x001814190e012b0100012b0100012b0200012b0100012b0100012b" + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" }, { "filename": "08-ibaraki-rokkakudo-accessories", - "data": "0x0017171f090700018604000291070001860a00016105000186040001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d412000291070002910700" + "data": "0x0017171f09070001860400029107000186060004000161050001860300010001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d408000a0002910200050002910700" }, { "filename": "09-tochigi-gyoza-accessories", - "data": "0x0018141b0e010001340100013401000234012501340125013401250188022501880225010001340100013401000134" + "data": "0x0018141b0e0100013401000134010001340134012501340125013401250188022501880225010001340100013401000134" }, { "filename": "09-tochigi-lemon-accessories", - "data": "0x0018131c100152020104c7015201c7010101c701010352" + "data": "0x0018131c100152020103c701c7015201c7010101c701010352" }, { "filename": "09-tochigi-shimotsukare-accessories", @@ -483,11 +483,11 @@ }, { "filename": "10-gunma-yakimanjyu-accessories", - "data": "0x0017161e0e040002360111012203000234012301010400013601110134013603000134011101230101030001340136013401010136030001110134012301340400012201360134040001220700" + "data": "0x0017161e0e04000236011101220300023401230101010003000136011101340136010002000134011101230101020001000134013601340101013602000100011101340123013403000100012201360134040001220700" }, { "filename": "11-saitama-icicle-accessories", - "data": "0x0015171c090e010400010101000101010001010100010101000101050001e001000101010001010100010101000101070001010100010101000101010001e007000101010001e00100010109000101030001e0090001e0030001e0090001e00700" + "data": "0x0015171c090e0104000101010001010100010101000101010001010100040001e0010001010100010101000101010001010100060001010100010101000101010001e0010006000101010001e001000101030006000101030001e00300060001e0030001e00300060001e00700" }, { "filename": "11-saitama-soka-senbei-accessories", @@ -495,19 +495,19 @@ }, { "filename": "12-chiba-inubosaki-accessories", - "data": "0x0018171f0d0128010001280100042809000101090001010800040f04000154010104b105000254010102b103000354010102b101000354010103b10300" + "data": "0x0018171f0d0128010001280100042802000700010102000700010102000600040f04000154010104b105000254010102b103000354010102b101000354010103b10300" }, { "filename": "12-chiba-orca-accessories", - "data": "0x0018151c0d0100010d0600020d0200010d0500050d0400020d020b0200025601000156010d01000156" + "data": "0x0018151c0d0100010d0600020d0200010d03000200050d01000300020d020b01000100025601000156010d01000156" }, { "filename": "12-chiba-peanuts-accessories", - "data": "0x0018131b100100016001d801000460010001d801600100" + "data": "0x0018131b100100016001d8010002600260010001d801600100" }, { "filename": "13-tokyo-tower-accessories", - "data": "0x0016151d0e060001da02000141020001da03000101030001da02000141020001da020003010400034104000141010001410300014101000141010001410200" + "data": "0x0016151d0e060001da02000141020001da010002000101030001da02000141020001da010001000301030001000341030001000141010001410300014101000141010001410200" }, { "filename": "13-tokyo-yamanote-accessories", @@ -515,11 +515,11 @@ }, { "filename": "14-ibaraki-natto-accessories", - "data": "0x001814190e012b0100012b0100012b0200012b0100012b0100012b" + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" }, { "filename": "14-kanagawa-baybridge-accessories", - "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010002a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" + "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010001a201a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" }, { "filename": "14-kanagawa-yacht-accessories", @@ -531,23 +531,23 @@ }, { "filename": "15-niigata-riceear-accessories", - "data": "0x0018131d0f0200012802000128020001c001280100012801c001000128010002c0020002c00200" + "data": "0x0018131d0f02000128010001000128020001c001280100012801c001000128010002c0020002c00200" }, { "filename": "16-toyama-kutabe-accessories", - "data": "0x0019141e030100010e0200030e0a00010e0200020e0201010e0400011803bf0188020e0100020e0201010e0400011801bf020e01bf0100060e0500011804bf0100060e0b00010e0100010e0100020e0a00" + "data": "0x0019141e030100010e0200030e0a00010e0200020e0201010e0400011803bf0188020e0100020e0201010e0400011801bf020e01bf0100060e0500011804bf0100060e0a000100010e0100010e0100020e0a00" }, { "filename": "16-toyama-shiroebi-accessories", - "data": "0x0018131a0e0400010e010002ba010e02ba0400" + "data": "0x0018131a0e0400010e010002ba010e01ba01ba0400" }, { "filename": "16-toyama-tateyama-accessories", - "data": "0x0019171c090100017f020001a2017f0300027f01a20100037f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" + "data": "0x0019171c090100017f020001a2017f0300027f01a20100017f027f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" }, { "filename": "17-ishikawa-kotoji-accessories", - "data": "0x0018131c0e02000172030003720300015803000158010001580100015803000158" + "data": "0x0018131c0e02000172020001000372010002000158020001000158010001580100015803000158" }, { "filename": "17-ishikawa-kutani-kaga-gosai-accessories", @@ -559,7 +559,7 @@ }, { "filename": "18-fukui-echizen-crab-accessories", - "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b8041403000114010001b80214010001b80100" + "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b80414020001000114010001b80214010001b80100" }, { "filename": "18-fukui-heshiko-accessories", @@ -571,15 +571,15 @@ }, { "filename": "19-yamanashi-fuji-accessories", - "data": "0x0017171e0c0600020b0800020b01eb010b050007eb01000beb0b5801000758050001e0015802e0080002e0030002a90100" + "data": "0x0017171e0c0600020b03000500020b01eb010b0200030007eb01000beb0b58010007580300020001e0015802e00500030002e0030002a90100" }, { "filename": "19-yamanashi-grape-accessories", - "data": "0x0018121b0e0200019a01220100019a0112029a0112016e0212016e01450100" + "data": "0x0018121b0e0200019a01220100019a0112019a019a0112016e01120112016e01450100" }, { "filename": "20-nagano-kappa-accessories", - "data": "0x0018131a0e020f0201010f0100013e0123013e0200023e022a" + "data": "0x0018131a0e020f0201010f0100013e0123013e01000100023e022a" }, { "filename": "20-nagano-oyaki-accessories", @@ -587,7 +587,7 @@ }, { "filename": "21-gifu-gero-accessories", - "data": "0x0018141c0e02000101010001010200010101000101020001c8013d0101013d010102c8043d01c8010004c80100" + "data": "0x0018141c0e020001010100010101000100010101000101020001c8013d0101013d010101c801c8043d01c8010004c80100" }, { "filename": "21-gifu-gohei-mochi-accessories", @@ -595,15 +595,15 @@ }, { "filename": "21-gifu-sarubobo-accessories", - "data": "0x0018131d0f01000223010001230244012301710244017101000223020002230100017102000171" + "data": "0x0018131d0f010002230100012302440123017102440171010002230100010002230100017102000171" }, { "filename": "21-gifu-ukaibody-accessories", - "data": "0x0015171f090592075407920754079207540792075404920100029207540492010002920754049201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" + "data": "0x0015171f090592075402920592075402920592075402920592075402920292010002920754029202920100029207540292029201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" }, { "filename": "22-shizuoka-fuji-accessories", - "data": "0x0017171d0c090002e0020003e002000101090002320101020003e002000532050001e10632020001dd04e1043204dd07e1" + "data": "0x0017171d0c090002e0020003e0020001010300060002320101020003e0020005320100040001e10632020001dd04e1043204dd07e1" }, { "filename": "23-aichi-misodengaku-accessories", @@ -611,7 +611,7 @@ }, { "filename": "23-aichi-oguratoast-accessories", - "data": "0x0018131c0e029302840293028401b8029301b802840293018401b801840693" + "data": "0x0018131c0e0293028401930193028401b80193019301b8028401930193018401b8018401930593" }, { "filename": "23-aichi-tebasaki-accessories", @@ -619,11 +619,11 @@ }, { "filename": "24-mie-iseebi-accessories", - "data": "0x0017151e0d02000132020001320300013201000232010001320200013201000232010001320100013202180232021802320100011802b4011801000132010001180100023201000118040002b4050001180132011801320200" + "data": "0x0017151e0d02000132020001320200010001320100023201000132010001000132010002320100013201000132021802320218013201320100011802b40118010001320100011801000232010001180100030002b40300020001180132011801320200" }, { "filename": "24-mie-mochi-accessories", - "data": "0x0019121a0f018401b8028401b80184" + "data": "0x0019121a0f018401b80184018401b80184" }, { "filename": "25-shiga-funazushi-accessories", @@ -631,39 +631,39 @@ }, { "filename": "25-shiga-hieizan-accessories", - "data": "0x0018171b090700020f0a00070f0200020f01000b0f028d01000b8d" + "data": "0x0018171b090700020f05000500070f0200020f01000b0f028d01000b8d" }, { "filename": "26-kyoto-daimonji-accessories", - "data": "0x0017161d0d03000114070001140149011404000314014903140200074904000114014901140400021401490100014904140249030003490100" + "data": "0x0017161d0d0300011405000200011401490114040003140149031402000749020002000114014901140400021401490100014904140249030003490100" }, { "filename": "26-kyoto-yatsuhashi-accessories", - "data": "0x0018131a0e0200015703000157018601570100015702860257" + "data": "0x0018131a0e02000157020001000157018601570100015702860257" }, { "filename": "27-osaka-cheesecake-accessories", - "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b08570100015701b7015701b701570100" + "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b015707570100015701b7015701b701570100" }, { "filename": "27-osaka-jinbezame-accessories", - "data": "0x0018161c0d010001a2020001a20400010601a2010002a2060001a2010602a20106020002a2012302a20106012302a202000206025f01060200" + "data": "0x0018161c0d010001a2020001a20400010601a2010002a20400020001a2010602a20106020002a2012302a20106012302a202000206025f01060200" }, { "filename": "27-osaka-owarai-accessories", - "data": "0x0017141c0e010001330100013303000633010001330100013302000533030001330300023301000233" + "data": "0x0017141c0e0100013301000133020001000533013301000133010001330100010005330300013302000100023301000233" }, { "filename": "28-hyogo-akashiyaki-accessories", - "data": "0x0019141b0f0200026002000160015d016001ae015d016002ae0160" + "data": "0x0019141b0f02000260010001000160015d016001ae015d016002ae0160" }, { "filename": "28-hyogo-jst-meridian-accessories", - "data": "0x0017161c0d01320800013208000132020001320700023201000232010001320100023202000132070002320300" + "data": "0x0017161c0d0132080001320800013202000132050002000232010002320100013201000232020001320300040002320300" }, { "filename": "28-hyogo-tower-museum-accessories", - "data": "0x0017171e0c020001010a0001490200013f070001c20200026f0100013e040001490100013e016f023e050001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" + "data": "0x0017171e0c020001010800020001490200013f0500020001c20200026f0100013e0200020001490100013e016f023e0300020001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" }, { "filename": "29-nara-kakinohasushi-accessories", @@ -671,7 +671,7 @@ }, { "filename": "29-nara-narazuke-accessories", - "data": "0x0019121a0f04b8010001b8" + "data": "0x0019121a0f03b801b8010001b8" }, { "filename": "30-wakayama-meharizushi-accessories", @@ -679,7 +679,7 @@ }, { "filename": "30-wakayama-mikan-kaki-accessories", - "data": "0x0018121a0f04c201e104c2" + "data": "0x0018121a0f03c201c201e101c203c2" }, { "filename": "30-wakayama-nankoume-accessories", @@ -691,23 +691,23 @@ }, { "filename": "33-okauama-muscat-accessories", - "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e020001c0014e0200" + "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" }, { "filename": "33-okayama-denim-jacket01-accessories", - "data": "0x0015171f0903540492010004920654039201010392085401920354019219540101105401920101019203540100075403920354010004540101025403920354010008540192045401000d540100045401010654" + "data": "0x0015171f090354049201000492025404540392010103920354055401920354019204540e540754010106540a54019201010192015402540100075403920154025401000454010102540392015402540100085401920254025401000b5402540100045401010654" }, { "filename": "33-okayama-denim-jacket02-accessories", - "data": "0x0015171f09035403920400039205540292040002920754019204000192095404000954010104000a540400015401920101019202540100035404000154039202540100025401010400015403920254010003540400025401920354010003540400065401000254010104000454" + "data": "0x0015171f0903540392040003920154045402920400029202540554019204000192035406540400045405540101040004540654040001540192010101920254010003540400015403920254010002540101040001540392025401000354040002540192015402540100035404000454025401000254010104000454" }, { "filename": "33-okayama-denim-jacket03-accessories", - "data": "0x0015171f09035302540700025403530254070002540453025405000254075305000953050001010853050005530100035305000101045301000353050005530c0002530c0002530c00" + "data": "0x0015171f09035302540700025403530254070002540453025405000254015306530500035306530500010102530653050003530253010003530500010102530253010003530500035302530c0002530c0002530c00" }, { "filename": "33-okayama-kibidango-accessories", - "data": "0x0018131b0f010002570100015707eb010002eb0100" + "data": "0x0018131b0f010002570100015703eb04eb010002eb0100" }, { "filename": "33-okayama-momotaro-accessories", @@ -715,19 +715,19 @@ }, { "filename": "33-okayama-peach02-accessories", - "data": "0x0018151c0e0300015f0500035f0300055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" + "data": "0x0018151c0e0300015f03000200035f02000100055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" }, { "filename": "33-okayama-retainer-accessories", - "data": "0x0015171f09054d010105040101074d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" + "data": "0x0015171f09054d010105040101024d054d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" }, { "filename": "34-hiroshima-battleship-accessories", - "data": "0x0019171f09060001d70a0001d7010002d7070001d7020004d7010001d7010001d7020003d701000ad70100024801000b4802a201000da201000ba2" + "data": "0x0019171f09060001d70700030001d7010002d7070001d7020004d7010001d7010001d7020001d702d701000ad70100024801000b4802a201000ba202a201000ba2" }, { "filename": "34-hiroshima-lemon-accessories", - "data": "0x0019131c0f0100022901220b290100" + "data": "0x0019131c0f0100022901220429042903290100" }, { "filename": "34-hiroshima-oyster-accessories", @@ -735,51 +735,51 @@ }, { "filename": "34-hiroshima-rice-scoop-accessories", - "data": "0x0018131c10096001000160020001600100" + "data": "0x0018131c10036003600360010001600100010001600100" }, { "filename": "34-hiroshima-shrine-accessories", - "data": "0x0018171f0904000877070006bf090001bf020001bf090006bf090001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" + "data": "0x0018171f09040008770200050006bf0300060001bf020001bf0400050006bf0300060001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" }, { "filename": "34-hiroshima-wani-accessories", - "data": "0x0017141d0d045603000156020001560600015604000256070004560a000456" + "data": "0x0017141d0d04560300015602000156030003000156030001000256040003000456070003000456" }, { "filename": "35-yamaguchi-kintaikyo-accessories", - "data": "0x001b171f09010001ca020002ca010002ca010002ca010002ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188033f01000d3f01000b3f" + "data": "0x001b171f09010001ca020002ca010002ca010002ca010001ca01ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188013f023f01000b3f023f01000b3f" }, { "filename": "35-yamaguchi-motonosumiinari-accessories", - "data": "0x0017171f09135303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" + "data": "0x0017171f090e53055303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" }, { "filename": "35-yamaguchi-white -snake-accessories", - "data": "0x0017151e0e060001bf040002010300010101af020102000101060001af03010700010101000201030001af030001af02010200" + "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" }, { "filename": "35-yamaguhchi-tsunoshima-big-bridge-accessories", - "data": "0x0015171f091c3c041b02e101e0071b035603e1015601e008560100045601e008560100045601e008560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" + "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" }, { "filename": "36-tokushima-awaodori-accessories", - "data": "0x0018131b0f0220015a0101010002230200025f0200025f0100" + "data": "0x0018131b0f0220015a01010100022301000100025f01000100025f0100" }, { "filename": "36-tokushima-citrus-sudachi-accessories", - "data": "0x0018131c0e0100035c0100015c010101c70101025c01c7010101c7025c010101c70101015c0100035c0100" + "data": "0x0018131c0e0100035c0100015c010101c70101015c015c01c7010101c7015c015c010101c70101015c0100035c0100" }, { "filename": "36-tokushima-narutomaki-accessories", - "data": "0x0017141c0d0200030103000101034f010101000101014f0301014f0201014f0101014f0101014f0201034f0101014f0101010005010100" + "data": "0x0017141c0d02000301020001000101034f010101000101014f0301014f01010101014f0101014f0101014f01010101034f0101014f0101010005010100" }, { "filename": "37-kagawa-oliveoil-accessories", - "data": "0x0017121c0f010001ac0200015c0100045c01c6025c01c6045c" + "data": "0x0017121c0f010001ac01000100015c0100035c015c01c6015c015c01c6015c035c" }, { "filename": "38-ehime-dango-accessories", - "data": "0x0018131c0e0300021b020002a6011b0100027001a6020001570170020001570400" + "data": "0x0018131c0e0300021b020002a6011b0100027001a60100010001570170020001570400" }, { "filename": "38-ehime-juice-accessories", @@ -787,43 +787,43 @@ }, { "filename": "38-ehime-mandarin-orange-accessories", - "data": "0x0019121a0f014201e10442" + "data": "0x0019121a0f014201e101420342" }, { "filename": "38-ehime-turt-accessories", - "data": "0x0018141c0e01000457010001570370035701700157027002570270015701700157010004570100" + "data": "0x0018141c0e0100045701000157037002570157017001570270015701570270015701700157010004570100" }, { "filename": "39-kochi-seared-bonito-accessories", - "data": "0x0019131b0f037801000178029402780394" + "data": "0x0019131b0f0378010001780294017801780394" }, { "filename": "40-fukuoka-mentaiko-accessories", - "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf036a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" + "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf016a026a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" }, { "filename": "40-fukuoka-umegaeda-accessories", - "data": "0x0018131c0e010003c1010002c1019703c1019701c1019702c1029702c1010003c10100" + "data": "0x0018131c0e010003c1010002c1019702c101c1019701c1019701c101c1029702c1010003c10100" }, { "filename": "41-saga-saga-accessories", - "data": "0x0017151d0e010002560200015602000156020001560100035602000156010001560700015604000156010001560100015601000156010004560100015601000156" + "data": "0x0017151d0e010002560200015601000100015602000156010001560256020001560100015607000156040001560100015601000156010001560100015603560100015601000156" }, { "filename": "41-saga-yobuko-squid-accessories", - "data": "0x0017131c0e0200015103000351020003510100055101000123015101230100025101000251" + "data": "0x0017131c0e020001510200010003510100010003510100055101000123015101230100025101000251" }, { "filename": "42-nagasaki-castella-accessories", - "data": "0x0018131b0f04ae082804ae" + "data": "0x0018131b0f04ae0428042804ae" }, { "filename": "42-nagasaki-gunkanto-accessories", - "data": "0x0016171f09020001011a0001011100026202000162080003620100026205000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" + "data": "0x0016171f09020001010b000e00010001010c00050002620200016204000400036201000262040001000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" }, { "filename": "42-nagasaki-milkshake-accessories", - "data": "0x0018121d0f014d0200015701710457037f0100017f0100037f" + "data": "0x0018121d0f014d02000157017101570357037f0100017f0100037f" }, { "filename": "43-kumamoto-hitomojiguruguru-accessories", @@ -831,15 +831,15 @@ }, { "filename": "43-kumamoto-ikinaridango-accessories", - "data": "0x0018131b0e01000351010001d401b8028402d40129012a012901d4010003d40100" + "data": "0x0018131b0e01000351010001d401b8028401d401d40129012a012901d4010003d40100" }, { "filename": "44-oita-toriten-accessories", - "data": "0x0019121b0f010006930200" + "data": "0x0019121b0f01000293039301930200" }, { "filename": "44-oita-yaseuma-accessories", - "data": "0x0018121a0e0260048804600288" + "data": "0x0018121a0e026002880288026002600288" }, { "filename": "45-miyazaki-mango-accessories", @@ -847,297 +847,297 @@ }, { "filename": "45-miyazaki-takachihokyo-accessories", - "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e1012701050127010601010105022701050201013d01050227053d0127" + "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e10127010501270106010101050127012701050201013d010501270127053d0127" }, { "filename": "46-kagoshima-senganen-accessories", - "data": "0x0016171f09070002010a000101019d050002010300046108000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" + "data": "0x0016171f0907000201050005000101019d0500020103000461070001000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" }, { "filename": "46-kagoshima-shochu-accessories", - "data": "0x0017121c0f010001230200013401000334017f01b7017f01b7027f0334" + "data": "0x0017121c0f0100012301000100013401000334017f01b7017f01b7027f0334" }, { "filename": "47-okinawa-fish-accessories", - "data": "0x0017171d0d0124010002240700022401000124050001240100022401000128010002280700022801000128019b0100029b01000128010002280200029b0100019b0500019b0100029b0600" + "data": "0x0017171d0d012401000224060001000224010001240500012401000224010001280100022801000600022801000128019b0100029b010001280100022801000100029b0100019b0500019b0100029b0600" }, { "filename": "47-okinawa-satokibi-accessories", - "data": "0x0018161c0d0100011e010001c00100011e0100011e020001c00100011e010001c00100011e02c0011e010001c00100011e010001c0020001c0010001c0010001c00100011e0200011e0100011e0100011e0100011e0100" + "data": "0x0018161c0d0100011e010001c00100011e0100011e0100010001c00100011e010001c00100011e01c001c0011e010001c00100011e010001c00100010001c0010001c0010001c00100011e01000100011e0100011e0100011e0100011e0100" }, { "filename": "47-okinawa-sukugarasu-accessories", - "data": "0x0018141d0e020002010300040101000101010e02b101ef0201039d020101000401030002010200" + "data": "0x0018141d0e0200020102000100040101000101010e02b101ef01010101039d0201010004010100020002010200" } ], "heads": [ { "filename": "01-hokkaido-goryokaku-heads", - "data": "0x00021b16040b000254140004541200025401c001dd02541000025401c001dd01c001dd02540e00035401dd02c001dd025401870b00035402c001dd03c001dd018703540700035401c0015401c002dd03c0018702dd04540300035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd02540400025401c001dd02c00287029204c002dd01c0025404000187015402c001dd03c0029203c001dd02c002540400015402870154018701dd08c001dd01c002540400015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c002540500025401c0025401c001dd02c004dd02c001dd01c001540700035401c001dd01c001dd04c001dd01c001dd01c002540700025401c002dd01c0045401c002dd01c002540700025401dd02c0065402c001dd0254080005540400055409000354080003540400" + "data": "0x00021b16040b0002540a000a00045409000900025401c001dd025408000800025401c001dd01c001dd025407000700035401dd02c001dd0254018706000500035402c001dd03c001dd0187035404000300035401c0015401c002dd03c0018702dd045402000100035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd025401000300025401c001dd02c00287029204c002dd01c00254010003000187015402c001dd03c0029203c001dd02c0025402000200015402870154018701dd08c001dd01c0025403000100015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c0025404000100025401c0025401c001dd02c004dd02c001dd01c0015404000300035401c001dd01c001dd04c001dd01c001dd01c0025403000400025401c002dd01c0045401c002dd01c0025403000400025401dd02c0065402c001dd025403000500055404000554040005000354080003540400" }, { "filename": "01-hokkaido-ishikari-heads", - "data": "0x00031c15040400067f0200017f0d00037f0400017f0300027f0100017f0800017f0200037f0200010d037f02e1010003a201e00600027f0100017f020d06e103a203e00800020d015702e101a2019501a201e103a2010d02e001950700020d015702a2019501ce029704a204e0010d0500020d019501a201ce029703ce03a205e0020d0300020d015704ce01cd02ce01cd02a206e00157020d0200010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d020e010d01221057034e010d020e010d03010e570149024e010d010e0100010d03010e570249014e010d0200010d01220101015701490d570149014e020d0300020d034901570434025705010157020d0500020d01490157023401af033405010157020d0700030d033402af01340501020d0a00020d05340257030d0f000334030d0900" + "data": "0x00031c15040400067f0200017f0b000200037f0400017f0300027f0100017f07000100017f0200037f0200010d037f02e1010003a201e004000200027f0100017f020d06e103a203e004000400020d015702e101a2019501a201e103a2010d02e0019504000300020d015702a2019501ce029704a204e0010d03000200020d019501a201ce029703ce03a205e0020d02000100020d015704ce01cd02ce01cd02a206e00157020d01000100010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d010e010e010d01221057034e010d010e010e010d03010e570149024e010d010e0100010d03010e570249014e010d01000100010d01220101015701490d570149014e020d01000200020d034901570434025705010157020d02000300020d01490157023401af033405010157020d03000400030d033402af01340501020d04000600020d05340257030d060009000334030d0900" }, { "filename": "01-hokkaido-tokeidai-heads", - "data": "0x00011b14060a00010b130002a10137100002a1013701e9013701a101370e000237030102370f0001e901010196010101e91000015d01960201015d100002e9013702e9100001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033704a1013702a10237010b01e903ca01e9010b01a1023702a1043702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e90200015d016f035d016f035d010b035d016f035d016f015d0200080b013701a10137080b0200035d010b035d02a10337035d010b035d020001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e90200015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d020003e9010b04e9030b04e9010b03e90100" + "data": "0x00011b14060a00010b0a00090002a101370900070002a1013701e9013701a10137070007000237030102370700080001e901010196010101e908000800015d01960201015d0800080002e9013702e90800080001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033702a102a1013702a10237010b01e903ca01e9010b01a1023702a10237023702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e901000100015d016f035d016f035d010b035d016f035d016f015d01000100080b013701a10137080b01000100035d010b035d02a10337035d010b035d0100010001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e901000100015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d0100010003e9010b04e9030b04e9010b03e90100" }, { "filename": "02-aomori-apple-heads", - "data": "0x00051915080800011b0c000455011b04550600045502a6011b02a6045503000655011e011b011e02550101035502000a5501010455010077550100025501a60c5502000f550300065502a6055505000b55080007550500" + "data": "0x00051915080800011b080004000455011b045504000200045502a6011b02a60455020001000655011e011b011e025501010355010001000a5501010455010011551155115511551155115511550100025501a60c55010001000f5501000200065502a60555020003000b550300050007550500" }, { "filename": "02-aomori-dogu-heads", - "data": "0x00021814080400080a0800020a0236010a0236010a08000136030a01ca020a01360a00020a0136010a0b00010a04ca010a0a00030a01ca020a060001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a0600010a01ca030a01ca0a0001ca020a018a010a01ca0a00010a01ca010a01ca020a0a0006ca0a00060a0a0001ca040a01ca0b00010a02ca010a0600" + "data": "0x00021814080400080a04000400020a0236010a0236010a040004000136030a01ca020a013604000600020a0136010a06000500010a04ca010a05000500030a01ca020a0500010001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a01000500010a01ca030a01ca0500050001ca020a018a010a01ca05000500010a01ca010a01ca020a0500050006ca05000500060a0500050001ca040a01ca05000600010a02ca010a0600" }, { "filename": "02-aomori-goldfish-nebuta-heads", - "data": "0x000119170409000333110005330f00023301010133010102330e000333010103330c000b3309000533010101330101053307000233010104330101043301010233060003330101033303bf0133010103330600053307bf03330400053303bf010103bf010103bf0333010005330dbf0533010101330fbf053301010fbf023301000233022301010bbf010102230300013302230dbf0223050001230dbf0123060001bf012304bf032304bf012301bf07000123030101bf010d01b4010d01bf0301012309000301010d0301010d0301060001010100020101000133030101230301013301000201010001010300010101000101010001330200012301010123020001330100010101000101040002010d000201060001010b0001010300" + "data": "0x000119170409000333090008000533080007000233010101330101023307000700033301010333070005000b3305000400053301010133010105330400030002330101043301010433010102330300030003330101033303bf01330101033303000300053307bf033303000100053303bf010103bf010103bf0333010005330dbf03330233010101330fbf0233033301010fbf023301000233022301010bbf0101022301000200013302230dbf02230100040001230dbf01230200040001bf012304bf032304bf012301bf020005000123030101bf010d01b4010d01bf03010123030006000301010d0301010d030104000200010101000201010001330301012303010133010002010100010103000101010001010100013302000123010101230200013301000101010001010100030002010d0002010100050001010b0001010300" }, { "filename": "03-iwate-moriokamen-heads", - "data": "0x00031d15040b00012303bf1300012302bf020103bf1100012301bf010105bf1000012303bf03a003bf0f00012302bf04a003bf0f00012302bf05a002bf1000012302bf02a003bf0c0001060401010006bf01000433060001060201034701930201010003bf023304010233030001060101019305470293010102000133040101570301013302000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd012202570101013302000106010102930397019303dd02000133030102570301013303000106020101930297019302010400023304010233050002060401080004330400" + "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" }, { "filename": "03-iwate-nanbutekki-heads", - "data": "0x00031b14060700050e0d00030e0500030e0900010e0b00010e0700010e0d00010e0600010e0d00010e0600010e0600010e0600010e0700010e0100090e0100010e08000d0e07000f0e0500110e0400110e01002b0e0100140e0200130e0200050e0163010e0163010e0163010e0163060e04000f0e07000d0e0500" + "data": "0x00031b14060700050e09000400030e0500030e06000300010e0b00010e05000200010e0d00010e04000200010e0d00010e04000200010e0600010e0600010e04000300010e0100090e0100010e050003000d0e050002000f0e04000100110e03000100110e0100020e150e140e0100140e01000100130e01000100050e0163010e0163010e0163010e0163060e020002000f0e040003000d0e0500" }, { "filename": "04-miyagi-datemasamune-heads", - "data": "0x00011d150517000128150002281300020101280b000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e0b000528030103280192010e01920800020e01000192010e0192020103280192010e0192010e0192010e0100020e0400010e0100010e0192010e0b92020e0100010e0500020e0292030e0192010e0192010e0192030e0192020e0600030e0192020e0192020e0192020e0192020e0192020e0700010e01920188010e0192030e0192030e0192020e01920800010e01920c880192010e0800010e01540c880154010e0800012801540c880154012807000128010e01540788016004880154010e01280600020e01540788016004880154020e05000128020e01540788016004880154020e01280400030e01540588026004880154040e0500030e01540388042303880154030e0800020e025406880254020e0e0006540a00" + "data": "0x00011d150517000128150002280100120002010128030008000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e080003000528030103280192010e019207000100020e01000192010e0192020103280192010e0192010e0192010e0100020e03000100010e0100010e0192010e0b92020e0100010e03000200020e0292030e0192010e0192010e0192030e0192020e04000200030e0192020e0192020e0192020e0192020e0192020e04000300010e01920188010e0192030e0192030e0192020e019205000300010e01920c880192010e05000300010e01540c880154010e05000300012801540c8801540128050002000128010e01540788016004880154010e012804000200020e01540788016004880154020e040001000128020e01540788016004880154020e012803000100030e01540588026004880154040e03000200030e01540388042303880154030e04000400020e025406880254020e0600080006540a00" }, { "filename": "04-miyagi-hoya-heads", - "data": "0x00041914070500017101940171020003710a000394020003940a000171019401710200037109000a7106000e7104000e71030010710200107101006c71010006e405ae05e4020010e403000ee40200" + "data": "0x0004191407050001710194017102000371050005000394020003940500050001710194017102000371050004000a71040002000e71020002000e710200010010710100010010710100127112711271127112711271010006e405ae05e40100010010e4010002000ee40200" }, { "filename": "04-miyagi-tanabata-heads", - "data": "0x00041c160406000de1010001bf080001e1010001010400010104000101010002e101000156050001e1020001010400010104000101020001c701e1050001e102000356020003bf020003c7030001bf030001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c702000156020001e10300055605bf05c7050001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" + "data": "0x00041c160406000de1010001bf0300050001e1010001010400010104000101010002e1010001560100040001e1020001010400010104000101020001c701e10200030001e102000356020003bf020003c7030001bf0100020001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c7020001560100010001e10300055605bf05c70400010001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" }, { "filename": "05-akita-akitainu-heads", - "data": "0x00031a14021100012b1600022b01011500032b02011200042b01010123020101800e00042b06010c00062b0301025f0c00072b0501015f0a00092b02010c000b2b01010500040103000b2b010104000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b06000201032b0101052b020102000101022b0700040101000101042b010103000201012b0d00032b0301030003010400" + "data": "0x00031a14021100012b06001000022b010105001000032b020103000f00042b01010123020101800e00042b06010c00062b0301025f01000b00072b0501015f0a00092b0201030009000b2b010103000200040103000b2b0101030001000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b050001000201032b0101052b020102000101022b05000200040101000101042b010103000201012b05000800032b0301030003010400" }, { "filename": "05-akita-magewappa-heads", - "data": "0x00041a15040200108e050012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de030001de0788016001880184068801de050007de01d801de018406de1d0012c9030014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de01880300088801600188018407880500018e01de018e02de018e04de018e02de018e01de018e0200" + "data": "0x00041a15040200108e0400010012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de0200010001de0788016001880184068801de0300020007de01d801de018406de04001600030012c90100020014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de018803000888016001880184078801000400018e01de018e02de018e04de018e02de018e01de018e0200" }, { "filename": "05-akita-namahage-heads", - "data": "0x00021a160407000141090001410b000241070002410c000241050002410b0006230100052309000123060e0123050e012307000123010e0623010e0523010e012305000123010e0123010e0123040e0123040e0223010e012304000123010e0123010e022307410323010e012304000123010e0123010e014103230318032301410123010e012304000123010e0123010e034102230141022303410123010e012303000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e012302000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e012302000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e012302000123010e0123010e012301410101012301cf041801cf0123010101410123010e012302000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" + "data": "0x00021a16040700014109000141040007000241070002410400080002410500024105000600062301000523040005000123060e0123050e0123030004000123010e0623010e0523010e0123020003000123010e0123010e0123040e0123040e0223010e0123010003000123010e0123010e022307410323010e0123010003000123010e0123010e014103230318032301410123010e0123010003000123010e0123010e034102230141022303410123010e0123010002000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e0123010001000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e0123010001000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e0123010001000123010e0123010e012301410101012301cf041801cf0123010101410123010e0123010001000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" }, { "filename": "06-yamagata-hanagasa-heads", - "data": "0x00021b1705080006410e000241065702410a0002410a570241070001410a570132014102570141050001410157013201410132025701c60357013202410132025701410400014101570441025701dd02570341013201410157014103000141015701320341025701dd04570141013201410357014102000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd08570241035701c6035702dd034108570241075701dd0241013202410357014101320257024103570141035702410132014101320141025704410157024102570132024102570332024101320141015702410132014101570241025701410132014101320257024102320141025701320241013201570141010001410157013202410132035703410157012802570232015701410200014102570141013207570128012301280457014103000141035701c60757012801230128025701410400014106570132034101320157012801230128015701410500014105570141013201410132035701280157014107000241045701410132045702410a000241065702410e0006410800" + "data": "0x00021b170508000641080006000241065702410600040002410a5702410400030001410a5701320141025701410300020001410157013201410132025701c603570132024101320257014102000200014101570441025701dd025703410132014101570141020001000141015701320341025701dd045701410132014103570141010001000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd085701410141035701c6035702dd0341085701410141075701dd024101320241035701410132025701410141035701410357024101320141013201410257044101570141014102570132024102570332024101320141015702410132014101570141014102570141013201410132025702410232014102570132024101320157014101000141015701320241013203570341015701280257023201570141010001000141025701410132075701280123012804570141010002000141035701c6075701280123012802570141020002000141065701320341013201570128012301280157014102000300014105570141013201410132035701280157014103000400024104570141013204570241040006000241065702410600080006410800" }, { "filename": "06-yamagata-imoni-heads", - "data": "0x00041b14050800060d0e00020d0600020d0a00020d0a00020d0700010d0e00010d0500010d0400080e0400010d0400010d0200020e028501880103028501970185020e0200010d0300010d0100020e0185021b01970303029702030185020e0100010d0200010d010e0185030302970203019702e102030385010e010d0200010d02850288021b0188020b021b0285020b021b0185010d0100010e010d01970203020b030301850397020302e101880185010d030e01970203019701030188020303e10103028802970203030e038502e10103018802e1028801850203039701030285010e0100020e01e102970285020301880497020b0285020e0200040e029702e1020301850297021b0185040e0300050e0285016201bc016201bc01620185050e0500100e08000c0e0500" + "data": "0x00041b14050800060d08000600020d0600020d06000400020d0a00020d04000300010d0e00010d03000200010d0400080e0400010d02000200010d0200020e028501880103028501970185020e0200010d02000100010d0100020e0185021b01970303029702030185020e0100010d01000100010d010e0185030302970203019702e102030385010e010d01000100010d02850288021b0188020b021b0285020b021b0185010d0100010e010d01970203020b030301850397020302e101880185010d010e020e01970203019701030188020303e10103028802970203020e010e038502e10103018802e1028801850203039701030285010e0100020e01e102970285020301880497020b0285020e01000100040e029702e1020301850297021b0185040e01000200050e0285016201bc016201bc01620185050e02000300100e030005000c0e0500" }, { "filename": "06-yamagata-zaookama-heads", - "data": "0x00041d14040a000727020102270b000b270301012708000e27024c010101270600022701010c270401012704000127020103270a010127024c010101270300020102270301073004010127030101270100010102270201019b0b3002010127024c0101032703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f300301012703000201014c01010e300301012704000101014c03010a300201014c0101012706000201014c0b01014c0101014c010109000401014c0101014c0101014c0301014c01010600" + "data": "0x00041d14040a00072702010227040007000b2703010127030005000e27024c0101012702000400022701010c2704010127010003000127020103270a010127024c0101012701000200020102270301073004010127030101270100010102270201019b0b3002010127024c01010127022703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f3003010127020001000201014c01010e3003010127020002000101014c03010a300201014c01010127030003000201014c0b01014c0101014c0101040005000401014c0101014c0101014c0301014c01010600" }, { "filename": "07-fukushima-peach-heads", - "data": "0x00041d16040500020f1500030f0197010f0100030f0e00060f0297030f0100020f0b00030f05b90297030f0197010f0a00020f04b9011902b9020f0297030f0100020f0600020f04b9011903b9040f0197010f0100030f0500010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297060f05b9040f05b9011902b9110f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f0700020f0100050f03b9021903b90d00030f04b9011903b90e00010f020003b9011904b9140003b90600" + "data": "0x00041d16040500020f12000300030f0197010f0100030f0d000100060f0297030f0100020f0a000100030f05b90297030f0197010f09000100020f04b9011902b9020f0297030f0100020f05000100020f04b9011903b9040f0197010f0100030f04000100010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297020f040f05b9040f05b9011902b9040f0d0f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f01000600020f0100050f03b9021903b903000a00030f04b9011903b904000a00010f020003b9011904b90400100003b90600" }, { "filename": "07-fukushima-takizakura-heads", - "data": "0x00021e14021200035f1700045f01db025f1100035f01db035f01b8045f0e00045f01db045f01b8025f01db015f0100025f0700025f0200035f01b801db025f0100015f01b8025f01db0100015f02b8015f0500025f01b8015f0200015f010001b8035f0100025f01b8010001db01b8015f01db025f0200055f01b8025f0200015f010001b80400015f04b8015f01db015f01db0100015f01db01b8025f01b8015f01db095f020003b8025f0100015f01db0100015f01db025f02b8025f01b8025f0100035f01b8015f04b80100015f0700035f01b8025f01b8025f0200035f05b80700025f0200015f01b80100055f0100015f0100015f03b80100015f01b8045f0100015f01b8035f020001b8015f01db015f01b8015f040003b80100025f01db02b8045f02b8015f0100025f010001db020003b8010003b80200025f01db045f01db035f01b8025f01b8015f040006b80300015f01db0100015f01db015f01db0100015f02b8015f010001b8015f050005b8025f0100015f0200015f01db0300035f02b8045f020005b8065f0600015f0100035f01db01b8025f06b80100025f01db035f01db0700025f010001db0200015f010005b80100015f010001db015f0100015f01db0800015f050005b8040001db0200015f0400" + "data": "0x00021e14021200035f07001000045f01db025f05000c00035f01db035f01b8045f04000a00045f01db045f01b8025f01db015f0100025f01000600025f0200035f01b801db025f0100015f01b8025f01db0100015f02b8015f0500025f01b8015f0200015f010001b8035f0100025f01b8010001db01b8015f01db025f0200055f01b8025f0200015f010001b80400015f04b8015f01db015f01db0100015f01db01b8025f01b8015f01db095f020003b8025f0100015f01db0100015f01db025f02b8025f01b8025f0100035f01b8015f04b80100015f04000300035f01b8025f01b8025f0200035f05b806000100025f0200015f01b80100055f0100015f0100015f03b80100015f01b8045f0100015f01b8035f020001b8015f01db015f01b8015f040003b80100025f01db02b8025f025f02b8015f0100025f010001db020003b8010003b80200025f01db045f01db035f01b8025f01b8015f040006b80300015f01db0100015f01db015f01db0100015f02b8015f010001b8015f050005b8025f0100015f0200015f01db01000200035f02b8045f020005b8065f04000200015f0100035f01db01b8025f06b80100025f01db035f01db03000400025f010001db0200015f010005b80100015f010001db015f0100015f01db03000500015f050005b8040001db0200015f0400" }, { "filename": "07-fukushima-tsurugacastle-heads", - "data": "0x00011a140309000162050001620f000162070001620f000789100007890f0009890f000201030802010e000b890b000d890b000201017f0108010101890101017f010802010b0006890101068909000689010101a30101068909000101017f010107890101017f0101090005890201017f02010589060001940689050106890194030002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" + "data": "0x00011a140309000162050001620700080001620700016206000900078907000900078907000800098906000900020103080201070007000b89050006000d89040007000201017f0108010101890101017f0108020105000600068901010689040005000689010101a301010689030006000101017f010107890101017f01010400050005890201017f0201058903000300019406890501068901940100020002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" }, { "filename": "08-ibaraki-anglerfish-heads", - "data": "0x00031e1401070005981500027e0a981000047e0b980d00047e03000a980c00037e06000a980b00017e06000c980f000f980c0012980a001498080015980500037e1598037e0100047e1598087e1598047e0100027e010015980100027e060005980a390598090003980e3902980b000198103901980d000e980700" + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" }, { "filename": "08-ibaraki-hananuki-ravine-heads", - "data": "0x00041c1502040001c006000136019701c601d80197013602bf090001c0060001bf01000136019701d801bf01970136060001bf080001bf010001bf0100029704d802970c0002c604000136019701d8019702d801970136020002bf0b0001c601000197013601d80188019701bf018801d8013601bf030001c00c000136019702d8029702d801970136010001c0020002c0020002c0020001c0010001bf01000136019701bf018802970288019701360a0001c0010002bf01000197013603d8029703d8013601970e0002970388029703880297020001c6010001bf08000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf040002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d80297050002bf02000136029705d8029705d80297013608000136019701d802bf02d802bf019701d802bf03d801c60136010001bf0500019701360197038802bf0188019702bf048801c60197013602bf050001970136019706d8029706d8019704bf170002bf0100" + "data": "0x00041c1502040001c006000136019701c601d80197013602bf0700020001c0060001bf01000136019701d801bf01970136060001bf0200060001bf010001bf0100029704d802970800040002c604000136019701d8019702d801970136020002bf0400070001c601000197013601d80188019701bf018801d8013601bf030001c0030009000136019702d8029702d801970136010001c0020002c00100010002c0020001c0010001bf01000136019701bf018802970288019701360700030001c0010002bf01000197013603d8029703d8013601970600080002970388029703880297020001c6010001bf010007000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf0300010002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d802970400010002bf02000136029705d8029705d802970136030005000136019701d802bf02d802bf019701d802bf03d801c60136010001bf01000400019701360197038802bf0188019702bf048801c60197013602bf0100040001970136019706d8029706d8019704bf170002bf0100" }, { "filename": "08-ibaraki-rocket-heads", - "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a2601010600057f0b260500057f0b260500057f0b2605000155047f0b260400024201000155027f0201092609000155010003010726090001420100020d0301032601290126017f08000142010001730100020d03010326017f0c0001420100010d0100027f0201017f0e00017301000155027f0101017f0c0001730200024201000155027f140001550b00" + "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a26010101000500057f0b2601000400057f0b2602000300057f0b26030002000155047f0b260400024201000155027f020109260500040001550100030107260600030001420100020d0301032601290126017f060002000142010001730100020d03010326017f0700050001420100010d0100027f0201017f08000600017301000155027f0101017f0900030001730200024201000155027f0a000a0001550b00" }, { "filename": "09-tochigi-sanzaru-heads", - "data": "0x00041e14010500033405000434040004340700063403000634020006340600023401af013401af02340100023401af013401af063401af013401af01340500013401b805af033405af043405af01340400013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af0134040002b805af01b8023404af01b801af01340135013405b80600023401af020e01af01b8023401af04b80135033402b8010e02b801340400033403af0434013504b801340135033402af0434020001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af01340400063402af0100023405af0135033403af0134050003340235013401af0234020005af0135043401af01340700013401350734010005af05340135023406000b3403af01350634013502340400063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" + "data": "0x00041e1401050003340500043404000434040003000634030006340200063403000300023401af013401af02340100023401af013401af063401af013401af013403000200013401b805af033405af043405af013402000200013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af01340200020002b805af01b8023404af01b801af01340135013405b803000300023401af020e01af01b8023401af04b80135033402b8010e02b8013402000200033403af0434013504b801340135033402af04340100010001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af013403000100063402af0100023405af0135033403af01340400010003340235013401af0234020005af0135043401af013405000200013401350734010005af053401350234040002000b3403af013506340135023403000100063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" }, { "filename": "09-tochigi-strawberry-heads", - "data": "0x000416150602000122020001c0010001c00b00012204c00371070001c0022204c00471040005c0057101010271040002c006710101017101010171020002c0017101c007710101037102000e7102000f7101000f7101000f7101000f7102000e7102000d7104000c710500047101460271014603710600047102460371090007710b0004710300" + "data": "0x000416150602000122020001c0010001c008000300012204c003710500020001c0022204c004710300010005c00571010102710200020002c006710101017101010171020002c0017101c0077101010371010001000e71010001000f7101000f7101000f7101000f7102000e7102000d71010003000c710100040004710146027101460371010005000471024603710200070007710200090004710300" }, { "filename": "09-tochigi-toshogu-heads", - "data": "0x00031f1402060001c70f0001c70d0003c7022901c7012908c70e0001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30e0001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30e0001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30d0002c702e3012701e3012701e3012701e3012701e3012702e302c70b00012902e301c7012901c701e302c7015402c701e303c702e301c70b00016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0b0001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290e0001c7027f01c7037f01c7027f01c7100002c70154014101c70154014101c70141015401c70141015402c7080001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014103c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" + "data": "0x00031f1402060001c70f0001c70600070003c7022901c7012908c70700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30700060002c702e3012701e3012701e3012701e3012701e3012702e302c706000500012902e301c7012901c701e302c7015402c701e303c702e301c705000600016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0600050001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290500090001c7027f01c7037f01c7027f01c70900070002c70154014101c70154014101c70141015401c70141015402c70700010001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014102c701c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" }, { "filename": "10-gunma-kusatsu-heads", - "data": "0x00041d15030600020d0200020d0200020d0200020d0a00013201da028802da028802da028802da028801da01320800013201da023202da023202da023202da023201da0132090001da025702da025702da025702da025701da0b0002570200025702000257020002570c000257020002570200025702000257090003e6025702e6025702e6025702e6025703e606000193013e018d0257023e0257023e0257023e02570101013e019306000193013e0101033e018d023e018d033e018d033e018d013e019306000193013e028d053e018d043e028d023e018d019306000193023e018d013e018d013e018d023e018d013e028d013e018d033e019306000193018d053e018d023e018d053e018d013e018d019306000193013e018d033e018d063e018d013e018d023e01010193060001930101033e018d033e018d023e018d023e018d013e018d013e019306000193033e018d033e047f018d013e018d043e01930400027f0193033e018d033e017f023e018d033e027f023e027f0100027f0200017f03e6017f0ce6027f01e60400027f0100027f1400" + "data": "0x00041d15030600020d0200020d0200020d0200020d06000400013201da028802da028802da028802da028801da013204000400013201da023202da023202da023202da023201da01320400050001da025702da025702da025702da025701da0500060002570200025702000257020002570600060002570200025702000257020002570600030003e6025702e6025702e6025702e6025703e6030003000193013e018d0257023e0257023e0257023e02570101013e0193030003000193013e0101033e018d023e018d033e018d033e018d013e0193030003000193013e028d053e018d043e028d023e018d0193030003000193023e018d013e018d013e018d023e018d013e028d013e018d033e0193030003000193018d053e018d023e018d053e018d013e018d0193030003000193013e018d033e018d063e018d013e018d023e010101930300030001930101033e018d033e018d023e018d023e018d013e018d013e0193030003000193033e018d033e047f018d013e018d043e019303000100027f0193033e018d033e017f023e018d033e027f023e027f0100017f017f0200017f03e6017f0ce6027f01e603000100027f0100027f1400" }, { "filename": "10-gunma-negi-heads", - "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030004dd0100034c03dd0100034c010007dd034c04dd034c03dd020003dd034c04dd024c04dd020003dd034c04dd024c03dd030004dd024c03dd024c04dd040003dd024c03dd024c03dd060002dd024c03dd024c02dd090001dd014c02dd024c01dd0b00074e0c00054e0d0001c1010101c1010101c10d0001c1010101c1010101c10d0001c1010101c1010101c10d0001c1010101c1010101c10d0001c103ca01c10d0001c1010101c1010101c10e00010101c101010800" + "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030001dd03dd0100034c03dd0100034c010003dd04dd034c04dd034c03dd0100010003dd034c04dd024c04dd0100010003dd034c04dd024c03dd0200010004dd024c03dd024c04dd0200020003dd024c03dd024c03dd0300030002dd024c03dd024c02dd0400050001dd014c02dd024c01dd06000500074e06000600054e0700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c103ca01c10700060001c1010101c1010101c107000700010101c101010800" }, { "filename": "10-gunma-takasakidaruma-heads", - "data": "0x00061a16070500094108000241010101410201074105000f4103000141016001410123020102230101022302010123014101e60141020001e6022301010423010104230101022301e60100014101e60123020103a70101010e010103a7020101230141016001e60160020101a7030101a7010101a7030101a7020101e6016001e60160020101a7030101a7010101a7030101a7020101e6014101e60141020101a7030101a7010101a7030101a7020101e60160014101600223010103a7030103a701010223014101e602410123030101a1010101a1010101a1010101a1030101230241010001410123010e040102410501010e01230141020002410223010e0123014102010141010e0123010e0223024103000341010e0123010e0301010e0123010e0341050001410160014101600141026002410160014101600141070001e6014101e6024101e6024101e6014101e60a0001e6014101e6014101e6014101e60600" + "data": "0x00061a1607050009410500030002410101014102010741030002000f41020001000141016001410123020102230101022302010123014101e601410100010001e6022301010423010104230101022301e60100014101e60123020103a70101010e010103a7020101230141016001e60160020101a7030101a7010101a7030101a7020101e6016001e60160020101a7030101a7010101a7030101a7020101e6014101e60141020101a7030101a7010101a7030101a7020101e60160014101600223010103a7030103a701010223014101e602410123030101a1010101a1010101a1010101a1030101230241010001410123010e040102410501010e012301410100010002410223010e0123014102010141010e0123010e02230241010002000341010e0123010e0301010e0123010e034102000300014101600141016001410260024101600141016001410300040001e6014101e6024101e6024101e6014101e60400060001e6014101e6014101e6014101e60600" }, { "filename": "11-saitama-tokinokane-heads", - "data": "0x000315140a050002ab070006ab03000aab020001d701b801000292010001b8030001d7010001b801000292010001b80200038601b801000292010001b8050001b8040001b8050001b8048501b8050001b8048501b8040008ab02000aab030001b8048501b8050001b8048501b8050001b8048501b8040001b8068501b8030001b801b601a401b601a401b6018501b8030001b8068501b8030001b8068501b80100" + "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" }, { "filename": "11-saitama-whitetiger-heads", - "data": "0x00031a1406020002010b000201040004010900040103000101015f020109000201015f010102000201025f020107000201025f01010200090103e306010300030101e3050101e3050101e301010400010101e3040101e3030101e3040101e30400040101e3020101e3010101e3020101e3030104001001040001e30e0101e30400100104001001040001e30e0101e3040010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" + "data": "0x00031a1406020002010b00020103000100040109000401020001000101015f020109000201015f010102000201025f020107000201025f01010200090103e3060102000100030101e3050101e3050101e3010102000200010101e3040101e3030101e3040101e302000200040101e3020101e3010101e3020101e303010200020010010200020001e30e0101e30200020010010200020010010200020001e30e0101e30200020010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" }, { "filename": "12-chiba-loquat-heads", - "data": "0x0003181508070002c90d0004260a00082607000a2605000c2603000e2602000e260100702601000f26010006260186012601860526030006260186052606000826090006260500" + "data": "0x0003181508070002c9070006000426060004000826040003000a26030002000c26020001000e26010001000e260100102610261026102610261026102601000f26010006260186012601860526010002000626018605260200040008260400050006260500" }, { "filename": "12-chiba-nanohana-heads", - "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a0500012a0100012a0100022a0100022a0100012a0100022a0100022a0800012a0100122a0100012a0400172a0200062a0122112a0200152a0122022a0200032a0122332a01c0102a01c0072a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a0300012a020001c0102a01c0012a0100012a0100" + "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a02000300012a0100012a0100022a0100022a0100012a0100022a0100022a06000200012a0100122a0100012a02000200172a01000100062a0122112a01000100152a0122022a01000100032a0122152a1a2a042a01c0102a01c0042a032a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a02000100012a020001c0102a01c0012a0100012a0100" }, { "filename": "12-chiba-soysauce-heads", - "data": "0x000317140b010008b4050006b402000185030006b40600066f030001850200016f0101046f0600016f0101046f0500016f01b8010104b8016f0400016f010105b8016f0300026f06b8026f0200026f06b8026f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f02b803ea03b8016f0200016f08b8016f02000a6f0200" + "data": "0x000317140b010008b40300020006b4020001850100020006b404000200066f030001850200016f0101046f04000200016f0101046f04000100016f01b8010104b8016f03000100016f010105b8016f0300026f06b8026f0200026f06b8026f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f02b803ea03b8016f0200016f08b8016f02000a6f0200" }, { "filename": "13-tokyo-station-heads", - "data": "0x00011c14050b0001362d000136160001361200030d0336030d0d00010d010b010d0136010d010b010d0136010d010b010d0c00030d0136030d0136030d0700013604000bbf04000136070001bf020b01bf030b01bf020b01bf070001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf020b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf020b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf020b02bf0272010b04bf037201bf010b02bf010b027202bf010b" + "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" }, { "filename": "13-tokyo-tower-heads", - "data": "0x0000181408030001e0010002e001a203e0010001e0060001e0010001e0010001a201e0010001e0010001e0060003e0010001a201e0010003e0060003e0010001a201e0010003e0060001e0010001e0010002e0010001e0010001e0050001e0020002e001a203e0020001e0040001e0010002e0010001a201e0010002e0010001e0040001e0010002e0010001a201e0010002e0010001e0040001e0010001e0020001a201e0020001e0010001e0040001e0010001e0020002e0020001e0010001e0040003e0010001e001a202e0010003e0040001e0010002e0010001a201e0010002e0010001e0030001e0020002e0010001a201e0010002e0020001e0020001e0010002e0020001a201e0020002e0010001e0020001e0010002e0020002e0030001e0010001e0020001e0010001e0020001e002a201e0020001e0010001e0020003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020002e0010001e0020001e0010002a2010001e0020001e0010002e0010001e0010001e0020002a2020001e0010001e0010006e0020002a2020005e0" + "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" }, { "filename": "14-ibaraki-anglerfish-heads", - "data": "0x00031e1401070005981500027e0a981000047e0b980d00047e03000a980c00037e06000a980b00017e06000c980f000f980c0012980a001498080015980500037e1598037e0100047e1598087e1598047e0100027e010015980100027e060005980a390598090003980e3902980b000198103901980d000e980700" + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" }, { "filename": "14-kanagawa-curry-heads", - "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d404350201010003010600020105d4053502010900030105d4063502010800020106d4063502010800020106d4063502010800030105d4063502010900020104d4063502010a00030103d4063502010b00030101d4018601420160033502010d000401033503010f000801120004010b00" + "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d4043502010100030102000400020105d40535020106000300030105d40635020105000300020106d40635020105000300020106d40635020105000300030105d40635020105000400020104d40635020106000400030103d40635020106000500030101d401860142016003350201070006000401033503010800070008010900090004010b00" }, { "filename": "14-kanagawa-king-heads", - "data": "0x0002171409070001210d0001a90d0001a90c0001a7011301a70a0001a7011301a7011301a7080001a7011301a7011301a7011301a70500012101a9012101a9012101a9012101a9012101a90121040001b3014201270142012701420127014201b30500014901130127011301270113012701420149030003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b30142011303000142011301490127014901270149012701490113014203000113014201b3012701b3012701b3012701b30142011303000142011301490127014901270149012701490113014203000113014201b3012701b3012701b3012701b30142011303000142011301490127014901270149012701490113014203000113014201b3012701b3012701b3012701b301420113030001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" + "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" }, { "filename": "15-niigata-sasadango-heads", - "data": "0x00021c1604100001e11500011b01e11500021b070002e10c00031b040004e10c000129021b030006e10900021b0129011b0129020007e1070001290100021b0129021b0129010008e107000129031b0129011b0129011b08e10800011b0129011b0329021b08e10700021b0429031b08e10700031b0229031b08e10700031b0429011b01e103dd05e10700021b0129011b0129021b012905dd03e10800011b0129021b0129021b06dd03e108000129021b0129021b07dd02e10700031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10e0009e1100006e10b00" + "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" }, { "filename": "15-niigata-tulip-heads", - "data": "0x00041a1506090002b9110004b9090002b9040006b9040002b9010004b9030006b9030009b9010008b9010091b9010012b9020012b9030010b9040009b9016a06b9060006b9016a05b90a0008b90600" + "data": "0x00041a1506090002b90900080004b90800010002b9040006b9040002b9010004b9030006b9030004b905b9010008b9010005b914b914b914b914b914b914b914b9010012b90100010012b90100020010b90200020009b9016a06b90200040006b9016a05b90400060008b90600" }, { "filename": "16-toyama-blackramen-heads", - "data": "0x00041b1505080006330e000a330a000e33070005330685053305000433038502d305850433030003330385018803d303e404850333020002330285018803d302010222010103e402850233010003330285018802d3070103e4018505330285018803d3082202e4028504330285018802d3092203e401850433028503d3080104e401850533018504d3062204e40185033301000233028504d3040104e402850233020003330185018805d307850333030003330185018803d3028503e40285033305000333048503e40385033307000433068504330a000a330600" + "data": "0x00041b150508000633080006000a33060004000e3304000300053306850533030002000433038502d3058504330200010003330385018803d303e4048503330100010002330285018803d302010222010103e402850233010003330285018802d3070103e40185033302330285018803d3082202e40285023302330285018802d3092203e4018502330233028503d3080104e4018502330333018504d3062204e40185033301000233028504d3040104e4028502330100010003330185018805d3078503330100020003330185018803d3028503e402850333020003000333048503e40385033303000400043306850433040006000a330600" }, { "filename": "16-toyama-kutabe-heads", - "data": "0x00031a17010d00060e11000a0e0800010e04000e0e0500010e04000f0e0500020e0300100e0400030e0200050e0501060e0500070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e04010d0e0701010e04010d0e0501020e05010d0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e0600010e1300" + "data": "0x00031a17010d00060e06000b000a0e04000400010e04000e0e02000300010e04000f0e02000300020e0300100e01000300030e0200050e0501060e01000400070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e0401030e0a0e0701010e0401030e0a0e0501020e0501030e0a0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e01000500010e1300" }, { "filename": "16-toyama-raicho-heads", - "data": "0x00031d15021200047f1600077f1400047f020e017f010e0800010f0a00077f020e060001dd010f01dd0800077f090001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f0500010e017f0200010f01dd017e107f0400017f020e157f0400177f0400177f0500167f0500157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e040002dd017e010f0300027f0400027f0500010f017e02dd0500010f037e0100027f010e0300027f010e0300027e010f0400" + "data": "0x00031d15021200047f05001100077f03001100047f020e017f010e02000600010f0a00077f020e0100050001dd010f01dd0800077f0400050001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f04000100010e017f0200010f01dd017e107f03000100017f020e157f02000200177f02000200177f02000300167f02000300157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e0300010002dd017e010f0300027f0400027f0500010f017e02dd02000300010f037e0100027f010e0300027f010e0300027e010f0400" }, { "filename": "17-ishikawa-curry-heads", - "data": "0x00071c1504060001010172020108720a0003720ab803720700027201b80225013403250234022502b80222017205000272032501340125013401250234012501340225042201720300027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b8027201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b8037201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b80272030003720fb802720500037204b8036406b802720800037208b803720c000a720700" + "data": "0x00071c1504060001010172020108720600040003720ab8037204000300027201b80225013403250234022502b8022201720300020002720325013401250134012502340125013402250422017202000100027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b80172017201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b80172027201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b802720100020003720fb8027202000300037204b8036406b8027203000500037208b80372050007000a720700" }, { "filename": "17-ishikawa-jibuni-heads", - "data": "0x00051a1406080004230d000a23080003230110012302100723050010230300042304e101b804d8052302000323055c01e1046002b8032301000323016a01b804e101b804d803b80523015f016a02b80483026004d802b80423015f02b8051a012201b8046002b8032302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d012302000223023402490383031a04b80223030003230249031a038302b803230500032301de0123038301b8012301de03230700032301de0523018802230a000223018801de022301de01230600" + "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b8032302000300032301de0123038301b8012301de032303000400032301de052301880223040006000223018801de022301de01230600" }, { "filename": "17-ishikawa-kinpaku-heads", - "data": "0x000518150705a6076d05ea03a60b6d0da6066d01ea09a6086d07a60a6d10a6016d22a604ea1ea6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" + "data": "0x000518150705a6076d05ea03a60b6d03a60aa6066d01ea09a6086d07a60a6d10a6016d11a611a604ea0da611a6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" }, { "filename": "18-fukui-dinosaur-heads", - "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b0d0001e8011b01e8011b01e8011b01e80200081b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a0400011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a0600021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a0700041b01e8011b01e8051b01e8061b0900022a071b01e8081b0b00022a051b01e8081b0d00012a091b022a0100041b0b00032a021b01e8032a1500031b1900021b1a00011b1a00021b0b00" + "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b02000b0001e8011b01e8011b01e8011b01e80200071b011b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a03000100011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a04000200021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a04000300041b01e8011b01e8051b01e8061b05000400022a071b01e8081b05000600022a051b01e8081b05000800012a091b022a0100041b02000900032a021b01e8032a09000c00031b0c000d00021b0c000e00011b0c000e00021b0b00" }, { "filename": "18-fukui-sabae-glasses-heads", - "data": "0x00091c120603000471080004710400027102060201027104000271020602010271020001710206030101060171040001710206030101060171010001710206030103060471020603010306027101060301040601710200017101060301040602710301050601710200017103010506027102010606017102000171020106060171010001710606017104000171060601710200027104060271040002710406027104000471080004710300" + "data": "0x00091c1206030004710800047103000100027102060201027104000271020602010271010001000171020603010106017104000171020603010106017101000171020603010306047102060301030601710171010603010406017102000171010603010406017101710301050601710200017103010506017101710201060601710200017102010606017101000171060601710400017106060171010001000271040602710400027104060271010003000471080004710300" }, { "filename": "18-fukui-tojinbo-heads", - "data": "0x00051c15050d0003740f0003740200037402720a00037203740272037402720274080003720374027203740272027406000274037203740272037402720274060002740372037402720374020502740600027403720374027203740205027406000274037203740272037402050274060002740372039902720374020502740600029903720399027203740205027406000299030503990272037402050299060002990305039902720399020502990600029903050399027203990205029902720400029903050399020503990205029902720200027702990305030c02050399020502990272017703000299030503990205039902050299027701000177010013770200" + "data": "0x00051c15050d00037407000800037402000374027205000500037203740272037402720274030005000372037402720374027202740300030002740372037402720374027202740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372039902720374020502740300030002990372039902720374020502740300030002990305039902720374020502990300030002990305039902720399020502990300030002990305039902720399020502990272010003000299030503990205039902050299027201000100027702990305030c02050399020502990272017703000299030503990205039902050299027701000177010013770200" }, { "filename": "19-yamanashi-shingen-heads", - "data": "0x00011c1604050001280d000128080001280f000128070001280f0001280700022801000501010005010100022807000228010101280901012801010228070001010228020103280101032802010228010105000401042801010106012801060101042804010200015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a90455020002010355048803550488035502010300030101550d8801550301030004010d880401020005010d880401020005010d880401020005010123038801230288016001230388012304010200050104230188036001880423040102000501058803230488050102000601038801230388012303880401030004010100010102000788010005010200010101000201010001010a000201010002010300" + "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" }, { "filename": "19-yamanashi-wine-heads", - "data": "0x0001161409050003e70a00035b0a0003e70a0003e70a0003790700011b08220300011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" + "data": "0x0001161409050003e705000500035b0500050003e70500050003e705000500037905000200011b082202000100011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" }, { "filename": "20-nagano-matumotocastle-heads", - "data": "0x00011f16020a00010d0300010d180001e3030d01e3180001e3030d01e31600020d01e3030d01e3020d150007011600030e0123030e1500090d1300050d01e3050d1400020101e3010101e302011500020d01e3030e01e3020d12000d0d060001e3070001e30200040103230401060001e3010101e3050001e3010101e30100040e0323040e050001e3030e01e3030001e3030e01e30c0d0300070d010007e30c0d0400030e0400016602e302660c0104e3050d020006e3040e0523030e03e3070d08e30c0d080e03000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e013605010300040101de03d802de02d801de03d801de023601970136050e070002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" + "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" }, { "filename": "20-nagano-wasabi-heads", - "data": "0x0003161505040002220100024e0900024e01000222034e08000122024e0222034e09000122034e0122014e02220a000122034e032201c9012209000622014e02220800013f022201c9014e04220800013f014e0622014e01c9080001c9092207000a2207000422014e06220700013f014e0522014e032207000922014e07000b2207000122014e08220800042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" + "data": "0x0003161505040002220100024e08000100024e01000222034e08000122024e0222034e09000122034e0122014e0222090001000122034e032201c90122070002000622014e022206000200013f022201c9014e042206000200013f014e0622014e01c90500030001c90922040003000a22040003000422014e062203000400013f014e0522014e0322020005000922014e020005000b22010006000122014e082201000700042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" }, { "filename": "21-gifu-gassho-summer-heads", - "data": "0x00021d14040b0003d8160003d8150002d8018402d8130002d8038402d8110002d80184037c018402d80f0002d8028402010123028404d80c0001d8028401ca0201012301ca028401d80d0001d8028407ca028401d80b0001d80184057c01ca057c018401d8090002d8018401ca030103ca030101ca018402d8070002d8028401ca030103ca030101ca028402d8060001d802840dca028401d8050002d8018402ca020101ca020101ca020101ca020102ca018402d8030002d8018403ca020101ca020101ca020101ca020103ca018402d8020001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018404d8018401ca118401ca018404d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + "data": "0x00021d14040b0003d80b000b0003d80b000a0002d8018402d80a00090002d8038402d80900080002d80184037c018402d80800070002d8028402010123028404d80500070001d8028401ca0201012301ca028401d80700060001d8028407ca028401d80600050001d80184057c01ca057c018401d80500040002d8018401ca030103ca030101ca018402d80400030002d8028401ca030103ca030101ca028402d80300030001d802840dca028401d80300020002d8018402ca020101ca020101ca020101ca020102ca018402d80200010002d8018403ca020101ca020101ca020101ca020103ca018402d80100010001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" }, { "filename": "21-gifu-gassho-winter-heads", - "data": "0x00021d1404090007011100030103d803011000030101d8018401d803010f00030101d8038401d805010b00030101d80184037c018401d804010a00030101d8028402010123028401d8010102d80900030101d8028401ca0201012301ca028401d8020001010700030101d80184030103ca0301018401d803010500030101d80184050101ca0501018401d803010400030101d801840bca018401d803010300030101d802840bca028401d803010200020101d802840dca028401d802010100030101d801840fca018401d8050101d8018411ca018401d8030101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018404d8018401ca118401ca018404d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + "data": "0x00021d14040900070109000800030103d8030108000800030101d8018401d8030108000700030101d8038401d8050105000600030101d80184037c018401d8040105000500030101d8028402010123028401d8010102d805000400030101d8028401ca0201012301ca028401d80200010104000300030101d80184030103ca0301018401d8030103000200030101d80184050101ca0501018401d8030102000200030101d801840bca018401d8030102000100030101d802840bca028401d8030101000100020101d802840dca028401d802010100030101d801840fca018401d80301020101d8018411ca018401d80201010101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" }, { "filename": "21-gifu-keichan-heads", - "data": "0x00021d1a03040002061a000406050005061000010609000306070006060100017d029c090001060500010605000322017d029c020006060700090601d2019c010001060c0003ca0123022203e901220106017d029c0106022303ca050002ca0223022201e9037d01220106027d019c017d0106010c022302ca030002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012304ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c022301ca0123010c0322047d029c0322027d029c017d0122010c012301ca0223010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012304ca0123010c0422017d029c037d0422027d0222010c012305ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca030004ca0e2304ca050014ca5d00013d0101013d01011700013d0100013d0a00" + "data": "0x00021d1a03040002061400060004060500050606000a000106090003060300040006060100017d029c0900010602000300010605000322017d029c0200060603000400090601d2019c010001060900030003ca0123022203e901220106017d029c0106022303ca0300020002ca0223022201e9037d01220106027d019c017d0106010c022302ca0200010002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012302ca02ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c0123012301ca0123010c0322047d029c0322027d029c017d0122010c012301ca01230123010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012302ca02ca0123010c0422017d029c037d0422027d0222010c012302ca03ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca0100020004ca0e2304ca0200030014ca03001a001a001a000c00013d0101013d01010a000d00013d0100013d0a00" }, { "filename": "21-gifu-ukai-heads", - "data": "0x00031e190404000b540e000d540a0011540a0004920d540a0002920f540a0010540a00105409001154090005540c0c090002540f0c0700140c0700040c0401050c01a6030c0101010c0600040c0601030c03a6010c0201010c0700030c0601010c07a60101010c0800020c04010ea603ad0300020c040103a603e901c601220210070001ad0300010c050103a603e901c6012202100b00010c050104a602e901c60210160002e90122011001a602ad150001220110020002ad150001220110170001c602e901c6150001c6040001c60400" + "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f540700030010540700030010540700020011540700020005540c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c0201010c06000100030c0601010c07a60101010c06000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" }, { "filename": "22-shizuoka-oden-heads", - "data": "0x0004181407060001b1016001b10e0003c90400028601970200025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b02000160020001600200016003000160030001600200016002000160010003e902000160030001600100036301000160010003e9020001600300016005630160010003e9020001600300016005630160010003e902000160030001600563020002e9016a0600016005630200026a01e908000363030002e90600" + "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" }, { "filename": "23-aichi-hitsumabushi-heads", - "data": "0x00071a15060800040e0d00050e0134040e0800040e0234012b013401350134040e0500010e010b033401350234012b023401350334010e0300010e010b0134012b03340135053401350234010b010e0200010e01350234012b0634012b033401350134010e0100020e0834013506340135040e023401350234012b033401350334012b0234040e010b023401350b34012b050e010b093401350334080e023401350234012b03340135050e0100080e0234080e0200120e0300100e06000c0e0400" + "data": "0x00071a15060800040e08000500050e0134040e05000300040e0234012b013401350134040e03000200010e010b033401350234012b023401350334010e02000100010e010b0134012b03340135053401350234010b010e01000100010e01350234012b0634012b033401350134010e0100020e0834013506340135020e020e023401350234012b033401350334012b0234020e020e010b023401350b34012b020e030e010b093401350334030e050e023401350234012b03340135050e0100080e0234080e01000100120e01000200100e020004000c0e0400" }, { "filename": "23-aichi-nagoyacastle-heads", - "data": "0x00021b15000c0001da070001da120002da053f02da1200093f11000b3f1100010101e3010101e3010101e3010101e30101100001210b3f01210e00063f0101063f0f000501013f05010f00013f010102580121013f010e013f012102580101013f040001210900043f050e043f0400010101e307000f3f0300020101e3050002210d010221020004e304000221013f010e013f0101015801010158010101580101013f010e013f02210200030104000121023f030e073f030e033f01210101015801010400143f04e30400016f01580101015801010158016f0158016f0158016f01580101015801010158016f0158010005e3020014e3040104000101015801010158020101580101015801010158020101580101015802010100040104e301780105015901630178025902dd0259010502dd015901630159010501000159015e0159015e040101d8015e0178025e0163025e01d8015e0178035e0178015e01d8015e0100" + "data": "0x00021b15010b0001da070001da06000b0002da053f02da06000b00093f06000a000b3f05000b00010101e3010101e3010101e3010101e301010600090001210b3f012104000900063f0101063f04000a000501013f050105000900013f010102580121013f010e013f012102580101013f04000900043f050e043f040001e307000f3f0300010101e3050002210d010221020003e304000221013f010e013f0101015801010158010101580101013f010e013f02210200020104000121023f030e073f030e033f0121015801010400143f03e30400016f01580101015801010158016f0158016f0158016f01580101015801010158016f0158010004e3020014e3030104000101015801010158020101580101015801010158020101580101015802010100030104e301780105015901630178025902dd0259010502dd01590163015901050100015e0159015e040101d8015e0178025e0163025e01d8015e0178035e0178015e01d8015e0100" }, { "filename": "23-aichi-tenmusu-heads", - "data": "0x00011b1406090001ce010001ce120003ce120003ce120003e7100001bc05e701bc0d0001bc010105e7010101bc0b0001bc010107e7010101bc0a0001bc020101e7030101e7020101bc090003bc070103bc080005bc030105bc070007bc010107bc06000fbc050010bc050011bc040011bc040011bc030013bc020007bc010101bc010101bc010107bc01002abc" + "data": "0x00011b1406090001ce010001ce0900090003ce0900090003ce0900090003e70900070001bc05e701bc0700060001bc010105e7010101bc0600050001bc010107e7010101bc0500050001bc020101e7030101e7020101bc0500040003bc070103bc0400040005bc030105bc0400030007bc010107bc030003000fbc0300020010bc0300020011bc0200020011bc0200020011bc0200010013bc0100010007bc010101bc010101bc010107bc010015bc15bc" }, { "filename": "24-mie-jingu-heads", - "data": "0x00041e14010100012a0200012a1200012a0200012a0400017e0100017e1300017e0100017e0500017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab03001bab02001bab01000eab01881aab058816ab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d8040001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d80100086001880d6001880860010001d801d301600200018801600bd3016001880200016001d301d801000260010001d801d301600200018801600bd8016001880200016001d301d801000260020001d301600200018801600bd3016001880200016001d302000160" + "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" }, { "filename": "24-mie-ninja-heads", - "data": "0x0004171705070006920a00039201bc06920700039201bc059201bc02920600039201bc069201bc01920500039201bc01e302da010101da010101da01bc02920400039201bc01e301da01e3010101da010101da01e301bc01920300039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa201920400039209a202920300059202a2039203a20192040002920100039206a20292030003920300029204a20292040003920e0002921000" + "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" }, { "filename": "25-shiga-blackbass-heads", - "data": "0x00021d18021700018d0100018d1800038d1700058d1700048d0a00016b0c00038d0a00036b010003c50157012303c50100038d0a00036b02c5011e02c5025702c50100028d0900026b0100016b02c5031e06c50100038d0800036b01c5041e01c5011e05c5028d0900036b01c5031e01c5041e02c5010101c503010800026b01c5031e01c5031e0101016b06010900016b01c5061e0201016b0201011e03010b0001c5031e01c5011e0201016b0201031e02010b0001c5041e0201016b0201031e02010c0001c5021e01c50201016b0701011e0b0001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010f00066b0300031e1100046b0300021e1200046b1800036b1400" + "data": "0x00021d18021700018d0100018d01001700038d01001600058d1700048d0a00016b0c00038d01000900036b010003c50157012303c50100038d02000800036b02c5011e02c5025702c50100028d04000500026b0100016b02c5031e06c50100038d03000500036b01c5041e01c5011e05c5028d05000400036b01c5031e01c5041e02c5010101c5030104000400026b01c5031e01c5031e0101016b060105000400016b01c5061e0201016b0201011e03010600050001c5031e01c5011e0201016b0201031e02010600050001c5041e0201016b0201031e02010700050001c5021e01c50201016b0701011e0700040001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010e000100066b0300031e0e000300046b0300021e0f000300046b14000400036b1400" }, { "filename": "25-shiga-hikonecastle-heads", - "data": "0x00021d15020a00010d0700010d110001bc090001bc10000bbc10000bbc100004bc010d01eb010d04bc0f0003bc01eb010d0301010d01eb03bc0f00020101a2050101a202010f0001ab010103a20101010d010103a2010101ab0d0006bc010d0101010d06bc0b0006bc010d0301010d06bc0b000401010d0501010d0401090003bc0101010d010109bc0101010d010103bc060003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc050002bc020d03bc020d05bc020d0101020d0201010d01bc0500030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" + "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" }, { "filename": "26-kyoto-kinkaku-heads", - "data": "0x00011d15020c00026d010001291800016d01a6180001010229180003b8060001b8090001b8030004b801a6018506b801850b00018504b803a605e6110002a601e40129010101a6016d01a6016d01a610000129016d018a016d018a0129018a016d01a6016d018a02290d0008b8028504b8090001850ab8018504e606b80185060001290100012907a60101012901e4012901e6012901e60129090001290100012904e403290101012901e4012901e4012901e40229070006290e85070006850135018501a0013501850301018501010185010101850900018501a0018501a00135010a018501ea010a018501ea02350585090001850100018502ea010a018501ea010a018501ea02350185010101850101018508001385080001b6015701ab015701b6015701b6015701ab015701980857070002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" + "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" }, { "filename": "26-kyoto-kiyomizu-heads", @@ -1145,333 +1145,333 @@ }, { "filename": "27-osaka-osakacastle-heads", - "data": "0x00021b1406070001da050001da0e00073f0e00073f0d00043f01e3043f0d0001e301ad03e301ad01e30b0001da0100010e01e7010e01e7010101e7010e01e7010e010001da08000221023f012103010121023f0221080001210b3f012108000221010101580201015802010158010102210700072101a60721040001da02000401013f0301013f0401020001da0200032101010158013f01a601010358010101a6013f01580101032102000121113f01210200043f01a6093f01a6043f020001210101013f0301013f01580101015801010158013f0301013f010101210200022101a601580101015801a6013f0321013f01a601580101015801a6022101001521010002c102580101015802c1035802c101580101025802c1020013010100" + "data": "0x00021b1406070001da050001da07000700073f07000700073f07000600043f01e3043f0600070001e301ad03e301ad01e30700040001da0100010e01e7010e01e7010101e7010e01e7010e010001da040004000221023f012103010121023f02210400040001210b3f01210400040002210101015802010158020101580101022104000300072101a607210300010001da02000401013f0301013f0401020001da01000100032101010158013f01a601010358010101a6013f015801010321010001000121113f012101000100043f01a6093f01a6043f0100010001210101013f0301013f01580101015801010158013f0301013f0101012101000100022101a601580101015801a6013f0321013f01a601580101015801a6022101001521010002c102580101015802c1035802c101580101025802c10100010013010100" }, { "filename": "27-osaka-takoyaki-heads", - "data": "0x00021e15020b0001af010001af020001af027d120001af027d01af0100017d01af010002af0f00017d010001af017d03af017d01af020b017d010003af09000157020001af017d02af017d01af020b01af0134017d013401af027d0b0001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0b0001570100010b02af01dd01af013402af017d0134010b03af010001af0b00015701af023401af010b02af010b023402af020b01dd01af0b000134010b02af010b0234010b0234020b0111010b0234010b0a000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f060001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f06000334010b0134020b0b600a000234020b0134010b011102600393036003930a000134010b0234010b013401110b600b00040b01110460029305600c000134010b023401110193013401930560029301600800037f0200023402110160053404600700017f0300017f030001340111026001340360029302600900037f0300023401110193013407601400036003930b00" + "data": "0x00021e15020b0001af010001af020001af027d0900090001af027d01af0100017d01af010002af09000600017d010001af017d03af017d01af020b017d010003af060003000157020001af017d02af017d01af020b01af0134017d013401af027d0700040001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0600050001570100010b02af01dd01af013402af017d0134010b03af010001af05000600015701af023401af010b02af010b023402af020b01dd01af050006000134010b02af010b0234010b0234020b0111010b0234010b050005000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f0100050001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f010005000334010b0134020b0b60050005000234020b0134010b01110260039303600393050005000134010b0234010b013401110b6005000600040b0111046002930560060006000134010b0234011101930134019305600293016006000200037f0200023402110160053404600700017f0300017f0300013401110260013403600293026008000100037f03000234011101930134076009000b00036003930b00" }, { "filename": "27-osaka-tower-heads", - "data": "0x000216150b050001950900039506000195063c05000195043c070003c60500016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f0400019501c6019501c601950600019501c6019501c601950600019501c6019501c601950500029501c6019501c602950400029501c6019501c602950400029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f02000195016f019503000195016f01950200016f019505000195016f02000195070001950100" + "data": "0x000216150b05000195050004000395040002000195063c020003000195043c0300040003c604000100016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f01000300019501c6019501c6019503000300019501c6019501c6019503000300019501c6019501c6019503000200029501c6019501c6029502000200029501c6019501c6029502000200029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f010001000195016f019503000195016f019501000100016f019505000195016f010001000195070001950100" }, { "filename": "28-hyogo-arimaonsen-heads", - "data": "0x0003171409020003a60a0001e704a6080001e703a6012904a6050001e706a6012902a6040001e708a60600016d01e703a60400019d01460400016d02ea0500010601280c00019d01460c00019d01460c00019d01460c00019d01460c00019d01460c00019d01460c00019d01460700049d0106019d012805000406010005ce030001060301030001ce012901ce0229010003010106020006ce0100" + "data": "0x0003171409020003a60900010001e704a6080001e703a6012904a6050001e706a6012902a6040001e708a605000100016d01e703a60400019d014602000200016d02ea05000106012802000a00019d014602000a00019d014602000a00019d014602000a00019d014602000a00019d014602000a00019d014602000a00019d014602000500049d0106019d0128020003000406010005ce0100020001060301030001ce012901ce0229010003010106020006ce0100" }, { "filename": "28-hyogo-himejicastle-heads", - "data": "0x00021a15000c00017f0700017f120007e0130001e0019d01e0019d01e0019d01e0120002e0019d0301019d02e0120007011300010101920101019d0101019201010f00017f020001e0019d01e0019d0101019d01e0019d01e00200017f0c0001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e00b00017f02000101029d01010192010101920101029d01010200017f0a00017f01e0019d0201019d03e0019d0201019d01e0017f0200017f0300017f040002e005010192050102e0030003e00500017f01e0010101920101019201e0010101e00192010101920101027f020002e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d02000192010101920300037f0401059205010200019d01e0019d01e0019d01e00100037f0101019201010792010101920201020001920101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0039d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f010001010192010101920101019201010192100102000501019d01e0019d01e0012b0250012b0350012b0250012b0350012b02000150012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" + "data": "0x00021a15010b00017f0700017f05000c0007e006000c0001e0019d01e0019d01e0019d01e006000b0002e0019d0301019d02e005000c00070106000c00010101920101019d01010192010106000800017f020001e0019d01e0019d0101019d01e0019d01e00200017f0200090001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e003000700017f02000101029d01010192010101920101029d01010200017f01000800017f01e0019d0201019d03e0019d0201019d01e0017f02000300017f040002e005010192050102e0020003e00500017f01e0010101920101019201e0010101e00192010101920101027f020001e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d01000192010101920300037f040105920501020001e0019d01e0019d01e00100037f010101920101079201010192020102000101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d019d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f01000192010101920101019201010192100102000401019d01e0019d01e0012b0250012b0350012b0250012b0350012b0200012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" }, { "filename": "28-hyogo-tajimaushi-heads", - "data": "0x0004191504010002b50f0002b5010002b5110004b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b0400010b0d0d010b03003f0d0100130d0400100d06000c0d0900060d0ab50500050d0bb50500050d05b5020d01b5020d01b50500050d0bb50500050d02b5070d02b50a000ab50200" + "data": "0x0004191504010002b50f0002b5010002b5110002b502b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b01000300010b0d0d010b0300150d150d150d0100130d01000300100d020004000c0d05000400060d0ab501000400050d0bb501000400050d05b5020d01b5020d01b501000400050d0bb501000400050d02b5070d02b5010009000ab50200" }, { "filename": "29-nara-ashura-heads", - "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e4040002180600029f05c2029f060002180400021806000118019f01c2031801c2019f011806000218040002180600012302180123011801230218012306000218040002180600091806000218040002180600012302180323021801230600021804000318060007180500041805000418060003180400021801dd03180800021801dd041801e4031801e401dd041801dd010002e406000118030001dd041801e4031801e401dd021804000218050003180400041801e4011801e401dd031804000218050002e40400011801dd061801dd021801dd02180200021805000218020001dd031801dd021801e4011801e401dd011801dd031801dd01000218050003180100011801dd061801dd061801dd041806000a1803dd05180200021808000218010003180100011803dd0318010003180e000218030002dd031803000218130005180c00" + "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" }, { "filename": "29-nara-deer-heads", - "data": "0x00051b140702110a0002110600011101380111080001110138011106000111023801350600013502380111060001110338013504000135033801110700011102570235020002350257011109000a110a000a110a000a110a000a110a000a110a0001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" + "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" }, { "filename": "30-wakayama-danjogarandaito-heads", - "data": "0x0001191408080001951000012110000195100001210f00012701e301270d0001e3012701e3012701e30a0001e3012701e3012701e3012701e3012701e3060001e3012701e3012701e3012701e3012701e3012701e3012701e304000db4070001b4010101b4010101b4010101b40a0007b40a00012801dd01b401dd01b401dd0128090009010500012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b4060001b401dd01b401dd01b401dd01b401dd01b401dd01b406000bb4060001b4010101b4010e01b4010e01b4010e01b4010101b40400047f07e0047f0100" + "data": "0x00011914080800019508000800012108000800019508000800012108000700012701e301270700060001e3012701e3012701e30600040001e3012701e3012701e3012701e3012701e30400020001e3012701e3012701e3012701e3012701e3012701e3012701e3020002000db40200050001b4010101b4010101b4010101b40500050007b405000500012801dd01b401dd01b401dd012805000400090104000100012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b40300030001b401dd01b401dd01b401dd01b401dd01b401dd01b4030003000bb40300030001b4010101b4010e01b4010e01b4010e01b4010101b403000100047f07e0047f0100" }, { "filename": "30-wakayama-nachifall-heads", - "data": "0x000216150a0100036102e00161010105610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e0030102620600010101e0010101e00800020101e00101080001e003010900010101e00101090001e00201090003010900020101e0090001e0010101e00900010101e001010900030109000301090003010700010101000162010101620101020001010500010101620201080002010100010101000101030001010100010101000101010001010300" + "data": "0x000216150a0100036102e001610101046101610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e00301026202000400010101e0010101e004000400020101e001010400040001e0030104000500010101e001010400050001e0020104000500030104000500020101e00400050001e0010101e004000500010101e001010400050003010400050003010400050003010400030001010100016201010162010102000101050001010162020103000500020101000101010001010100020001010100010101000101010001010300" }, { "filename": "30-wakayama-wakayamaramen-heads", - "data": "0x00041b1505080006330e000233060102330a0002330a01023307000133040106d80401013305000133030102d8016001d8017d026003d80301013303000133020103d80260037d01d80160025b02d80201013302000133010102d8027d0160047d010f035b016002d80101013301000133020101d8067d030f017d025b026001d802010233010101d8077d030f046003d801010233010101d8067d040f066001d801010233010102d8057d040f066001d801010233020101d80160047d040f056001d80201013301000133010101d8067d076002d80101013302000133020101d8047d0160026c01d8026001d8016001d80201013303000133020101d8027d0160016c02c1016c01d8026001d80201013305000133020102d80160016c02c1016c016002d80201013307000133030102d8026c02d8030101330a000133080101330600" + "data": "0x00041b150508000633080006000233060102330600040002330a010233040003000133040106d804010133030002000133030102d8016001d8017d026003d803010133020001000133020103d80260037d01d80160025b02d802010133010001000133010102d8027d0160047d010f035b016002d80101013301000133020101d8067d030f017d025b026001d8020101330133010101d8077d030f046003d8010101330133010101d8067d040f066001d8010101330133010102d8057d040f066001d8010101330133020101d80160047d040f056001d80201013301000133010101d8067d076002d801010133010001000133020101d8047d0160026c01d8026001d8016001d802010133010002000133020101d8027d0160016c02c1016c01d8026001d802010133020003000133020102d80160016c02c1016c016002d802010133030004000133030102d8026c02d803010133040006000133080101330600" }, { "filename": "33-okayama-denim01-heads", - "data": "0x00061815090a54042b01540799010c0299042b019907540199085405990154019901540599085401990e5401990e5401990e5401990e5401000e5401000e5401000e5401000e54010007540799010007990706010005060101015407060100050601010154" + "data": "0x00061815090a54042b01540799010c0299042b019907540199075401540599015401990154059901540754019907540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" }, { "filename": "33-okayama-denim02-heads", - "data": "0x00061815090a92042b01920799010c0299042b0199079201990892050c019201990192050c089201990e9201990e9201990e9201990e9201000e9201000e9201000e9201000e9201000792079901000799079d0100059d01010192079d0100059d01010192" + "data": "0x00061815090a92042b01920799010c0299042b01990792019907920192050c019201990192050c0192079201990792079201990792079201990792079201990792079201000792079201000792079201000792079201000792079201000792079901000799079d0100059d01010192079d0100059d01010192" }, { "filename": "33-okayama-denim03-heads", - "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca0892050c019201ca0192050c089201ca0e9201ca0e9201ca0e9201ca0e9201000e9201000e9201000e9201000e920100079207ca010007ca079d0100059d014d0192079d0100059d01010192" + "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca07920192050c019201ca0192050c0192079201ca0792079201ca0792079201ca0792079201ca079207920100079207920100079207920100079207920100079207920100079207ca010007ca079d0100059d014d0192079d0100059d01010192" }, { "filename": "33-okayama-dog-heads", - "data": "0x00031a1506010003260c0002260300015703260a0002260157030002570326080002260257030003570c260257030002570e260157030003260601016a0501022603000801036a060103000801010f016a010f0601030003010d26010103001126030005260357032603570326030011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db01881100025f0200" + "data": "0x00031a1506010003260c00022602000100015703260a000226015702000100025703260800022602570200010003570c2602570200010002570e2601570200010003260601016a05010226020001000801036a0601020001000801010f016a010f06010200010003010d26010102000100112602000100052603570326035703260200010011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db018801001000025f0200" }, { "filename": "33-okayama-horseshoe-crab-heads", - "data": "0x00051815010a00088e0e0003d5098e0a00028e02ca01d5068e0101028e070001ca048e01ca01d5028e04c3018e0101018e0800048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0a0003d5098e0c00088e0500" + "data": "0x00051815010a00088e0500090003d5098e02000800028e02ca01d5068e0101028e0100060001ca048e01ca01d5028e04c3018e0101018e01000700048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0100090003d5098e02000a00088e0500" }, { "filename": "33-okayama-momotaro-heads", - "data": "0x00021914050200020c1100030c1000040c1000030c0201040c0500040c05000101060c0374060c03000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c01001257020012570200125703000174105704000557040c07570400105705000e570200" + "data": "0x00021914050200020c10000100030c1000040c1000030c0201040c0500040c020003000101060c0374060c010002000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c010012570100010012570100010012570100020001741057010003000557040c0757010003001057010004000e570200" }, { "filename": "33-okayama-monkey-heads", - "data": "0x00051a140605000aca08000eca050010ca030003ca0601016a050102ca03000801036a060103000801010f016a010f06010300030106db01ca06db0101030003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb030003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" + "data": "0x00051a140605000aca050003000eca0300020010ca0200010003ca0601016a050102ca020001000801036a0601020001000801010f016a010f060102000100030106db01ca06db01010200010003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb0100020003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" }, { "filename": "33-okayama-peach-heads", - "data": "0x00041e15030d00015f1700075f11000d5f0d000f5f0b00025f01570e5f0a00015f0157065f01e5085f0900015f0157075f01e5095f0800015f0157075f01e5095f0800015f0157075f01e5095f0800095f01e5095f0800095f01e5095f0800095f01e5095f06000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f032203000322055f0382095f0222070002220f5f02220a0002220b5f02220600" + "data": "0x00041e15030d00015f0d000a00075f0a0007000d5f070006000f5f06000500025f01570e5f05000500015f0157065f01e5085f05000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400095f01e5095f04000400095f01e5095f04000400095f01e5095f040002000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f0322010002000322055f0382095f02220300040002220f5f02220400060002220b5f02220600" }, { "filename": "33-okayama-pheasant-heads", - "data": "0x0003191506019212000292110005920a54050002920d5405000f54040002540601016a0501015404000701036a050104000701010f016a010f0501040002010cb90101040001540eb9040001540eb9040001540eb9040001540eb9040001540eb90400025407b9036d03b905000754096d03000854086d03000e540100016d03000e1d0200" + "data": "0x0003191506019212000292110005920a540400010002920d54030002000f540200020002540601016a05010154020002000701036a0501020002000701010f016a010f05010200020002010cb901010200020001540eb90200020001540eb90200020001540eb90200020001540eb90200020001540eb902000200025407b9036d03b9020003000754096d03000854086d03000e540100016d03000e1d0200" }, { "filename": "34-hiroshima-manju-choco-heads", - "data": "0x00031a1507090001ad110003ad0f0002ad018802ad0d0002ad038802ad0b0002ad02880185028802ad090002ad02880385028802ad050005ad01880585028804ad020001ad05880585058801ad020001ad01880d85018801ad020001ad02880b85028801ad030001ad01880b85018801ad040001ad02880985028801ad040001ad01880b85018801ad030002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad030002ad02880785028802ad050002ad098802ad070003ad010003ad010003ad0400" + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad02880385028802ad0400010005ad01880585028804ad0100010001ad05880585058801ad0100010001ad01880d85018801ad0100010001ad02880b85028801ad0100020001ad01880b85018801ad0200020001ad02880985028801ad0200020001ad01880b85018801ad0200010002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad0100020002ad02880785028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" }, { "filename": "34-hiroshima-manju-custard-heads", - "data": "0x00031a1507090001ad110003ad0f0002ad018802ad0d0002ad038802ad0b0002ad0288016d028802ad090002ad0288036d028802ad050005ad0188056d028804ad020001ad0588056d058801ad020001ad01880d6d018801ad020001ad02880b6d028801ad030001ad01880b6d018801ad040001ad0288096d028801ad040001ad01880b6d018801ad030002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad030002ad0288076d028802ad050002ad098802ad070003ad010003ad010003ad0400" + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288016d028802ad0500040002ad0288036d028802ad0400010005ad0188056d028804ad0100010001ad0588056d058801ad0100010001ad01880d6d018801ad0100010001ad02880b6d028801ad0100020001ad01880b6d018801ad0200020001ad0288096d028801ad0200020001ad01880b6d018801ad0200010002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad0100020002ad0288076d028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" }, { "filename": "34-hiroshima-manju-koshi-heads", - "data": "0x00031a1507090001ad110003ad0f0002ad018802ad0d0002ad038802ad0b0002ad02880180028802ad090002ad02880380028802ad050005ad01880580028804ad020001ad05880580058801ad020001ad01880d80018801ad020001ad02880b80028801ad030001ad01880b80018801ad040001ad02880980028801ad040001ad01880b80018801ad030002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad030002ad02880780028802ad050002ad098802ad070003ad010003ad010003ad0400" + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880180028802ad0500040002ad02880380028802ad0400010005ad01880580028804ad0100010001ad05880580058801ad0100010001ad01880d80018801ad0100010001ad02880b80028801ad0100020001ad01880b80018801ad0200020001ad02880980028801ad0200020001ad01880b80018801ad0200010002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad0100020002ad02880780028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" }, { "filename": "34-hiroshima-manju-maccha-heads", - "data": "0x00031a1507090001ad110003ad0f0002ad018802ad0d0002ad038802ad0b0002ad0288010f028802ad090002ad0288030f028802ad050005ad0188050f028804ad020001ad0588050f058801ad020001ad01880d0f018801ad020001ad02880b0f028801ad030001ad01880b0f018801ad040001ad0288090f028801ad040001ad01880b0f018801ad030002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad030002ad0288070f028802ad050002ad098802ad070003ad010003ad010003ad0400" + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288010f028802ad0500040002ad0288030f028802ad0400010005ad0188050f028804ad0100010001ad0588050f058801ad0100010001ad01880d0f018801ad0100010001ad02880b0f028801ad0100020001ad01880b0f018801ad0200020001ad0288090f028801ad0200020001ad01880b0f018801ad0200010002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad0100020002ad0288070f028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" }, { "filename": "34-hiroshima-manju-tsubu-heads", - "data": "0x00031a1507090001ad110003ad0f0002ad018802ad0d0002ad038802ad0b0002ad02880185028802ad090002ad028802850180028802ad050005ad01880145028501450185028804ad020001ad0588024501800285058801ad020001ad018802800245018502800385018001450185018801ad020001ad02880180018501450480018501800285028801ad030001ad018802850380018501450480018801ad040001ad0288018501450280024502800145028801ad040001ad018801850345028502800345018801ad030002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad030002ad02880180014502800385028802ad050002ad098802ad070003ad010003ad010003ad0400" + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad028802850180028802ad0400010005ad01880145028501450185028804ad0100010001ad0588024501800285058801ad0100010001ad018802800245018502800385018001450185018801ad0100010001ad02880180018501450480018501800285028801ad0100020001ad018802850380018501450480018801ad0200020001ad0288018501450280024502800145028801ad0200020001ad018801850345028502800345018801ad0200010002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad0100020002ad02880180014502800385028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" }, { "filename": "34-hiroshima-okonomiyaki-heads", - "data": "0x00051b14050500015d0300045f010001930d00025d01d9015f026a0122015d0e00012201d90101026a0122010101220b0001930101010001d90101015f016a015d0101015d01010122015f01010a00010101d90101015f016a0122015d010101220101025f01010900012201d90101015f016a015d022201010122015d015f01d901010700015f015d01d90101015f016a0422015d0122015f02d901010500015f015d012201d90101015f016a0622015f02d901010400016a015f022201d90101015f016a0622015f02d901010400016a015f022201d90101015f016a0622015f02d901010400016a015f022201d90101015f016a0622015f02d901010400016a015f022201d90101016a0722015f02d901010400016a015f0c22015f02d901010400026a015f0f2204000560012501600125016001250160012501600125046002001623" + "data": "0x00051b14050500015d0300045f0100019307000600025d01d9015f026a0122015d08000600012201d90101026a0122010101220800030001930101010001d90101015f016a015d0101015d01010122015f010105000500010101d90101015f016a0122015d010101220101025f010104000500012201d90101015f016a015d022201010122015d015f01d9010103000400015f015d01d90101015f016a0422015d0122015f02d9010102000300015f015d012201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101016a0722015f02d9010102000200016a015f0c22015f02d9010102000200026a015f0f22020002000560012501600125016001250160012501600125046002001623" }, { "filename": "34-hiroshima-shrine01-heads", - "data": "0x00051c1505027713000277010015770300131a040013410600044102000323020004410900021a03000123019301230300021a09000441020003230200044106001341040013410700024109000241090003b3090003b3090001b301410900014101b30a0001b301410900014101b30a0001b301410900014101b30a0001b301410900014101b30900018d01b30141038d0306038d014101b30900078d0106068d0500" + "data": "0x00051c15050277130002770100157701000200131a020002001341020004000441020003230200044104000500021a03000123019301230300021a0500040004410200032302000441040002001341020002001341020005000241090002410500040003b3090003b30400050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b305000400018d01b30141038d0306038d014101b305000400078d0106068d0500" }, { "filename": "35-yamaguchi-anglerfish-heads", - "data": "0x00091f15020c000583150004830166068311000a83026601830900013403000f83016603830300013401000234020002830266118302000534028301660683012303830123098305340283016611830166048302340100013409830709048301660483013403000283016603830d090683050004830109035f0166055f0166035f0109048307000283010901660d5f016601090283080001830109018302090166015f0166015f0166015f0166015f0166015f01660209018301090e000b090900" + "data": "0x00091f15020c0005830c000900048301660683090008000a830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301230383012309830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" }, { "filename": "35-yamaguchi-footballfish-heads", - "data": "0x00031f15020900023402eb18000134040001eb01da15000134050001da015d01da14000134040001da015d0101015d01da14000134040001da015d01da1600023401eb020001da1a0002eb038315000483016601eb05831100068301340383026601830900013403000f83016603830300013401000234020002830266118302000534028301660683012303830123098305340283016611830166048302340100013409830709048301660483013403000283016603830d090683050004830109035f0166055f0166035f0109048307000283010901660d5f016601090283080001830109018302090166015f0166015f0166015f0166015f0166015f01660209018301090e000b090900" + "data": "0x00031f15020900023402eb100008000134040001eb01da0e0007000134050001da015d01da0d0007000134040001da015d0101015d01da0c0008000134040001da015d01da0d000900023401eb020001da0e000c0002eb03830c0009000483016601eb0583090008000683013403830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301230383012309830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" }, { "filename": "35-yamaguchi-fuku-heads", - "data": "0x00051b14030400026216000362150004620361049501610595080001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed0261030101610395016101590361015901610595020101000261040105950159016101590495050101000161030013010300026212010400036211010400026201001101080008010259050109000801015906010a000d010400" + "data": "0x00051b14030400026212000400036211000400046203610495016105950300050001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed02610301016103950161015903610159016105950201010002610401059501590161015904950501010001610300130101000200026212010200020003621101020002000262010011010200060008010259050103000600080101590601030007000d010400" }, { "filename": "35-yamaguchi-kawarasoba-heads", - "data": "0x00051e150403000106170002060700015503000155080001060200010609000155030001550900010601000106080001da010101da010001da010101da0500030603000306040001d0012301d0012301d0012301d0012301d00d000106020001150123011501230115012301150123011501230115020001060900010601000d150300020603000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0500020604000fe8030002060200010603000fe80200010605000106010011e801000106070002e80d2302e8020001060500010c02230d0c0223010c0600040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" + "data": "0x00051e1504030001061600010002060700015503000155080001060200010609000155030001550900010601000106080001da010101da010001da010101da05000306020001000306040001d0012301d0012301d0012301d0012301d00900040001060200011501230115012301150123011501230115012301150200010605000400010601000d1503000206020001000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb05000106010604000fe80300020601000100010603000fe802000106030002000106010011e8010001060300040002e80d2302e80200010602000300010c02230d0c0223010c04000200040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" }, { "filename": "35-yamaguchi-shoin-heads", - "data": "0x00031715070100030c0e00050c0d00060c08000d2302000f230100022304880523038803230e8802230e880223038803230488032301880123148803230488032307880123028801ca028801230d8801ca0f8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c88060009880200" + "data": "0x00031715070100030c0c000200050c09000400060c060002000d23010001000f2301000223048805230388012302230e8802230e8802230388032304880323018801230f880588032304880323018806880123028801ca0288012303880a8801ca05880a8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c880100050009880200" }, { "filename": "36-tokushima-awa-odori01-heads", - "data": "0x000118140d010002d8090004d803000188030006d801000188030007d80106040005d8010602000188020001230388010603000188030003880300010102000301026703010200040102670101040003010367050003890367050002e201890367050004e2014f060002e2044f0700044f06000155044f06000355014f09000101090001010a00012301550700" + "data": "0x000118140d010002d80800010004d8030001880200010006d8010001880200010007d801060200020005d80106020001880200012303880106030001880300038803000101010001000301026703010200040102670101040003010367050003890367050002e201890367050004e2014f060002e2044f05000200044f050001000155044f050001000355014f06000300010107000200010108000200012301550700" }, { "filename": "36-tokushima-naruto-wakame-heads", - "data": "0x00022015070b000194035c0a940b000348035c08480b00035c0100025c1300035c0200015c0c000748035c01480c0002480723035c01230248090001480923025c0423014807000148042306de015c02de0423014806000148022302e90bde0223014806000148012304e905de015c05de012301480600014807de045c06de01480600014805de055c07de01480600014806de035c03de02e903de0148060001480bde04e902de01480600014811de0148060002480fde02480600034801de055c07de03480700114809000f480c000b480a00" + "data": "0x00021a15070b000194035c04940b000348035c02480b00035c0100025c02000b00035c0200015c020004000748035c01480400020002480723035c012302480200010001480923025c0423014801000148042306de015c02de042301480148022302e90bde022301480148012304e905de015c05de01230148014807de045c06de0148014805de055c07de0148014806de035c03de02e903de014801480bde04e902de0148014811de014802480fde0248034801de055c07de034801001148010002000f48020004000b480400" }, { "filename": "36-tokusima-whirlpools-heads", - "data": "0x00011d1503080001011800010101300101058d040001010f000130060102000101013001010b00018d030007300200013001010a00018d010102300801018d02000130018d0800018d01010130018d0101088d0101028d01300101018d04000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d01300101060002010130028d01010330028d02010130028d0101018d0130070001010130018d013001010130068d02010130028d01010130060001010130018d013001010130028d0401028d02010130018d01010130050002010130018d01010130028d0101038d0201018d02010130018d010101300400010101000130028d01010130018d0101028d0101028d0101028d01010130018d0101013002010200010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d01010130010002010500018d0101018d0130018d01300101058d01010130028d0101013001010800013001010130028d013005010130028d0101018d0130010108000130018d01010130028d0530028d0101018d013001010a00023002010130058d0201018d013001010f0006010a00" + "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" }, { "filename": "37-kagawa-bonsai-heads", - "data": "0x00021d14040900071b1000051b020f031b0e00010f041b040f031b0c00030f011b070f011b0200040f0600070f04ca0300010f041b0600050f04ca020f011b02ca031b030f0c0001ca020f031b0200011b040f0800031b010f0100010f051b0d00051b010f030003ca0c00031b03ca010f020004ca0100051b0300021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca150005ca140007ca0f00015401010354048c04540c00015401010b540d000154010109540700" + "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" }, { "filename": "38-ehime-iyokan-heads", - "data": "0x00051a140604000c420600084201e107420300024201250f4201000242012512420125134201259e420100054203b30a420300104205000e420300" + "data": "0x00051a140604000c4204000200084201e1074202000100024201250f42010002420125114201420125124201420125124214421442144214421442144214420100054203b30a42010002001042020003000e420300" }, { "filename": "38-ehime-jakoten-heads", - "data": "0x0006191406020010d2020001d203d102d2018e0cd204d10fd204d101d2018e0ad2018e02d204d106d2018e08d204d10fd204d10fd204d10fd204d10fd204d10dd2018e01d204d10fd204d105d2018e01d2018e07d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" + "data": "0x0006191406020010d20100010001d203d102d2018e0bd201d204d10ed201d204d101d2018e0ad2018e01d201d204d106d2018e07d201d204d10ed201d204d10ed201d204d10ed201d204d10ed201d204d10dd2018e01d204d10ed201d204d105d2018e01d2018e06d201d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" }, { "filename": "38-ehime-mandarin-orange-heads", - "data": "0x00061a140604000c420600084201e107420300024201250f4201000242012512420125134201258a420100054203b30a420300104205000e420300" + "data": "0x00061a140604000c4204000200084201e1074202000100024201250f4201000242012511420142012512420142012512421442144214421442144214420100054203b30a42010002001042020003000e420300" }, { "filename": "38-ehime-onsen01-heads", - "data": "0x00031b15050700015504000155040001550a00025503000255030002550900025503000255030002550900025503000255030002550a00025503000255030002550a00025503000255030002550a00025503000255030002550b00025503000255030002550b000255030002550300025506000255020002550300025503000255010001550300025503000255030002550300025501000255010002550300025503000255030002550300045502000255030002550300025504000455020001550400015504000155050004551200055510000355010003550e0003550300125506000e550400" + "data": "0x00031b15050700015504000155040001550400060002550300025503000255040005000255030002550300025505000400025503000255030002550600040002550300025503000255060004000255030002550300025506000400025503000255030002550600050002550300025503000255050006000255030002550300025504000200025502000255030002550300025501000155020001000255030002550300025503000255010002550100025503000255030002550300025503000255025502000255030002550300025504000255025502000155040001550400015505000255025512000255035510000355010003550e000355010002001255020004000e550400" }, { "filename": "38-ehime-onsen02-heads", - "data": "0x00031b15050700010104000101040001010a00020103000201030002010900020103000201030002010900020103000201030002010a00020103000201030002010a00020103000201030002010a00020103000201030002010b00020103000201030002010b000201030002010300020106000374013f0201033f0201033f0201027403000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f0474023f0201033f0201033f0201043f0474023f0101043f0101043f0101053f0474123f0574103f0374010003740e3f03740300127406000e740400" + "data": "0x00031b150507000101040001010400010104000600020103000201030002010400050002010300020103000201050004000201030002010300020106000400020103000201030002010600040002010300020103000201060004000201030002010300020106000500020103000201030002010500060002010300020103000201040002000374013f0201033f0201033f02010274020001000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f02740274023f0201033f0201033f0201043f02740274023f0101043f0101043f0101053f02740274123f02740374103f0374010003740e3f0374010002001274020004000e740400" }, { "filename": "38-ehime-onsen03-heads", - "data": "0x00031c14050b00010c1400050c110001610174016101740161017401610f00017407de0174090001610300016101de01ae05de01ae01de016103000161050001740161017401de04ae01de04ae01de017401610174060003de03ae053f03ae03de090003ae013f02e70126013f03ae0c0003ae053f03ae0c000bae0c000b3f0600013f03000f3f0300013f0100153f0300132106000f0106000157010004ae015702ae015702ae015704ae010001570400010c010001ae0306015701ae033601ae0157030601ae0100010c0400010c010001ae030602ae033602ae037401ae0100010c0200" + "data": "0x00031c14050b00010c0b000900050c09000800016101740161017401610174016108000700017407de01740700020001610300016101de01ae05de01ae01de0161030001610200030001740161017401de04ae01de04ae01de0174016101740300030003de03ae053f03ae03de0300060003ae013f02e70126013f03ae0600060003ae053f03ae060006000bae060006000b3f0600013f03000f3f0300013f0100153f010002001321020004000f01040002000157010004ae015702ae015702ae015704ae0100015702000200010c010001ae0306015701ae033601ae0157030601ae0100010c02000200010c010001ae030602ae033602ae037401ae0100010c0200" }, { "filename": "38-ehime-tai-somen-heads", - "data": "0x00031c18010d00018902000189150001890100015f01890100015f018911000357015f01890157015f01890157015f018902570d0003570b2001570b00025701890e2009000257018910200800015701890320018d0220018d0220018d0220018d05200200012003000257142002000120020001571520020001890120010001571220028d0120030001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a200106032003060120030002570189070604010806050003571206060004570f060800015701000257040006890400015708000157010001570f0001570800015711000157080001571600" + "data": "0x00031c18010d000189020001890a000b0001890100015f01890100015f0189090008000357015f01890157015f01890157015f018902570600070003570b20015705000600025701890e200400050002570189102003000500015701890320018d0220018d0220018d0220018d0520020001200300025714200100010001200200015715200100010001890120010001571220028d01200100020001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a20010603200306012003000257018907060401080601000400035712060200040004570f06040004000157010002570400068904000157040004000157010001570f000157040004000157110001570400040001571600" }, { "filename": "38-ehime-taimeshi-heads", - "data": "0x00041a1606060008230900030f084802230600050f01e90182020101e9015f0101024801230400060f02e9018202e90182010101e90101014801230300030f0282015f02e9015f02e9015f02e9015f0101014801230200020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f0201014802230148030f03e9044202e9028202e90148022301480201025f0182044201010142015f04e9014802230148015f028202e9044201e4014204e9015f014802230148018203e9015f064202e9015f0182010101480223014803e9015f018201e9044201e9015f0282020101480223014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e90101014801230200012301480101018201e90101015f03e90182015f018202e901010148012303000123014803010182015f03e90101028201010148012305000123024802010182015f02e902010248012307000223084802230a0008230600" + "data": "0x00041a16060600082306000300030f0848022304000200050f01e90182020101e9015f01010248012303000100060f02e9018202e90182010101e901010148012302000100030f0282015f02e9015f02e9015f02e9015f01010148012301000100020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f02010148012301230148030f03e9044202e9028202e901480123012301480201025f0182044201010142015f04e90148012301230148015f028202e9044201e4014204e9015f0148012301230148018203e9015f064202e9015f01820101014801230123014803e9015f018201e9044201e9015f02820201014801230123014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e901010148012301000100012301480101018201e90101015f03e90182015f018202e9010101480123010002000123014803010182015f03e901010282010101480123020003000123024802010182015f02e9020102480123030004000223084802230400060008230600" }, { "filename": "39-kochi-bonito-heads", - "data": "0x00041d15020f0001261b00012619000226100001260700032611000126040006260f0002260c540d0010540a000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e9080012e9090002260ee90a0001260b0002260800" + "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" }, { "filename": "40-fukuoka-mojiko-heads", - "data": "0x00031e14030d0001961600019603000196030001960f0001960200019607270196010001960d00019602000927010001960d0002610b2702610b00046102270106016b010101270106022704610a0001a501e0010601a5032701a501aa01a5032701a501e0010601a5090009aa015709aa090001c1025701c1025701e9035701e9025701c1025701c10700032701c1015701e001c102e001e903e001e902e001c1015701e001c103270300042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c104270200042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e00106025702060157010601c10157010601c1010301460197034601970146010301c10157010601c10106015702060657017f0257017f0103019701460397014601970103017f0257017f0557" + "data": "0x00031e14030d0001960d0009000196030001960300019609000600019602000196072701960100019607000600019602000927010001960700060002610b27026106000500046102270106016b010101270106022704610500050001a501e0010601a5032701a501aa01a5032701a501e0010601a50500040009aa015709aa0400050001c1025701c1025701e9035701e9025701c1025701c105000200032701c1015701e001c102e001e903e001e902e001c1015701e001c1032702000100042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c1042701000100042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e001060157015702060157010601c10157010601c1010301460197034601970146010301c10157010601c101060157020601570557017f0257017f0103019701460397014601970103017f0257017f0557" }, { "filename": "40-fukuoka-tenmangu-heads", - "data": "0x00031e14021b0001660100016a17000166060013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b802850700048501b80185038401bf03c401bf0384018501b804850500061804bf017701c4017704bf06180600031804a201bf017703bf017701bf04a203180700011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb01180700011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b501180700011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b501180700071801bf051801bf071807000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d01180600019d026f029d026f029d026f029d026f029d026f019d026f019d0900016f029d026f029d026f029d026f029d016f0600" + "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" }, { "filename": "41-saga-mudskipper-fiddlercrab-heads", - "data": "0x00021815020700036111000361028d10000261018d03610500027809000161018d0361018d0305018d010501780192010507000461018d01610105018d080506000161018d0161018d0705018d0205029204000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70d000261018d0105018d030502d70c00018d02610405018d02d70d000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d020004750c000161028d0200017501000275010001750100" + "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" }, { "filename": "41-saga-yoshinogari-heads", - "data": "0x0002181409030001d8010001d8010001d8010001d8010001d8070007d8070009c905000bd803000dc903000b9903000d9901000f99010001bb050001bb050001bb010001de01bb050001bb050001bb11de01bb050001bb050001bb10de010001bb050001bb050001bb020001bb050001bb050001bb020001bb050001bb050001bb02000dbb020001bb050001bb050001bb020001bb050001bb050001bb0100" + "data": "0x0002181409030001d8010001d8010001d8010001d8010001d80300040007d80400030009c9030002000bd8020001000dc9010002000b99020001000d9901000f99010001bb050001bb050001bb010001de01bb050001bb050001bb01de0fde01de01bb050001bb050001bb01de0fde010001bb050001bb050001bb0100010001bb050001bb050001bb0100010001bb050001bb050001bb010001000dbb0100010001bb050001bb050001bb0100010001bb050001bb050001bb0100" }, { "filename": "42-nagasaki-champon-heads", - "data": "0x00071a1406060008e00a0003e0065703e0060003e00257066d025703e0030002e00157032d01d4014e02eb0166012d026d025702e0010002e00257036602eb02d40166012d014e02d4025703e00257014e05d4014e01970166012d02d4026d025702e00157016d024e01d402eb02d4019702d402eb014e0297015702e0015702eb0266039703660197024e032d015703e00157032d02d401eb032d019701eb01d4036602e0010002e0016d01eb024e05d4019701eb014e036d01e00200016f03e0015702d401b3016d02eb016d025703e0016f0300026f03e0015701cd01b301cd025703e0026f0500036f08e0036f07000c6f0400" + "data": "0x00071a1406060008e00600040003e0065703e00400020003e00257066d025703e00200010002e00157032d01d4014e02eb0166012d026d025702e0010002e00257036602eb02d40166012d014e02d4025702e001e00257014e05d4014e01970166012d02d4026d025701e001e00157016d024e01d402eb02d4019702d402eb014e0297015701e001e0015702eb0266039703660197024e032d015701e002e00157032d02d401eb032d019701eb01d4036602e0010002e0016d01eb024e05d4019701eb014e036d01e001000100016f03e0015702d401b3016d02eb016d025703e0016f01000200026f03e0015701cd01b301cd025703e0026f02000300036f08e0036f030004000c6f0400" }, { "filename": "42-nagasaki-meganebashi-heads", - "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e0608017e0400017e0408017e0400017e04080600017e0208017e06000308017e060004080600017e0108017e080002080800017e01910800029108000291080002910800039107000391070001910100039103000291020003910300029104000491060004910a00019101000191010001910800" + "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e04080208017e0400017e0408017e0400017e020802080600017e0208017e060002080108017e060004080600017e0108017e080002080800017e019108000291080001910191080002910800019102910700039107000191010003910300029102000391030002910100030004910600049103000700019101000191010001910800" }, { "filename": "42-nagasaki-saseboburger-heads", - "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c2050014c2040014c204000393031c0593011c0493021c02930300151c0100021c0100031c0e55041c07000ee0011c070007e009e5060009e5099302e5030002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0300149704000755058506550600019301c2015501c2045508c2015502c20193050012930300" + "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" }, { "filename": "43-kumamoto-karashirenkon-heads", - "data": "0x00051a1505060009c60a0002c609d402c6060002c606d401c606d402c6030001c604d401c602d403c602d401c604d401c6020001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d402c605d401c607d401c605d402c602d402c60bd402c602d402c601d404c604d401c604d404c601d402c602d402c60bd402c602d402c605d401c607d401c605d402c604d403c605d403c604d401c6010001c602d404c605d404c602d401c6020001c604d401c602d403c602d401c604d401c6030002c605d402c606d402c6060002c609d402c60a0009c60600" + "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" }, { "filename": "43-kumamoto-kumamotocastle-heads", - "data": "0x00021d15020800019d1900019d0101019d1700059d1600050e140002c80206019d020602c8120002c8029d0101029d02c8110002c8029d0323029d02c810000501019d05010800019d0700010e0223010e019d0101019d010e0223010e0700019d0101019d050001c8036f019d0323019d036f01c806000306050001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c80300019d0101019d0c01026f020101c80192019d019202c802000392010e0623010e0223020e029201230192019d0301019d0101020003920c0e0492052301920100059d012301010123010101230101012301010123010101230a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" + "data": "0x00021d15020800019d12000700019d0101019d11000600059d10000600050e1000040002c80206019d020602c80e00040002c8029d0101029d02c80e00030002c8029d0323029d02c80d0003000501019d05010800019d04000300010e0223010e019d0101019d010e0223010e0700019d0101019d0300020001c8036f019d0323019d036f01c8060003060300020001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c802000100019d0101019d0c01026f020101c80192019d019202c8010001000392010e0623010e0223020e029201230192019d0301019d01010100010003920c0e0492052301920100059d012301010123010101230101012301010123010101230a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" }, { "filename": "44-oita-beppujigoku-heads", - "data": "0x00021c17030a00027f0100017f1300027f1600017f0300017f1400017f0300017f0200039b0230019b0c00037f050006300700029d0500017f1000049d0300017f0100027f06000157010001570500019d01c8019d01c80300017f0300017f040005570300069d0300017f0200017f0400056f0e00017f0500016f0100036f1c00023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e030001010106150001010100010101061700010101060101020006bf0c00010101000101010601000106020006bf0d0001010106070001bf010001bf2f0001bf010001bf0500" + "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" }, { "filename": "44-oita-usajingu-heads", - "data": "0x00031e1501070001b80d0001b80e000fb80d0011b80b0013b80b0002bf01b402bf01b402bf01b402bf01b402bf01b402bf0d0001bf01b4020101b4020101b4020101b4020101b401bf090006b8016d02bf016d05bf016d02bf016d06b8040006b801bf020101bf010103bf010101bf020101bf06b8040006b801bf020101bf010103bf010101bf020101bf06b8040004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b8030006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b8020007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf01010400010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d0400010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010104000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d010103000dbf016d0dbf040005bf016d02bf016d05bf016d02bf016d05bf0300" + "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" }, { "filename": "45-miyazaki-aoshima-heads", - "data": "0x00061d1403050010920b00027f0192047f0192047f0192017f0e0001bf040001bf040001bf080001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf080004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf0192090005e102bf080002bf090003e1011b019202bf010006af019202bf080002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d6020001e1011b02e1019d01e1019209af019201af0199022103990200011b03e1019d0caf01d6026001d6016001d60200" + "data": "0x00061d14030500109205000600027f0192047f0192047f0192017f0600080001bf040001bf040001bf0700010001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf0700010004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf01920600030005e102bf080002bf0600030003e1011b019202bf010006af019202bf0600020002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d60100010001e1011b02e1019d01e1019209af019201af01990221039901000100011b03e1019d0caf01d6026001d6016001d60200" }, { "filename": "45-miyazaki-chickennanban-heads", - "data": "0x00061a1404080007870d0003870179078709000a870179048707000287017902870179028701790587029c0400029c0c87059c0200029c0c87079c0100029c0187017903870179028701790287089c0100029c0a870b9c0a870c9c08870c9c0100029c018701790287017901870c9c0200029c05870d9c0300029c028701790187029c0111099c0400029c0387049c0311069c07000e9c0300" + "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" }, { "filename": "46-kagoshima-goromon-heads", - "data": "0x00051e1502080001a50b0001a50e0001a50d0001a50c0011210a000221019501210195012101950121019501210195012101950121019501210195022108000121019501210195012101950121019501210195012101950121019501210195012101950121019501210800067f0121019501210195012101950121067f0b000f7f0d000554057f05540b0004210354057f05540b000121019501210195012101950121019501210195012101950121019501210195012101950121080002210195012101950121019501210195012101950121019501210195012101950121019502210800017f018a037f018a027f018a017f018a027f018a0195027f018a017f060001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d7020004d7010501ca035001ca015001ca030001ca0150038a015001ca04d7020002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" + "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" }, { "filename": "46-kagoshima-shirokuma-heads", - "data": "0x00011914060400030f1300010f027110000271010101710a0001c00300010104710201020001c0050002c004010271050101c0050001c0020101e4060101b703010500010102e4030101b7060102b90300020102e40a0102b901010200030102e40201017109010100010102650401017101ba0171020102da060102650f0102002501010611010206017f0f06017f0206117f0106010001060f7f010603000106047f0401057f010605000206097f0206080009060500" + "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" }, { "filename": "47-okinawa-goya-chanpuru-heads", - "data": "0x00061915070600018702a2018701a201870a00018701a20187016d010f018701a2028701a2070001a20187020f0201020f018703a205000287010f01380222010f0122016d01380122010f0287030002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f01220587012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f01870200018701a2013801220201016d0122010f0201016d01220138018701a203000287010f01010438010f0222010f028705000287010f0438010f0122010f02a2070002a20187016d0122010f01a203870a00028702a202870600" + "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" }, { "filename": "47-okinawa-shuricastle-heads", - "data": "0x00051e1403050001d00f0001d00a0002c40d0002c40a0001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10a0001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a1090001be01d001be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01d001be060001be01a101be01a101be01a101be01a101be01a101be01c401be01a101be01a101be01a101be01a101be01a101be0600084803540848060001be01a101be01a101be01a101be01a1024d01a601be01a6024d01a101be01a101be01a101be01a101be020001be01a101be01a101be01a101be01a101be014d02a6039202a6014d01be01a101be01a101be01a101be01a101be0200044801be01a1014d01a601d0029201d0029201d001a6014d01a101be044804000148013301480133014801330148094d014801330148013301480133014804000748014d010101a603be01a60101014d07480400014801010548014d0101014d0301014d0101014d0248020101480101014804000148010104480105014d01be01a603be01a601be014d010501480201014801010148030007970105014d01be014d03be014d01be014d010507970100019707ee01d7095901d707ee0197" + "data": "0x00051e1403050001d00f0001d00500050002c40d0002c40500050001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10500050001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10500040001be01d001be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01d001be0400020001be01a101be01a101be01a101be01a101be01a101be01c401be01a101be01a101be01a101be01a101be01a101be020004000848035408480400020001be01a101be01a101be01a101be01a1024d01a601be01a6024d01a101be01a101be01a101be01a101be020001be01a101be01a101be01a101be01a101be014d02a6039202a6014d01be01a101be01a101be01a101be01a101be0200044801be01a1014d01a601d0029201d0029201d001a6014d01a101be0448020002000148013301480133014801330148094d0148013301480133014801330148020002000748014d010101a603be01a60101014d074802000200014801010548014d0101014d0301014d0101014d02480201014801010148020002000148010104480105014d01be01a603be01a601be014d0105014802010148010101480200010007970105014d01be014d03be014d01be014d010507970100019707ee01d7095901d707ee0197" }, { "filename": "47-okinawa-siisa-heads", - "data": "0x00041d14030200033706000437060003370500043702000337020003370200043707000837020008370700023703460137034602370246023702460337060002370266023702660437012303370123033705000146023701660123023701660123033701230137012301370123013701230237014603000246143702460300014603370423073704230237014603000346083702460637012301370246050002460637014602000146063702460600023707460200074602370400014601000337024602370146013702000137014602370246033701000146010002460100093702000937010003460b3702000b37014601000a370123020001230a37030001370146083702230837014601370600023701660200023701660200016602370200016602370400" + "data": "0x00041d14030200033706000437060003370200030004370200033702000337020004370300040008370200083704000300023703460137034602370246023702460337030003000237026602370266043701230337012303370300020001460237016601230237016601230337012301370123013701230137012302370146020001000246143702460100020001460337042307370423023701460200010003460837024606370123013702460200030002460637014602000146063702460300030002370746020007460237030001000146010003370246023701460137020001370146023702460337010001460100024601000937020009370100024601460b3702000b37014601000a370123020001230a3701000200013701460837022308370146013702000400023701660200023701660200016602370200016602370400" } ], "glasses": [ { "filename": "glasses-hip-rose-glasses", - "data": "0x000b1710070300062001000620030001200201022301200100012002010223052002010223032002010223052002010223032002010223022002000120020102230120010001200201022301200300062001000620" + "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" }, { "filename": "glasses-square-black-eyes-red-glasses", - "data": "0x000b17100703000623010006230300012302010264012301000123020102640523020102640323020102640223020001230201026401230100012302010264022302000123020102640123010001230201026401230300062301000623" + "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" }, { "filename": "glasses-square-black-rgb-glasses", - "data": "0x000b1710070300062301000623030003230164022301000323016413230200012301650223015a01230100012301650223015a022302000623010006230300062301000623" + "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" }, { "filename": "glasses-square-black-glasses", - "data": "0x000b171007030006230100062303000123020103230100012302010723020105230201042302000123020103230100012302010423020001230201032301000123020103230300062301000623" + "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" }, { "filename": "glasses-square-blue-med-saturated-glasses", - "data": "0x000b17100703000643010006430300014302010223014301000143020102230543020102230343020102230243020001430201022301430100014302010223024302000143020102230143010001430201022301430300064301000643" + "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" }, { "filename": "glasses-square-blue-glasses", - "data": "0x000b17100703000607010006070300010702010223010701000107020102230507020102230307020102230207020001070201022301070100010702010223020702000107020102230107010001070201022301070300060701000607" + "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" }, { "filename": "glasses-square-frog-green-glasses", - "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022305c00201022303c00201022302c0020001c00201022301c0010001c00201022302c0020001c00201022301c0010001c00201022301c0030006c0010006c0" + "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" }, { "filename": "glasses-square-fullblack-glasses", - "data": "0x000b1710070300062301000623030004230101012301000423010108230101062301010223020006230100072302000623010006230300062301000623" + "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" }, { "filename": "glasses-square-green-blue-multi-glasses", - "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223028b0200010f02010223010f0100018b02010223028b0200010f02010223010f0100018b02010223018b0300060f0100068b" + "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" }, { "filename": "glasses-square-grey-light-glasses", - "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022305c80201022303c80201022302c8020001c80201022301c8010001c80201022302c8020001c80201022301c8010001c80201022301c8030006c8010006c8" + "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" }, { "filename": "glasses-square-guava-glasses", - "data": "0x000b17100703000637010006370300013702010223013701000137020102230537020102230337020102230237020001370201022301370100013702010223023702000137020102230137010001370201022301370300063701000637" + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" }, { "filename": "glasses-square-honey-glasses", - "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022305de0201022303de0201022302de020001de0201022301de010001de0201022302de020001de0201022301de010001de0201022301de030006de010006de" + "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" }, { "filename": "glasses-square-magenta-glasses", - "data": "0x000b17100703000609010006090300010902010223010901000109020102230509020102230309020102230209020001090201022301090100010902010223020902000109020102230109010001090201022301090300060901000609" + "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" }, { "filename": "glasses-square-orange-glasses", - "data": "0x000b17100703000614010006140300011402010223011401000114020102230514020102230314020102230214020001140201022301140100011402010223021402000114020102230114010001140201022301140300061401000614" + "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" }, { "filename": "glasses-square-pink-purple-multi-glasses", - "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223029a020001200201022301200100019a02010223029a020001200201022301200100019a02010223019a030006200100069a" + "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" }, { "filename": "glasses-square-red-glasses", - "data": "0x000b17100703000624010006240300012402010223012401000124020102230524020102230324020102230224020001240201022301240100012402010223022402000124020102230124010001240201022301240300062401000624" + "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" }, { "filename": "glasses-square-smoke-glasses", - "data": "0x000b17100703000659010006590300015902660223015901000159026602230559026602230359026602230259020001590266022301590100015902660223025902000159026602230159010001590266022301590300065901000659" + "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" }, { "filename": "glasses-square-teal-glasses", - "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223051c02010223031c02010223021c0200011c02010223011c0100011c02010223021c0200011c02010223011c0100011c02010223011c0300061c0100061c" + "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" }, { "filename": "glasses-square-watermelon-glasses", - "data": "0x000b17100703000637010006370300013702010223013701000137020102230537020102230337020102230237020001370201022301370100013702010223023702000137020102230137010001370201022301370300063701000637" + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" }, { "filename": "glasses-square-yellow-orange-multi-glasses", @@ -1479,7 +1479,7 @@ }, { "filename": "glasses-square-yellow-saturated-glasses", - "data": "0x000b17100703000628010006280300012802010223012801000128020102230528020102230328020102230228020001280201022301280100012802010223022802000128020102230128010001280201022301280300062801000628" + "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" } ] } diff --git a/contract/test/image-local-data_test.json b/contract/test/image-local-data_test.json new file mode 100644 index 00000000..32488200 --- /dev/null +++ b/contract/test/image-local-data_test.json @@ -0,0 +1,1502 @@ +{ + "bgcolors": [ + "d5d7e1", + "e1d7d5" + ], + "palette": [ + "", + "ffffff", + "c5b9a1", + "cfc2ab", + "63a0f9", + "807f7e", + "caeff9", + "5648ed", + "5a423f", + "b9185c", + "b87b11", + "fffdf2", + "4b4949", + "343235", + "1f1d29", + "068940", + "867c1d", + "ae3208", + "9f21a0", + "f98f30", + "fe500c", + "d26451", + "fd8b5b", + "5a65fa", + "d22209", + "e9265c", + "c54e38", + "80a72d", + "4bea69", + "34ac80", + "eed811", + "62616d", + "ff638d", + "8bc0c5", + "c4da53", + "000000", + "f3322c", + "ffae1a", + "ffc110", + "505a5c", + "ffef16", + "fff671", + "fff449", + "db8323", + "df2c39", + "f938d8", + "5c25fb", + "2a86fd", + "45faff", + "38dd56", + "ff3a0e", + "d32a09", + "903707", + "6e3206", + "552e05", + "e8705b", + "f38b7c", + "e4a499", + "667af9", + "648df9", + "7cc4f2", + "97f2fb", + "a3efd0", + "87e4d9", + "71bde4", + "ff1a0b", + "f78a18", + "2b83f6", + "d62149", + "834398", + "ffc925", + "d9391f", + "bd2d24", + "ff7216", + "254efb", + "e5e5de", + "00a556", + "c5030e", + "abf131", + "fb4694", + "e7a32c", + "fff0ee", + "009c59", + "0385eb", + "00499c", + "e11833", + "26b1f3", + "fff0be", + "d8dadf", + "d7d3cd", + "1929f4", + "eab118", + "0b5027", + "f9f5cb", + "cfc9b8", + "feb9d5", + "f8d689", + "5d6061", + "76858b", + "757576", + "ff0e0e", + "0adc4d", + "fdf8ff", + "70e890", + "f7913d", + "ff1ad2", + "ff82ad", + "535a15", + "fa6fe2", + "ffe939", + "ab36be", + "adc8cc", + "604666", + "f20422", + "abaaa8", + "4b65f7", + "a19c9a", + "58565c", + "da42cb", + "027c92", + "cec189", + "909b0e", + "74580d", + "027ee6", + "b2958d", + "efad81", + "7d635e", + "eff2fa", + "6f597a", + "d4b7b2", + "d18687", + "cd916d", + "6b3f39", + "4d271b", + "85634f", + "f9f4e6", + "f8ddb0", + "b92b3c", + "d08b11", + "257ced", + "a3baed", + "5fd4fb", + "c16710", + "a28ef4", + "3a085b", + "67b1e3", + "1e3445", + "ffd067", + "962236", + "769ca9", + "5a6b7b", + "7e5243", + "a86f60", + "8f785e", + "cc0595", + "42ffb0", + "d56333", + "b8ced2", + "b91b43", + "f39713", + "e8e8e2", + "ec5b43", + "235476", + "b2a8a5", + "d6c3be", + "49b38b", + "fccf25", + "f59b34", + "375dfc", + "99e6de", + "27a463", + "554543", + "b19e00", + "d4a015", + "9f4b27", + "f9e8dd", + "6b7212", + "9d8e6e", + "4243f8", + "fa5e20", + "f82905", + "555353", + "876f69", + "410d66", + "552d1d", + "f71248", + "fee3f3", + "c16923", + "2b2834", + "0079fc", + "d31e14", + "f83001", + "8dd122", + "fffdf4", + "ffa21e", + "e4afa3", + "fbc311", + "aa940c", + "eedc00", + "fff006", + "9cb4b8", + "a38654", + "ae6c0a", + "2bb26b", + "e2c8c0", + "f89865", + "f86100", + "dcd8d3", + "049d43", + "d0aea9", + "f39d44", + "eeb78c", + "f9f5e9", + "5d3500", + "c3a199", + "aaa6a4", + "caa26a", + "fde7f5", + "fdf008", + "fdcef2", + "f681e6", + "018146", + "d19a54", + "9eb5e1", + "f5fcff", + "3f9323", + "00fcff", + "4a5358", + "fbc800", + "d596a6", + "ffb913", + "e9ba12", + "767c0e", + "f9f6d1", + "d29607", + "f8ce47", + "395ed1", + "ffc5f0", + "cbc1bc", + "d4cfc0" + ], + "images": { + "bodies": [ + { + "filename": "body-bege-bsod-bodies", + "data": "0x0015171f090e020e020e020e02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02" + }, + { + "filename": "body-bege-crt-bodies", + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + }, + { + "filename": "body-blue-sky-bodies", + "data": "0x0015171f090e040e040e040e04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04" + }, + { + "filename": "body-bluegrey-bodies", + "data": "0x0015171f090e050e050e050e05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05" + }, + { + "filename": "body-cold-bodies", + "data": "0x0015171f090e060e060e060e06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06" + }, + { + "filename": "body-computerblue-bodies", + "data": "0x0015171f090e070e070e070e07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07" + }, + { + "filename": "body-darkbrown-bodies", + "data": "0x0015171f090e080e080e080e08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08" + }, + { + "filename": "body-darkpink-bodies", + "data": "0x0015171f090e090e090e090e09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09" + }, + { + "filename": "body-foggrey-bodies", + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + }, + { + "filename": "body-gold-bodies", + "data": "0x0015171f090e0a0e0a0e0a0e0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a" + }, + { + "filename": "body-grayscale-1-bodies", + "data": "0x0015171f090e0b0e0b0e0b0e0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b" + }, + { + "filename": "body-grayscale-7-bodies", + "data": "0x0015171f090e0c0e0c0e0c0e0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c" + }, + { + "filename": "body-grayscale-8-bodies", + "data": "0x0015171f090e0d0e0d0e0d0e0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d" + }, + { + "filename": "body-grayscale-9-bodies", + "data": "0x0015171f090e0e0e0e0e0e0e0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e" + }, + { + "filename": "body-green-bodies", + "data": "0x0015171f090e0f0e0f0e0f0e0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f" + }, + { + "filename": "body-gunk-bodies", + "data": "0x0015171f090e100e100e100e10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10" + }, + { + "filename": "body-hotbrown-bodies", + "data": "0x0015171f090e110e110e110e11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11" + }, + { + "filename": "body-magenta-bodies", + "data": "0x0015171f090e120e120e120e12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12" + }, + { + "filename": "body-orange-yellow-bodies", + "data": "0x0015171f090e130e130e130e13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13" + }, + { + "filename": "body-orange-bodies", + "data": "0x0015171f090e140e140e140e14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14" + }, + { + "filename": "body-peachy-B-bodies", + "data": "0x0015171f090e150e150e150e15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15" + }, + { + "filename": "body-peachy-a-bodies", + "data": "0x0015171f090e160e160e160e16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16" + }, + { + "filename": "body-purple-bodies", + "data": "0x0015171f090e170e170e170e17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17" + }, + { + "filename": "body-red-bodies", + "data": "0x0015171f090e180e180e180e18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18" + }, + { + "filename": "body-redpinkish-bodies", + "data": "0x0015171f090e190e190e190e19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19" + }, + { + "filename": "body-rust-bodies", + "data": "0x0015171f090e1a0e1a0e1a0e1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a" + }, + { + "filename": "body-slimegreen-bodies", + "data": "0x0015171f090e1b0e1b0e1b0e1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b" + }, + { + "filename": "body-teal-light-bodies", + "data": "0x0015171f090e1c0e1c0e1c0e1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c" + }, + { + "filename": "body-teal-bodies", + "data": "0x0015171f090e1d0e1d0e1d0e1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d" + }, + { + "filename": "body-yellow-bodies", + "data": "0x0015171f090e1e0e1e0e1e0e1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e" + } + ], + "accessories": [ + { + "filename": "01-hokkaido-crab-accessories", + "data": "0x0019161c0d0113010001130100011301000113010001130100011301000108011301080100011301000200051302000100011301000313010001130100" + }, + { + "filename": "01-hokkaido-melon-accessories", + "data": "0x0018131a0e014203000142012203420122010003220100" + }, + { + "filename": "01-hokkaido-sheep-accessories", + "data": "0x0018141d0e020001c1010e020003c10300010e0100010e0300040001c1010e020003c101000200010e0100010e0100" + }, + { + "filename": "02-aomori-jade-accessories", + "data": "0x0015141e090400010205000102050001020300010201000500017f0102011c01020101010004000101010001dd0102019b0100017f0700015203000b000b000b000b0002010900" + }, + { + "filename": "02-aomori-squid-accessories", + "data": "0x0018151d0f0300010802000100010102080101010002000208020001010100010801330200010001010123013301000101010101000101010001010100" + }, + { + "filename": "02-aomori-tsugaru-shamisen-accessories", + "data": "0x0018121c0f010001360123012301360123010001360100020b0100020b0100" + }, + { + "filename": "03-iwate-egg-accessories", + "data": "0x0018141b100100020101000101021e01010101021e0101010002010100" + }, + { + "filename": "03-iwate-fujiwara-accessories", + "data": "0x0017141c0f0100012303000200012302000200015d02000100026701cd0100046701310101013101670201" + }, + { + "filename": "04-miyagi-beeftongue-accessories", + "data": "0x0019131a0e013501a1013501a10135018501a1018501a10135" + }, + { + "filename": "04-miyagi-matsushima-accessories", + "data": "0x0016171f0c0600022901010100010104000301012903000b000b00025c0100025c01000129010003a205b106000300015c0100015c01290100025c0100030004b1010002b1010001a20a00020002a2010002290400" + }, + { + "filename": "04-miyagi-zunda-accessories", + "data": "0x0019131b10024e0100034e014e0101014e" + }, + { + "filename": "05-akita-fireworks-accessories", + "data": "0x0015171f0c060001c7010001c70200030001c101c7020001c1010001c10100050001c7010001c7020001c7020001c101c7050001c70100040001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c703000100014a010001c1010001c7020001c702000400014a010001c1020001c101000300014a0100014a05000400014a0600" + }, + { + "filename": "05-akita-hatahata-accessories", + "data": "0x0018141b0e011005000100015d021001230110011001000101025d01010300015d0200" + }, + { + "filename": "05-akita-raspberry-accessories", + "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e02b906b9020002b90200" + }, + { + "filename": "06-yamagata-cherry-accessories", + "data": "0x0018131c0e02c0030001c0010001c0020001c0020001c0010002410100024101e40141010001e40141" + }, + { + "filename": "06-yamagata-lafrance-accessories", + "data": "0x0019131c10010001840100010001840122022201c601de0222" + }, + { + "filename": "06-yamagata-shogi-accessories", + "data": "0x0018131b10010001230100010002230123020001000223" + }, + { + "filename": "07-fukushima-akabeko-accessories", + "data": "0x0019141b0f01230133010101230100013301230133010101330133010001330200" + }, + { + "filename": "07-fukushima-inawashiro-accessories", + "data": "0x0018171e0c030001e0010001a2019504000200029203a202950200039208a20b000b000400010101230500030002010600" + }, + { + "filename": "07-fukushima-train-accessories", + "data": "0x0018131b0f015802570158010e0285010e0485016a0258016a" + }, + { + "filename": "08-ibaraki-bellpepper-accessories", + "data": "0x0018121b0f01dd01e101dd01dd010f01dd01dd010f01dd0100010f0100" + }, + { + "filename": "08-ibaraki-natto-accessories", + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + }, + { + "filename": "08-ibaraki-rokkakudo-accessories", + "data": "0x0017171f09070001860400029107000186060004000161050001860300010001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d408000a0002910200050002910700" + }, + { + "filename": "09-tochigi-gyoza-accessories", + "data": "0x0018141b0e0100013401000134010001340134012501340125013401250188022501880225010001340100013401000134" + }, + { + "filename": "09-tochigi-lemon-accessories", + "data": "0x0018131c100152020103c701c7015201c7010101c701010352" + }, + { + "filename": "09-tochigi-shimotsukare-accessories", + "data": "0x0019131b0f016001930150014901500187019301600193014901ce0187" + }, + { + "filename": "10-gunma-akagiyama-accessories", + "data": "0x0019171b0c0100014901bf020002bf020001bf014901bf0149011b014901460149011b014901bf011b01460b06" + }, + { + "filename": "10-gunma-tomiokasilkmill-accessories", + "data": "0x001717190902320137033201370332013703320137010102b4010102b40101013701b4010101b4013701010232010003320137033201370332" + }, + { + "filename": "10-gunma-yakimanjyu-accessories", + "data": "0x0017161e0e04000236011101220300023401230101010003000136011101340136010002000134011101230101020001000134013601340101013602000100011101340123013403000100012201360134040001220700" + }, + { + "filename": "11-saitama-icicle-accessories", + "data": "0x0015171c090e0104000101010001010100010101000101010001010100040001e0010001010100010101000101010001010100060001010100010101000101010001e0010006000101010001e001000101030006000101030001e00300060001e0030001e00300060001e00700" + }, + { + "filename": "11-saitama-soka-senbei-accessories", + "data": "0x0018131b0f0100016001e6010002e601110160011103e60100011101e60100" + }, + { + "filename": "12-chiba-inubosaki-accessories", + "data": "0x0018171f0d0128010001280100042802000700010102000700010102000600040f04000154010104b105000254010102b103000354010102b101000354010103b10300" + }, + { + "filename": "12-chiba-orca-accessories", + "data": "0x0018151c0d0100010d0600020d0200010d03000200050d01000300020d020b01000100025601000156010d01000156" + }, + { + "filename": "12-chiba-peanuts-accessories", + "data": "0x0018131b100100016001d8010002600260010001d801600100" + }, + { + "filename": "13-tokyo-tower-accessories", + "data": "0x0016151d0e060001da02000141020001da010002000101030001da02000141020001da010001000301030001000341030001000141010001410300014101000141010001410200" + }, + { + "filename": "13-tokyo-yamanote-accessories", + "data": "0x0018141c0f010001c0010101c00100010103bc010101c003bc01c00101010001bc01000101010001c0010101c00100" + }, + { + "filename": "14-ibaraki-natto-accessories", + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + }, + { + "filename": "14-kanagawa-baybridge-accessories", + "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010001a201a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" + }, + { + "filename": "14-kanagawa-yacht-accessories", + "data": "0x0018141c100100015402000254014301000254024302000243037f0100" + }, + { + "filename": "15-nigata-edamame-accessories", + "data": "0x0019141b0e0200014e0200014e0100014e01c00100014e01c0011e01c00100011e01c00100" + }, + { + "filename": "15-niigata-riceear-accessories", + "data": "0x0018131d0f02000128010001000128020001c001280100012801c001000128010002c0020002c00200" + }, + { + "filename": "16-toyama-kutabe-accessories", + "data": "0x0019141e030100010e0200030e0a00010e0200020e0201010e0400011803bf0188020e0100020e0201010e0400011801bf020e01bf0100060e0500011804bf0100060e0a000100010e0100010e0100020e0a00" + }, + { + "filename": "16-toyama-shiroebi-accessories", + "data": "0x0018131a0e0400010e010002ba010e01ba01ba0400" + }, + { + "filename": "16-toyama-tateyama-accessories", + "data": "0x0019171c090100017f020001a2017f0300027f01a20100017f027f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" + }, + { + "filename": "17-ishikawa-kotoji-accessories", + "data": "0x0018131c0e02000172020001000372010002000158020001000158010001580100015803000158" + }, + { + "filename": "17-ishikawa-kutani-kaga-gosai-accessories", + "data": "0x0018121a0f0118010f01c401a201e0018001c4010f0118" + }, + { + "filename": "17-ishikawa-oyster-accessories", + "data": "0x0017151c0e030001a0026b01a002000301016b01a0010001a0040101a001000401015d010001a00201015d01990200019901c301990400" + }, + { + "filename": "18-fukui-echizen-crab-accessories", + "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b80414020001000114010001b80214010001b80100" + }, + { + "filename": "18-fukui-heshiko-accessories", + "data": "0x0019131a0f018303e3029c0185019c" + }, + { + "filename": "18-fukui-yokan-accessories", + "data": "0x0018131b0e02000385020003850200038502570385" + }, + { + "filename": "19-yamanashi-fuji-accessories", + "data": "0x0017171e0c0600020b03000500020b01eb010b0200030007eb01000beb0b58010007580300020001e0015802e00500030002e0030002a90100" + }, + { + "filename": "19-yamanashi-grape-accessories", + "data": "0x0018121b0e0200019a01220100019a0112019a019a0112016e01120112016e01450100" + }, + { + "filename": "20-nagano-kappa-accessories", + "data": "0x0018131a0e020f0201010f0100013e0123013e01000100023e022a" + }, + { + "filename": "20-nagano-oyaki-accessories", + "data": "0x0018121b0e01b0011b02000157011b01b0011b0157028a0157010002570100" + }, + { + "filename": "21-gifu-gero-accessories", + "data": "0x0018141c0e020001010100010101000100010101000101020001c8013d0101013d010101c801c8043d01c8010004c80100" + }, + { + "filename": "21-gifu-gohei-mochi-accessories", + "data": "0x0019141b0d020004110100020101600111011a0111010102000260021a0100" + }, + { + "filename": "21-gifu-sarubobo-accessories", + "data": "0x0018131d0f010002230100012302440123017102440171010002230100010002230100017102000171" + }, + { + "filename": "21-gifu-ukaibody-accessories", + "data": "0x0015171f090592075402920592075402920592075402920592075402920292010002920754029202920100029207540292029201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" + }, + { + "filename": "22-shizuoka-fuji-accessories", + "data": "0x0017171d0c090002e0020003e0020001010300060002320101020003e0020005320100040001e10632020001dd04e1043204dd07e1" + }, + { + "filename": "23-aichi-misodengaku-accessories", + "data": "0x0019141c0e03350157020001570235015702600335016302000163023501630260" + }, + { + "filename": "23-aichi-oguratoast-accessories", + "data": "0x0018131c0e0293028401930193028401b80193019301b8028401930193018401b8018401930593" + }, + { + "filename": "23-aichi-tebasaki-accessories", + "data": "0x0017131a0e010001480300014804000548010003480100" + }, + { + "filename": "24-mie-iseebi-accessories", + "data": "0x0017151e0d02000132020001320200010001320100023201000132010001000132010002320100013201000132021802320218013201320100011802b40118010001320100011801000232010001180100030002b40300020001180132011801320200" + }, + { + "filename": "24-mie-mochi-accessories", + "data": "0x0019121a0f018401b80184018401b80184" + }, + { + "filename": "25-shiga-funazushi-accessories", + "data": "0x0018151a0e01420100013701000137020001420100014201000137010001370142010001420100014201000142" + }, + { + "filename": "25-shiga-hieizan-accessories", + "data": "0x0018171b090700020f05000500070f0200020f01000b0f028d01000b8d" + }, + { + "filename": "26-kyoto-daimonji-accessories", + "data": "0x0017161d0d0300011405000200011401490114040003140149031402000749020002000114014901140400021401490100014904140249030003490100" + }, + { + "filename": "26-kyoto-yatsuhashi-accessories", + "data": "0x0018131a0e02000157020001000157018601570100015702860257" + }, + { + "filename": "27-osaka-cheesecake-accessories", + "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b015707570100015701b7015701b701570100" + }, + { + "filename": "27-osaka-jinbezame-accessories", + "data": "0x0018161c0d010001a2020001a20400010601a2010002a20400020001a2010602a20106020002a2012302a20106012302a202000206025f01060200" + }, + { + "filename": "27-osaka-owarai-accessories", + "data": "0x0017141c0e0100013301000133020001000533013301000133010001330100010005330300013302000100023301000233" + }, + { + "filename": "28-hyogo-akashiyaki-accessories", + "data": "0x0019141b0f02000260010001000160015d016001ae015d016002ae0160" + }, + { + "filename": "28-hyogo-jst-meridian-accessories", + "data": "0x0017161c0d0132080001320800013202000132050002000232010002320100013201000232020001320300040002320300" + }, + { + "filename": "28-hyogo-tower-museum-accessories", + "data": "0x0017171e0c020001010800020001490200013f0500020001c20200026f0100013e0200020001490100013e016f023e0300020001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" + }, + { + "filename": "29-nara-kakinohasushi-accessories", + "data": "0x0019141c0f010001c0011b01c0011b0100011b02c0011b019501a2019501a2010002cc019701cc0100" + }, + { + "filename": "29-nara-narazuke-accessories", + "data": "0x0019121a0f03b801b8010001b8" + }, + { + "filename": "30-wakayama-meharizushi-accessories", + "data": "0x0018141c0e010004e1010002e1030101e102c00101021b010102e1030101e1010002e101c001e10100" + }, + { + "filename": "30-wakayama-mikan-kaki-accessories", + "data": "0x0018121a0f03c201c201e101c203c2" + }, + { + "filename": "30-wakayama-nankoume-accessories", + "data": "0x001a151b0d024e010002a60100029c024e010002a60100029c" + }, + { + "filename": "31-tottori-dummy-accessories", + "data": "0x001a151b0d024e010002a60100029c024e010002a60100029c" + }, + { + "filename": "32-shimane-dummy-accessories", + "data": "0x001a151b0d024e010002a60100029c024e010002a60100029c" + }, + { + "filename": "33-oakayama-mamakari-accessories", + "data": "0x0019151b0e01a2019d01a2019d01a201000157019d01a2019d01a2019d01060100050601000157" + }, + { + "filename": "33-okauama-muscat-accessories", + "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" + }, + { + "filename": "33-okayama-denim-jacket01-accessories", + "data": "0x0015171f090354049201000492025404540392010103920354055401920354019204540e540754010106540a54019201010192015402540100075403920154025401000454010102540392015402540100085401920254025401000b5402540100045401010654" + }, + { + "filename": "33-okayama-denim-jacket02-accessories", + "data": "0x0015171f0903540392040003920154045402920400029202540554019204000192035406540400045405540101040004540654040001540192010101920254010003540400015403920254010002540101040001540392025401000354040002540192015402540100035404000454025401000254010104000454" + }, + { + "filename": "33-okayama-denim-jacket03-accessories", + "data": "0x0015171f09035302540700025403530254070002540453025405000254015306530500035306530500010102530653050003530253010003530500010102530253010003530500035302530c0002530c0002530c00" + }, + { + "filename": "33-okayama-kibidango-accessories", + "data": "0x0018131b0f010002570100015703eb04eb010002eb0100" + }, + { + "filename": "33-okayama-momotaro-accessories", + "data": "0x0015171f080100054d010105040101024d0100054d010105040101024d01000204034d010105040101024d01000204034d010105040101024d010002040100024d010105040101024d010002040100024d010105040101024d01000204010001eb014d010105740101024d01eb020401eb010a01eb010105740101024d01eb020402eb014d010105540101024d01eb020402eb014d010105540101024d01eb020402eb014d010105540101024d" + }, + { + "filename": "33-okayama-peach02-accessories", + "data": "0x0018151c0e0300015f03000200035f02000100055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" + }, + { + "filename": "33-okayama-retainer-accessories", + "data": "0x0015171f09054d010105040101024d054d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" + }, + { + "filename": "34-hiroshima-battleship-accessories", + "data": "0x0019171f09060001d70700030001d7010002d7070001d7020004d7010001d7010001d7020001d702d701000ad70100024801000b4802a201000ba202a201000ba2" + }, + { + "filename": "34-hiroshima-lemon-accessories", + "data": "0x0019131c0f0100022901220429042903290100" + }, + { + "filename": "34-hiroshima-oyster-accessories", + "data": "0x0018131c0e020001d901060101010001060288010101e9038801010106020c0101010003010200" + }, + { + "filename": "34-hiroshima-rice-scoop-accessories", + "data": "0x0018131c10036003600360010001600100010001600100" + }, + { + "filename": "34-hiroshima-shrine-accessories", + "data": "0x0018171f09040008770200050006bf0300060001bf020001bf0400050006bf0300060001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" + }, + { + "filename": "34-hiroshima-wani-accessories", + "data": "0x0017141d0d04560300015602000156030003000156030001000256040003000456070003000456" + }, + { + "filename": "35-yamaguchi-kintaikyo-accessories", + "data": "0x001b171f09010001ca020002ca010002ca010002ca010001ca01ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188013f023f01000b3f023f01000b3f" + }, + { + "filename": "35-yamaguchi-motonosumiinari-accessories", + "data": "0x0017171f090e53055303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" + }, + { + "filename": "35-yamaguchi-white -snake-accessories", + "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" + }, + { + "filename": "35-yamaguhchi-tsunoshima-big-bridge-accessories", + "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" + }, + { + "filename": "36-tokushima-awaodori-accessories", + "data": "0x0018131b0f0220015a01010100022301000100025f01000100025f0100" + }, + { + "filename": "36-tokushima-citrus-sudachi-accessories", + "data": "0x0018131c0e0100035c0100015c010101c70101015c015c01c7010101c7015c015c010101c70101015c0100035c0100" + }, + { + "filename": "36-tokushima-narutomaki-accessories", + "data": "0x0017141c0d02000301020001000101034f010101000101014f0301014f01010101014f0101014f0101014f01010101034f0101014f0101010005010100" + }, + { + "filename": "37-kagawa-oliveoil-accessories", + "data": "0x0017121c0f010001ac01000100015c0100035c015c01c6015c015c01c6015c035c" + }, + { + "filename": "38-ehime-dango-accessories", + "data": "0x0018131c0e0300021b020002a6011b0100027001a60100010001570170020001570400" + }, + { + "filename": "38-ehime-juice-accessories", + "data": "0x0018131f0c02000106018d01060200010602000140030001060140040601010106010003060100010606000142060001420600014206000142" + }, + { + "filename": "38-ehime-mandarin-orange-accessories", + "data": "0x0019121a0f014201e101420342" + }, + { + "filename": "38-ehime-turt-accessories", + "data": "0x0018141c0e0100045701000157037002570157017001570270015701570270015701700157010004570100" + }, + { + "filename": "39-kochi-seared-bonito-accessories", + "data": "0x0019131b0f0378010001780294017801780394" + }, + { + "filename": "40-fukuoka-mentaiko-accessories", + "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf016a026a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" + }, + { + "filename": "40-fukuoka-umegaeda-accessories", + "data": "0x0018131c0e010003c1010002c1019702c101c1019701c1019701c101c1029702c1010003c10100" + }, + { + "filename": "41-saga-saga-accessories", + "data": "0x0017151d0e010002560200015601000100015602000156010001560256020001560100015607000156040001560100015601000156010001560100015603560100015601000156" + }, + { + "filename": "41-saga-yobuko-squid-accessories", + "data": "0x0017131c0e020001510200010003510100010003510100055101000123015101230100025101000251" + }, + { + "filename": "42-nagasaki-castella-accessories", + "data": "0x0018131b0f04ae0428042804ae" + }, + { + "filename": "42-nagasaki-gunkanto-accessories", + "data": "0x0016171f09020001010b000e00010001010c00050002620200016204000400036201000262040001000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" + }, + { + "filename": "42-nagasaki-milkshake-accessories", + "data": "0x0018121d0f014d02000157017101570357037f0100017f0100037f" + }, + { + "filename": "43-kumamoto-hitomojiguruguru-accessories", + "data": "0x001913190e014e01e101c001e1014e" + }, + { + "filename": "43-kumamoto-ikinaridango-accessories", + "data": "0x0018131b0e01000351010001d401b8028401d401d40129012a012901d4010003d40100" + }, + { + "filename": "44-oita-toriten-accessories", + "data": "0x0019121b0f01000293039301930200" + }, + { + "filename": "44-oita-yaseuma-accessories", + "data": "0x0018121a0e026002880288026002600288" + }, + { + "filename": "45-miyazaki-mango-accessories", + "data": "0x0018131a0e0100014601e601460100014601e6014601e601460100014601e601460100" + }, + { + "filename": "45-miyazaki-takachihokyo-accessories", + "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e10127010501270106010101050127012701050201013d010501270127053d0127" + }, + { + "filename": "46-kagoshima-senganen-accessories", + "data": "0x0016171f0907000201050005000101019d0500020103000461070001000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" + }, + { + "filename": "46-kagoshima-shochu-accessories", + "data": "0x0017121c0f0100012301000100013401000334017f01b7017f01b7027f0334" + }, + { + "filename": "47-okinawa-fish-accessories", + "data": "0x0017171d0d012401000224060001000224010001240500012401000224010001280100022801000600022801000128019b0100029b010001280100022801000100029b0100019b0500019b0100029b0600" + }, + { + "filename": "47-okinawa-satokibi-accessories", + "data": "0x0018161c0d0100011e010001c00100011e0100011e0100010001c00100011e010001c00100011e01c001c0011e010001c00100011e010001c00100010001c0010001c0010001c00100011e01000100011e0100011e0100011e0100011e0100" + }, + { + "filename": "47-okinawa-sukugarasu-accessories", + "data": "0x0018141d0e0200020102000100040101000101010e02b101ef01010101039d0201010004010100020002010200" + } + ], + "heads": [ + { + "filename": "01-hokkaido-goryokaku-heads", + "data": "0x00021b16040b0002540a000a00045409000900025401c001dd025408000800025401c001dd01c001dd025407000700035401dd02c001dd0254018706000500035402c001dd03c001dd0187035404000300035401c0015401c002dd03c0018702dd045402000100035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd025401000300025401c001dd02c00287029204c002dd01c00254010003000187015402c001dd03c0029203c001dd02c0025402000200015402870154018701dd08c001dd01c0025403000100015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c0025404000100025401c0025401c001dd02c004dd02c001dd01c0015404000300035401c001dd01c001dd04c001dd01c001dd01c0025403000400025401c002dd01c0045401c002dd01c0025403000400025401dd02c0065402c001dd025403000500055404000554040005000354080003540400" + }, + { + "filename": "01-hokkaido-ishikari-heads", + "data": "0x00031c15040400067f0200017f0b000200037f0400017f0300027f0100017f07000100017f0200037f0200010d037f02e1010003a201e004000200027f0100017f020d06e103a203e004000400020d015702e101a2019501a201e103a2010d02e0019504000300020d015702a2019501ce029704a204e0010d03000200020d019501a201ce029703ce03a205e0020d02000100020d015704ce01cd02ce01cd02a206e00157020d01000100010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d010e010e010d01221057034e010d010e010e010d03010e570149024e010d010e0100010d03010e570249014e010d01000100010d01220101015701490d570149014e020d01000200020d034901570434025705010157020d02000300020d01490157023401af033405010157020d03000400030d033402af01340501020d04000600020d05340257030d060009000334030d0900" + }, + { + "filename": "01-hokkaido-tokeidai-heads", + "data": "0x00011b14060a00010b0a00090002a101370900070002a1013701e9013701a10137070007000237030102370700080001e901010196010101e908000800015d01960201015d0800080002e9013702e90800080001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033702a102a1013702a10237010b01e903ca01e9010b01a1023702a10237023702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e901000100015d016f035d016f035d010b035d016f035d016f015d01000100080b013701a10137080b01000100035d010b035d02a10337035d010b035d0100010001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e901000100015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d0100010003e9010b04e9030b04e9010b03e90100" + }, + { + "filename": "02-aomori-apple-heads", + "data": "0x00051915080800011b080004000455011b045504000200045502a6011b02a60455020001000655011e011b011e025501010355010001000a5501010455010011551155115511551155115511550100025501a60c55010001000f5501000200065502a60555020003000b550300050007550500" + }, + { + "filename": "02-aomori-dogu-heads", + "data": "0x00021814080400080a04000400020a0236010a0236010a040004000136030a01ca020a013604000600020a0136010a06000500010a04ca010a05000500030a01ca020a0500010001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a01000500010a01ca030a01ca0500050001ca020a018a010a01ca05000500010a01ca010a01ca020a0500050006ca05000500060a0500050001ca040a01ca05000600010a02ca010a0600" + }, + { + "filename": "02-aomori-goldfish-nebuta-heads", + "data": "0x000119170409000333090008000533080007000233010101330101023307000700033301010333070005000b3305000400053301010133010105330400030002330101043301010433010102330300030003330101033303bf01330101033303000300053307bf033303000100053303bf010103bf010103bf0333010005330dbf03330233010101330fbf0233033301010fbf023301000233022301010bbf0101022301000200013302230dbf02230100040001230dbf01230200040001bf012304bf032304bf012301bf020005000123030101bf010d01b4010d01bf03010123030006000301010d0301010d030104000200010101000201010001330301012303010133010002010100010103000101010001010100013302000123010101230200013301000101010001010100030002010d0002010100050001010b0001010300" + }, + { + "filename": "03-iwate-moriokamen-heads", + "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" + }, + { + "filename": "03-iwate-nanbutekki-heads", + "data": "0x00031b14060700050e09000400030e0500030e06000300010e0b00010e05000200010e0d00010e04000200010e0d00010e04000200010e0600010e0600010e04000300010e0100090e0100010e050003000d0e050002000f0e04000100110e03000100110e0100020e150e140e0100140e01000100130e01000100050e0163010e0163010e0163010e0163060e020002000f0e040003000d0e0500" + }, + { + "filename": "04-miyagi-datemasamune-heads", + "data": "0x00011d150517000128150002280100120002010128030008000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e080003000528030103280192010e019207000100020e01000192010e0192020103280192010e0192010e0192010e0100020e03000100010e0100010e0192010e0b92020e0100010e03000200020e0292030e0192010e0192010e0192030e0192020e04000200030e0192020e0192020e0192020e0192020e0192020e04000300010e01920188010e0192030e0192030e0192020e019205000300010e01920c880192010e05000300010e01540c880154010e05000300012801540c8801540128050002000128010e01540788016004880154010e012804000200020e01540788016004880154020e040001000128020e01540788016004880154020e012803000100030e01540588026004880154040e03000200030e01540388042303880154030e04000400020e025406880254020e0600080006540a00" + }, + { + "filename": "04-miyagi-hoya-heads", + "data": "0x0004191407050001710194017102000371050005000394020003940500050001710194017102000371050004000a71040002000e71020002000e710200010010710100010010710100127112711271127112711271010006e405ae05e40100010010e4010002000ee40200" + }, + { + "filename": "04-miyagi-tanabata-heads", + "data": "0x00041c160406000de1010001bf0300050001e1010001010400010104000101010002e1010001560100040001e1020001010400010104000101020001c701e10200030001e102000356020003bf020003c7030001bf0100020001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c7020001560100010001e10300055605bf05c70400010001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" + }, + { + "filename": "05-akita-akitainu-heads", + "data": "0x00031a14021100012b06001000022b010105001000032b020103000f00042b01010123020101800e00042b06010c00062b0301025f01000b00072b0501015f0a00092b0201030009000b2b010103000200040103000b2b0101030001000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b050001000201032b0101052b020102000101022b05000200040101000101042b010103000201012b05000800032b0301030003010400" + }, + { + "filename": "05-akita-magewappa-heads", + "data": "0x00041a15040200108e0400010012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de0200010001de0788016001880184068801de0300020007de01d801de018406de04001600030012c90100020014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de018803000888016001880184078801000400018e01de018e02de018e04de018e02de018e01de018e0200" + }, + { + "filename": "05-akita-namahage-heads", + "data": "0x00021a16040700014109000141040007000241070002410400080002410500024105000600062301000523040005000123060e0123050e0123030004000123010e0623010e0523010e0123020003000123010e0123010e0123040e0123040e0223010e0123010003000123010e0123010e022307410323010e0123010003000123010e0123010e014103230318032301410123010e0123010003000123010e0123010e034102230141022303410123010e0123010002000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e0123010001000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e0123010001000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e0123010001000123010e0123010e012301410101012301cf041801cf0123010101410123010e0123010001000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" + }, + { + "filename": "06-yamagata-hanagasa-heads", + "data": "0x00021b170508000641080006000241065702410600040002410a5702410400030001410a5701320141025701410300020001410157013201410132025701c603570132024101320257014102000200014101570441025701dd025703410132014101570141020001000141015701320341025701dd045701410132014103570141010001000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd085701410141035701c6035702dd0341085701410141075701dd024101320241035701410132025701410141035701410357024101320141013201410257044101570141014102570132024102570332024101320141015702410132014101570141014102570141013201410132025702410232014102570132024101320157014101000141015701320241013203570341015701280257023201570141010001000141025701410132075701280123012804570141010002000141035701c6075701280123012802570141020002000141065701320341013201570128012301280157014102000300014105570141013201410132035701280157014103000400024104570141013204570241040006000241065702410600080006410800" + }, + { + "filename": "06-yamagata-imoni-heads", + "data": "0x00041b14050800060d08000600020d0600020d06000400020d0a00020d04000300010d0e00010d03000200010d0400080e0400010d02000200010d0200020e028501880103028501970185020e0200010d02000100010d0100020e0185021b01970303029702030185020e0100010d01000100010d010e0185030302970203019702e102030385010e010d01000100010d02850288021b0188020b021b0285020b021b0185010d0100010e010d01970203020b030301850397020302e101880185010d010e020e01970203019701030188020303e10103028802970203020e010e038502e10103018802e1028801850203039701030285010e0100020e01e102970285020301880497020b0285020e01000100040e029702e1020301850297021b0185040e01000200050e0285016201bc016201bc01620185050e02000300100e030005000c0e0500" + }, + { + "filename": "06-yamagata-zaookama-heads", + "data": "0x00041d14040a00072702010227040007000b2703010127030005000e27024c0101012702000400022701010c2704010127010003000127020103270a010127024c0101012701000200020102270301073004010127030101270100010102270201019b0b3002010127024c01010127022703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f3003010127020001000201014c01010e3003010127020002000101014c03010a300201014c01010127030003000201014c0b01014c0101014c0101040005000401014c0101014c0101014c0301014c01010600" + }, + { + "filename": "07-fukushima-peach-heads", + "data": "0x00041d16040500020f12000300030f0197010f0100030f0d000100060f0297030f0100020f0a000100030f05b90297030f0197010f09000100020f04b9011902b9020f0297030f0100020f05000100020f04b9011903b9040f0197010f0100030f04000100010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297020f040f05b9040f05b9011902b9040f0d0f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f01000600020f0100050f03b9021903b903000a00030f04b9011903b904000a00010f020003b9011904b90400100003b90600" + }, + { + "filename": "07-fukushima-takizakura-heads", + "data": "0x00021e14021200035f07001000045f01db025f05000c00035f01db035f01b8045f04000a00045f01db045f01b8025f01db015f0100025f01000600025f0200035f01b801db025f0100015f01b8025f01db0100015f02b8015f0500025f01b8015f0200015f010001b8035f0100025f01b8010001db01b8015f01db025f0200055f01b8025f0200015f010001b80400015f04b8015f01db015f01db0100015f01db01b8025f01b8015f01db095f020003b8025f0100015f01db0100015f01db025f02b8025f01b8025f0100035f01b8015f04b80100015f04000300035f01b8025f01b8025f0200035f05b806000100025f0200015f01b80100055f0100015f0100015f03b80100015f01b8045f0100015f01b8035f020001b8015f01db015f01b8015f040003b80100025f01db02b8025f025f02b8015f0100025f010001db020003b8010003b80200025f01db045f01db035f01b8025f01b8015f040006b80300015f01db0100015f01db015f01db0100015f02b8015f010001b8015f050005b8025f0100015f0200015f01db01000200035f02b8045f020005b8065f04000200015f0100035f01db01b8025f06b80100025f01db035f01db03000400025f010001db0200015f010005b80100015f010001db015f0100015f01db03000500015f050005b8040001db0200015f0400" + }, + { + "filename": "07-fukushima-tsurugacastle-heads", + "data": "0x00011a140309000162050001620700080001620700016206000900078907000900078907000800098906000900020103080201070007000b89050006000d89040007000201017f0108010101890101017f0108020105000600068901010689040005000689010101a301010689030006000101017f010107890101017f01010400050005890201017f0201058903000300019406890501068901940100020002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" + }, + { + "filename": "08-ibaraki-anglerfish-heads", + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + }, + { + "filename": "08-ibaraki-hananuki-ravine-heads", + "data": "0x00041c1502040001c006000136019701c601d80197013602bf0700020001c0060001bf01000136019701d801bf01970136060001bf0200060001bf010001bf0100029704d802970800040002c604000136019701d8019702d801970136020002bf0400070001c601000197013601d80188019701bf018801d8013601bf030001c0030009000136019702d8029702d801970136010001c0020002c00100010002c0020001c0010001bf01000136019701bf018802970288019701360700030001c0010002bf01000197013603d8029703d8013601970600080002970388029703880297020001c6010001bf010007000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf0300010002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d802970400010002bf02000136029705d8029705d802970136030005000136019701d802bf02d802bf019701d802bf03d801c60136010001bf01000400019701360197038802bf0188019702bf048801c60197013602bf0100040001970136019706d8029706d8019704bf170002bf0100" + }, + { + "filename": "08-ibaraki-rocket-heads", + "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a26010101000500057f0b2601000400057f0b2602000300057f0b26030002000155047f0b260400024201000155027f020109260500040001550100030107260600030001420100020d0301032601290126017f060002000142010001730100020d03010326017f0700050001420100010d0100027f0201017f08000600017301000155027f0101017f0900030001730200024201000155027f0a000a0001550b00" + }, + { + "filename": "09-tochigi-sanzaru-heads", + "data": "0x00041e1401050003340500043404000434040003000634030006340200063403000300023401af013401af02340100023401af013401af063401af013401af013403000200013401b805af033405af043405af013402000200013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af01340200020002b805af01b8023404af01b801af01340135013405b803000300023401af020e01af01b8023401af04b80135033402b8010e02b8013402000200033403af0434013504b801340135033402af04340100010001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af013403000100063402af0100023405af0135033403af01340400010003340235013401af0234020005af0135043401af013405000200013401350734010005af053401350234040002000b3403af013506340135023403000100063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" + }, + { + "filename": "09-tochigi-strawberry-heads", + "data": "0x000416150602000122020001c0010001c008000300012204c003710500020001c0022204c004710300010005c00571010102710200020002c006710101017101010171020002c0017101c0077101010371010001000e71010001000f7101000f7101000f7101000f7102000e7102000d71010003000c710100040004710146027101460371010005000471024603710200070007710200090004710300" + }, + { + "filename": "09-tochigi-toshogu-heads", + "data": "0x00031f1402060001c70f0001c70600070003c7022901c7012908c70700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30700060002c702e3012701e3012701e3012701e3012701e3012702e302c706000500012902e301c7012901c701e302c7015402c701e303c702e301c705000600016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0600050001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290500090001c7027f01c7037f01c7027f01c70900070002c70154014101c70154014101c70141015401c70141015402c70700010001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014102c701c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" + }, + { + "filename": "10-gunma-kusatsu-heads", + "data": "0x00041d15030600020d0200020d0200020d0200020d06000400013201da028802da028802da028802da028801da013204000400013201da023202da023202da023202da023201da01320400050001da025702da025702da025702da025701da0500060002570200025702000257020002570600060002570200025702000257020002570600030003e6025702e6025702e6025702e6025703e6030003000193013e018d0257023e0257023e0257023e02570101013e0193030003000193013e0101033e018d023e018d033e018d033e018d013e0193030003000193013e028d053e018d043e028d023e018d0193030003000193023e018d013e018d013e018d023e018d013e028d013e018d033e0193030003000193018d053e018d023e018d053e018d013e018d0193030003000193013e018d033e018d063e018d013e018d023e010101930300030001930101033e018d033e018d023e018d023e018d013e018d013e0193030003000193033e018d033e047f018d013e018d043e019303000100027f0193033e018d033e017f023e018d033e027f023e027f0100017f017f0200017f03e6017f0ce6027f01e603000100027f0100027f1400" + }, + { + "filename": "10-gunma-negi-heads", + "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030001dd03dd0100034c03dd0100034c010003dd04dd034c04dd034c03dd0100010003dd034c04dd024c04dd0100010003dd034c04dd024c03dd0200010004dd024c03dd024c04dd0200020003dd024c03dd024c03dd0300030002dd024c03dd024c02dd0400050001dd014c02dd024c01dd06000500074e06000600054e0700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c103ca01c10700060001c1010101c1010101c107000700010101c101010800" + }, + { + "filename": "10-gunma-takasakidaruma-heads", + "data": "0x00061a1607050009410500030002410101014102010741030002000f41020001000141016001410123020102230101022302010123014101e601410100010001e6022301010423010104230101022301e60100014101e60123020103a70101010e010103a7020101230141016001e60160020101a7030101a7010101a7030101a7020101e6016001e60160020101a7030101a7010101a7030101a7020101e6014101e60141020101a7030101a7010101a7030101a7020101e60160014101600223010103a7030103a701010223014101e602410123030101a1010101a1010101a1010101a1030101230241010001410123010e040102410501010e012301410100010002410223010e0123014102010141010e0123010e02230241010002000341010e0123010e0301010e0123010e034102000300014101600141016001410260024101600141016001410300040001e6014101e6024101e6024101e6014101e60400060001e6014101e6014101e6014101e60600" + }, + { + "filename": "11-saitama-tokinokane-heads", + "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" + }, + { + "filename": "11-saitama-whitetiger-heads", + "data": "0x00031a1406020002010b00020103000100040109000401020001000101015f020109000201015f010102000201025f020107000201025f01010200090103e3060102000100030101e3050101e3050101e3010102000200010101e3040101e3030101e3040101e302000200040101e3020101e3010101e3020101e303010200020010010200020001e30e0101e30200020010010200020010010200020001e30e0101e30200020010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" + }, + { + "filename": "12-chiba-loquat-heads", + "data": "0x0003181508070002c9070006000426060004000826040003000a26030002000c26020001000e26010001000e260100102610261026102610261026102601000f26010006260186012601860526010002000626018605260200040008260400050006260500" + }, + { + "filename": "12-chiba-nanohana-heads", + "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a02000300012a0100012a0100022a0100022a0100012a0100022a0100022a06000200012a0100122a0100012a02000200172a01000100062a0122112a01000100152a0122022a01000100032a0122152a1a2a042a01c0102a01c0042a032a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a02000100012a020001c0102a01c0012a0100012a0100" + }, + { + "filename": "12-chiba-soysauce-heads", + "data": "0x000317140b010008b40300020006b4020001850100020006b404000200066f030001850200016f0101046f04000200016f0101046f04000100016f01b8010104b8016f03000100016f010105b8016f0300026f06b8026f0200026f06b8026f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f02b803ea03b8016f0200016f08b8016f02000a6f0200" + }, + { + "filename": "13-tokyo-station-heads", + "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" + }, + { + "filename": "13-tokyo-tower-heads", + "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" + }, + { + "filename": "14-ibaraki-anglerfish-heads", + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + }, + { + "filename": "14-kanagawa-curry-heads", + "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d4043502010100030102000400020105d40535020106000300030105d40635020105000300020106d40635020105000300020106d40635020105000300030105d40635020105000400020104d40635020106000400030103d40635020106000500030101d401860142016003350201070006000401033503010800070008010900090004010b00" + }, + { + "filename": "14-kanagawa-king-heads", + "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" + }, + { + "filename": "15-niigata-sasadango-heads", + "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" + }, + { + "filename": "15-niigata-tulip-heads", + "data": "0x00041a1506090002b90900080004b90800010002b9040006b9040002b9010004b9030006b9030004b905b9010008b9010005b914b914b914b914b914b914b914b9010012b90100010012b90100020010b90200020009b9016a06b90200040006b9016a05b90400060008b90600" + }, + { + "filename": "16-toyama-blackramen-heads", + "data": "0x00041b150508000633080006000a33060004000e3304000300053306850533030002000433038502d3058504330200010003330385018803d303e4048503330100010002330285018803d302010222010103e402850233010003330285018802d3070103e40185033302330285018803d3082202e40285023302330285018802d3092203e4018502330233028503d3080104e4018502330333018504d3062204e40185033301000233028504d3040104e4028502330100010003330185018805d3078503330100020003330185018803d3028503e402850333020003000333048503e40385033303000400043306850433040006000a330600" + }, + { + "filename": "16-toyama-kutabe-heads", + "data": "0x00031a17010d00060e06000b000a0e04000400010e04000e0e02000300010e04000f0e02000300020e0300100e01000300030e0200050e0501060e01000400070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e0401030e0a0e0701010e0401030e0a0e0501020e0501030e0a0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e01000500010e1300" + }, + { + "filename": "16-toyama-raicho-heads", + "data": "0x00031d15021200047f05001100077f03001100047f020e017f010e02000600010f0a00077f020e0100050001dd010f01dd0800077f0400050001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f04000100010e017f0200010f01dd017e107f03000100017f020e157f02000200177f02000200177f02000300167f02000300157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e0300010002dd017e010f0300027f0400027f0500010f017e02dd02000300010f037e0100027f010e0300027f010e0300027e010f0400" + }, + { + "filename": "17-ishikawa-curry-heads", + "data": "0x00071c1504060001010172020108720600040003720ab8037204000300027201b80225013403250234022502b8022201720300020002720325013401250134012502340125013402250422017202000100027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b80172017201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b80172027201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b802720100020003720fb8027202000300037204b8036406b8027203000500037208b80372050007000a720700" + }, + { + "filename": "17-ishikawa-jibuni-heads", + "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b8032302000300032301de0123038301b8012301de032303000400032301de052301880223040006000223018801de022301de01230600" + }, + { + "filename": "17-ishikawa-kinpaku-heads", + "data": "0x000518150705a6076d05ea03a60b6d03a60aa6066d01ea09a6086d07a60a6d10a6016d11a611a604ea0da611a6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" + }, + { + "filename": "18-fukui-dinosaur-heads", + "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b02000b0001e8011b01e8011b01e8011b01e80200071b011b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a03000100011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a04000200021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a04000300041b01e8011b01e8051b01e8061b05000400022a071b01e8081b05000600022a051b01e8081b05000800012a091b022a0100041b02000900032a021b01e8032a09000c00031b0c000d00021b0c000e00011b0c000e00021b0b00" + }, + { + "filename": "18-fukui-sabae-glasses-heads", + "data": "0x00091c1206030004710800047103000100027102060201027104000271020602010271010001000171020603010106017104000171020603010106017101000171020603010306047102060301030601710171010603010406017102000171010603010406017101710301050601710200017103010506017101710201060601710200017102010606017101000171060601710400017106060171010001000271040602710400027104060271010003000471080004710300" + }, + { + "filename": "18-fukui-tojinbo-heads", + "data": "0x00051c15050d00037407000800037402000374027205000500037203740272037402720274030005000372037402720374027202740300030002740372037402720374027202740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372039902720374020502740300030002990372039902720374020502740300030002990305039902720374020502990300030002990305039902720399020502990300030002990305039902720399020502990272010003000299030503990205039902050299027201000100027702990305030c02050399020502990272017703000299030503990205039902050299027701000177010013770200" + }, + { + "filename": "19-yamanashi-shingen-heads", + "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" + }, + { + "filename": "19-yamanashi-wine-heads", + "data": "0x0001161409050003e705000500035b0500050003e70500050003e705000500037905000200011b082202000100011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" + }, + { + "filename": "20-nagano-matumotocastle-heads", + "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" + }, + { + "filename": "20-nagano-wasabi-heads", + "data": "0x0003161505040002220100024e08000100024e01000222034e08000122024e0222034e09000122034e0122014e0222090001000122034e032201c90122070002000622014e022206000200013f022201c9014e042206000200013f014e0622014e01c90500030001c90922040003000a22040003000422014e062203000400013f014e0522014e0322020005000922014e020005000b22010006000122014e082201000700042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" + }, + { + "filename": "21-gifu-gassho-summer-heads", + "data": "0x00021d14040b0003d80b000b0003d80b000a0002d8018402d80a00090002d8038402d80900080002d80184037c018402d80800070002d8028402010123028404d80500070001d8028401ca0201012301ca028401d80700060001d8028407ca028401d80600050001d80184057c01ca057c018401d80500040002d8018401ca030103ca030101ca018402d80400030002d8028401ca030103ca030101ca028402d80300030001d802840dca028401d80300020002d8018402ca020101ca020101ca020101ca020102ca018402d80200010002d8018403ca020101ca020101ca020101ca020103ca018402d80100010001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + }, + { + "filename": "21-gifu-gassho-winter-heads", + "data": "0x00021d14040900070109000800030103d8030108000800030101d8018401d8030108000700030101d8038401d8050105000600030101d80184037c018401d8040105000500030101d8028402010123028401d8010102d805000400030101d8028401ca0201012301ca028401d80200010104000300030101d80184030103ca0301018401d8030103000200030101d80184050101ca0501018401d8030102000200030101d801840bca018401d8030102000100030101d802840bca028401d8030101000100020101d802840dca028401d802010100030101d801840fca018401d80301020101d8018411ca018401d80201010101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + }, + { + "filename": "21-gifu-keichan-heads", + "data": "0x00021d1a03040002061400060004060500050606000a000106090003060300040006060100017d029c0900010602000300010605000322017d029c0200060603000400090601d2019c010001060900030003ca0123022203e901220106017d029c0106022303ca0300020002ca0223022201e9037d01220106027d019c017d0106010c022302ca0200010002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012302ca02ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c0123012301ca0123010c0322047d029c0322027d029c017d0122010c012301ca01230123010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012302ca02ca0123010c0422017d029c037d0422027d0222010c012302ca03ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca0100020004ca0e2304ca0200030014ca03001a001a001a000c00013d0101013d01010a000d00013d0100013d0a00" + }, + { + "filename": "21-gifu-ukai-heads", + "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f540700030010540700030010540700020011540700020005540c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c0201010c06000100030c0601010c07a60101010c06000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" + }, + { + "filename": "22-shizuoka-oden-heads", + "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" + }, + { + "filename": "23-aichi-hitsumabushi-heads", + "data": "0x00071a15060800040e08000500050e0134040e05000300040e0234012b013401350134040e03000200010e010b033401350234012b023401350334010e02000100010e010b0134012b03340135053401350234010b010e01000100010e01350234012b0634012b033401350134010e0100020e0834013506340135020e020e023401350234012b033401350334012b0234020e020e010b023401350b34012b020e030e010b093401350334030e050e023401350234012b03340135050e0100080e0234080e01000100120e01000200100e020004000c0e0400" + }, + { + "filename": "23-aichi-nagoyacastle-heads", + "data": "0x00021b15010b0001da070001da06000b0002da053f02da06000b00093f06000a000b3f05000b00010101e3010101e3010101e3010101e301010600090001210b3f012104000900063f0101063f04000a000501013f050105000900013f010102580121013f010e013f012102580101013f04000900043f050e043f040001e307000f3f0300010101e3050002210d010221020003e304000221013f010e013f0101015801010158010101580101013f010e013f02210200020104000121023f030e073f030e033f0121015801010400143f03e30400016f01580101015801010158016f0158016f0158016f01580101015801010158016f0158010004e3020014e3030104000101015801010158020101580101015801010158020101580101015802010100030104e301780105015901630178025902dd0259010502dd01590163015901050100015e0159015e040101d8015e0178025e0163025e01d8015e0178035e0178015e01d8015e0100" + }, + { + "filename": "23-aichi-tenmusu-heads", + "data": "0x00011b1406090001ce010001ce0900090003ce0900090003ce0900090003e70900070001bc05e701bc0700060001bc010105e7010101bc0600050001bc010107e7010101bc0500050001bc020101e7030101e7020101bc0500040003bc070103bc0400040005bc030105bc0400030007bc010107bc030003000fbc0300020010bc0300020011bc0200020011bc0200020011bc0200010013bc0100010007bc010101bc010101bc010107bc010015bc15bc" + }, + { + "filename": "24-mie-jingu-heads", + "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" + }, + { + "filename": "24-mie-ninja-heads", + "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" + }, + { + "filename": "25-shiga-blackbass-heads", + "data": "0x00021d18021700018d0100018d01001700038d01001600058d1700048d0a00016b0c00038d01000900036b010003c50157012303c50100038d02000800036b02c5011e02c5025702c50100028d04000500026b0100016b02c5031e06c50100038d03000500036b01c5041e01c5011e05c5028d05000400036b01c5031e01c5041e02c5010101c5030104000400026b01c5031e01c5031e0101016b060105000400016b01c5061e0201016b0201011e03010600050001c5031e01c5011e0201016b0201031e02010600050001c5041e0201016b0201031e02010700050001c5021e01c50201016b0701011e0700040001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010e000100066b0300031e0e000300046b0300021e0f000300046b14000400036b1400" + }, + { + "filename": "25-shiga-hikonecastle-heads", + "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" + }, + { + "filename": "26-kyoto-kinkaku-heads", + "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" + }, + { + "filename": "26-kyoto-kiyomizu-heads", + "data": "0x00061a14051584010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100" + }, + { + "filename": "27-osaka-osakacastle-heads", + "data": "0x00021b1406070001da050001da07000700073f07000700073f07000600043f01e3043f0600070001e301ad03e301ad01e30700040001da0100010e01e7010e01e7010101e7010e01e7010e010001da040004000221023f012103010121023f02210400040001210b3f01210400040002210101015802010158020101580101022104000300072101a607210300010001da02000401013f0301013f0401020001da01000100032101010158013f01a601010358010101a6013f015801010321010001000121113f012101000100043f01a6093f01a6043f0100010001210101013f0301013f01580101015801010158013f0301013f0101012101000100022101a601580101015801a6013f0321013f01a601580101015801a6022101001521010002c102580101015802c1035802c101580101025802c10100010013010100" + }, + { + "filename": "27-osaka-takoyaki-heads", + "data": "0x00021e15020b0001af010001af020001af027d0900090001af027d01af0100017d01af010002af09000600017d010001af017d03af017d01af020b017d010003af060003000157020001af017d02af017d01af020b01af0134017d013401af027d0700040001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0600050001570100010b02af01dd01af013402af017d0134010b03af010001af05000600015701af023401af010b02af010b023402af020b01dd01af050006000134010b02af010b0234010b0234020b0111010b0234010b050005000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f0100050001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f010005000334010b0134020b0b60050005000234020b0134010b01110260039303600393050005000134010b0234010b013401110b6005000600040b0111046002930560060006000134010b0234011101930134019305600293016006000200037f0200023402110160053404600700017f0300017f0300013401110260013403600293026008000100037f03000234011101930134076009000b00036003930b00" + }, + { + "filename": "27-osaka-tower-heads", + "data": "0x000216150b05000195050004000395040002000195063c020003000195043c0300040003c604000100016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f01000300019501c6019501c6019503000300019501c6019501c6019503000300019501c6019501c6019503000200029501c6019501c6029502000200029501c6019501c6029502000200029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f010001000195016f019503000195016f019501000100016f019505000195016f010001000195070001950100" + }, + { + "filename": "28-hyogo-arimaonsen-heads", + "data": "0x0003171409020003a60900010001e704a6080001e703a6012904a6050001e706a6012902a6040001e708a605000100016d01e703a60400019d014602000200016d02ea05000106012802000a00019d014602000a00019d014602000a00019d014602000a00019d014602000a00019d014602000a00019d014602000a00019d014602000500049d0106019d0128020003000406010005ce0100020001060301030001ce012901ce0229010003010106020006ce0100" + }, + { + "filename": "28-hyogo-himejicastle-heads", + "data": "0x00021a15010b00017f0700017f05000c0007e006000c0001e0019d01e0019d01e0019d01e006000b0002e0019d0301019d02e005000c00070106000c00010101920101019d01010192010106000800017f020001e0019d01e0019d0101019d01e0019d01e00200017f0200090001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e003000700017f02000101029d01010192010101920101029d01010200017f01000800017f01e0019d0201019d03e0019d0201019d01e0017f02000300017f040002e005010192050102e0020003e00500017f01e0010101920101019201e0010101e00192010101920101027f020001e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d01000192010101920300037f040105920501020001e0019d01e0019d01e00100037f010101920101079201010192020102000101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d019d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f01000192010101920101019201010192100102000401019d01e0019d01e0012b0250012b0350012b0250012b0350012b0200012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" + }, + { + "filename": "28-hyogo-tajimaushi-heads", + "data": "0x0004191504010002b50f0002b5010002b5110002b502b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b01000300010b0d0d010b0300150d150d150d0100130d01000300100d020004000c0d05000400060d0ab501000400050d0bb501000400050d05b5020d01b5020d01b501000400050d0bb501000400050d02b5070d02b5010009000ab50200" + }, + { + "filename": "29-nara-ashura-heads", + "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" + }, + { + "filename": "29-nara-deer-heads", + "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" + }, + { + "filename": "30-wakayama-danjogarandaito-heads", + "data": "0x00011914080800019508000800012108000800019508000800012108000700012701e301270700060001e3012701e3012701e30600040001e3012701e3012701e3012701e3012701e30400020001e3012701e3012701e3012701e3012701e3012701e3012701e3020002000db40200050001b4010101b4010101b4010101b40500050007b405000500012801dd01b401dd01b401dd012805000400090104000100012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b40300030001b401dd01b401dd01b401dd01b401dd01b401dd01b4030003000bb40300030001b4010101b4010e01b4010e01b4010e01b4010101b403000100047f07e0047f0100" + }, + { + "filename": "30-wakayama-nachifall-heads", + "data": "0x000216150a0100036102e001610101046101610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e00301026202000400010101e0010101e004000400020101e001010400040001e0030104000500010101e001010400050001e0020104000500030104000500020101e00400050001e0010101e004000500010101e001010400050003010400050003010400050003010400030001010100016201010162010102000101050001010162020103000500020101000101010001010100020001010100010101000101010001010300" + }, + { + "filename": "30-wakayama-wakayamaramen-heads", + "data": "0x00041b150508000633080006000233060102330600040002330a010233040003000133040106d804010133030002000133030102d8016001d8017d026003d803010133020001000133020103d80260037d01d80160025b02d802010133010001000133010102d8027d0160047d010f035b016002d80101013301000133020101d8067d030f017d025b026001d8020101330133010101d8077d030f046003d8010101330133010101d8067d040f066001d8010101330133010102d8057d040f066001d8010101330133020101d80160047d040f056001d80201013301000133010101d8067d076002d801010133010001000133020101d8047d0160026c01d8026001d8016001d802010133010002000133020101d8027d0160016c02c1016c01d8026001d802010133020003000133020102d80160016c02c1016c016002d802010133030004000133030102d8026c02d803010133040006000133080101330600" + }, + { + "filename": "31-tottori-dummy-heads", + "data": "0x00041b150508000633080006000233060102330600040002330a010233040003000133040106d804010133030002000133030102d8016001d8017d026003d803010133020001000133020103d80260037d01d80160025b02d802010133010001000133010102d8027d0160047d010f035b016002d80101013301000133020101d8067d030f017d025b026001d8020101330133010101d8077d030f046003d8010101330133010101d8067d040f066001d8010101330133010102d8057d040f066001d8010101330133020101d80160047d040f056001d80201013301000133010101d8067d076002d801010133010001000133020101d8047d0160026c01d8026001d8016001d802010133010002000133020101d8027d0160016c02c1016c01d8026001d802010133020003000133020102d80160016c02c1016c016002d802010133030004000133030102d8026c02d803010133040006000133080101330600" + }, + { + "filename": "32-shimane-dummy-heads", + "data": "0x00041b150508000633080006000233060102330600040002330a010233040003000133040106d804010133030002000133030102d8016001d8017d026003d803010133020001000133020103d80260037d01d80160025b02d802010133010001000133010102d8027d0160047d010f035b016002d80101013301000133020101d8067d030f017d025b026001d8020101330133010101d8077d030f046003d8010101330133010101d8067d040f066001d8010101330133010102d8057d040f066001d8010101330133020101d80160047d040f056001d80201013301000133010101d8067d076002d801010133010001000133020101d8047d0160026c01d8026001d8016001d802010133010002000133020101d8027d0160016c02c1016c01d8026001d802010133020003000133020102d80160016c02c1016c016002d802010133030004000133030102d8026c02d803010133040006000133080101330600" + }, + { + "filename": "33-okayama-denim01-heads", + "data": "0x00061815090a54042b01540799010c0299042b019907540199075401540599015401990154059901540754019907540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" + }, + { + "filename": "33-okayama-denim02-heads", + "data": "0x00061815090a92042b01920799010c0299042b01990792019907920192050c019201990192050c0192079201990792079201990792079201990792079201990792079201000792079201000792079201000792079201000792079201000792079901000799079d0100059d01010192079d0100059d01010192" + }, + { + "filename": "33-okayama-denim03-heads", + "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca07920192050c019201ca0192050c0192079201ca0792079201ca0792079201ca0792079201ca079207920100079207920100079207920100079207920100079207920100079207ca010007ca079d0100059d014d0192079d0100059d01010192" + }, + { + "filename": "33-okayama-dog-heads", + "data": "0x00031a1506010003260c00022602000100015703260a000226015702000100025703260800022602570200010003570c2602570200010002570e2601570200010003260601016a05010226020001000801036a0601020001000801010f016a010f06010200010003010d26010102000100112602000100052603570326035703260200010011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db018801001000025f0200" + }, + { + "filename": "33-okayama-horseshoe-crab-heads", + "data": "0x00051815010a00088e0500090003d5098e02000800028e02ca01d5068e0101028e0100060001ca048e01ca01d5028e04c3018e0101018e01000700048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0100090003d5098e02000a00088e0500" + }, + { + "filename": "33-okayama-momotaro-heads", + "data": "0x00021914050200020c10000100030c1000040c1000030c0201040c0500040c020003000101060c0374060c010002000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c010012570100010012570100010012570100020001741057010003000557040c0757010003001057010004000e570200" + }, + { + "filename": "33-okayama-monkey-heads", + "data": "0x00051a140605000aca050003000eca0300020010ca0200010003ca0601016a050102ca020001000801036a0601020001000801010f016a010f060102000100030106db01ca06db01010200010003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb0100020003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" + }, + { + "filename": "33-okayama-peach-heads", + "data": "0x00041e15030d00015f0d000a00075f0a0007000d5f070006000f5f06000500025f01570e5f05000500015f0157065f01e5085f05000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400095f01e5095f04000400095f01e5095f04000400095f01e5095f040002000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f0322010002000322055f0382095f02220300040002220f5f02220400060002220b5f02220600" + }, + { + "filename": "33-okayama-pheasant-heads", + "data": "0x0003191506019212000292110005920a540400010002920d54030002000f540200020002540601016a05010154020002000701036a0501020002000701010f016a010f05010200020002010cb901010200020001540eb90200020001540eb90200020001540eb90200020001540eb90200020001540eb902000200025407b9036d03b9020003000754096d03000854086d03000e540100016d03000e1d0200" + }, + { + "filename": "34-hiroshima-manju-choco-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad02880385028802ad0400010005ad01880585028804ad0100010001ad05880585058801ad0100010001ad01880d85018801ad0100010001ad02880b85028801ad0100020001ad01880b85018801ad0200020001ad02880985028801ad0200020001ad01880b85018801ad0200010002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad0100020002ad02880785028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-custard-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288016d028802ad0500040002ad0288036d028802ad0400010005ad0188056d028804ad0100010001ad0588056d058801ad0100010001ad01880d6d018801ad0100010001ad02880b6d028801ad0100020001ad01880b6d018801ad0200020001ad0288096d028801ad0200020001ad01880b6d018801ad0200010002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad0100020002ad0288076d028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-koshi-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880180028802ad0500040002ad02880380028802ad0400010005ad01880580028804ad0100010001ad05880580058801ad0100010001ad01880d80018801ad0100010001ad02880b80028801ad0100020001ad01880b80018801ad0200020001ad02880980028801ad0200020001ad01880b80018801ad0200010002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad0100020002ad02880780028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-maccha-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288010f028802ad0500040002ad0288030f028802ad0400010005ad0188050f028804ad0100010001ad0588050f058801ad0100010001ad01880d0f018801ad0100010001ad02880b0f028801ad0100020001ad01880b0f018801ad0200020001ad0288090f028801ad0200020001ad01880b0f018801ad0200010002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad0100020002ad0288070f028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-tsubu-heads", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad028802850180028802ad0400010005ad01880145028501450185028804ad0100010001ad0588024501800285058801ad0100010001ad018802800245018502800385018001450185018801ad0100010001ad02880180018501450480018501800285028801ad0100020001ad018802850380018501450480018801ad0200020001ad0288018501450280024502800145028801ad0200020001ad018801850345028502800345018801ad0200010002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad0100020002ad02880180014502800385028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-okonomiyaki-heads", + "data": "0x00051b14050500015d0300045f0100019307000600025d01d9015f026a0122015d08000600012201d90101026a0122010101220800030001930101010001d90101015f016a015d0101015d01010122015f010105000500010101d90101015f016a0122015d010101220101025f010104000500012201d90101015f016a015d022201010122015d015f01d9010103000400015f015d01d90101015f016a0422015d0122015f02d9010102000300015f015d012201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101016a0722015f02d9010102000200016a015f0c22015f02d9010102000200026a015f0f22020002000560012501600125016001250160012501600125046002001623" + }, + { + "filename": "34-hiroshima-shrine01-heads", + "data": "0x00051c15050277130002770100157701000200131a020002001341020004000441020003230200044104000500021a03000123019301230300021a0500040004410200032302000441040002001341020002001341020005000241090002410500040003b3090003b30400050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b305000400018d01b30141038d0306038d014101b305000400078d0106068d0500" + }, + { + "filename": "35-yamaguchi-anglerfish-heads", + "data": "0x00091f15020c0005830c000900048301660683090008000a830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301230383012309830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + }, + { + "filename": "35-yamaguchi-footballfish-heads", + "data": "0x00031f15020900023402eb100008000134040001eb01da0e0007000134050001da015d01da0d0007000134040001da015d0101015d01da0c0008000134040001da015d01da0d000900023401eb020001da0e000c0002eb03830c0009000483016601eb0583090008000683013403830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301230383012309830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + }, + { + "filename": "35-yamaguchi-fuku-heads", + "data": "0x00051b14030400026212000400036211000400046203610495016105950300050001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed02610301016103950161015903610159016105950201010002610401059501590161015904950501010001610300130101000200026212010200020003621101020002000262010011010200060008010259050103000600080101590601030007000d010400" + }, + { + "filename": "35-yamaguchi-kawarasoba-heads", + "data": "0x00051e1504030001061600010002060700015503000155080001060200010609000155030001550900010601000106080001da010101da010001da010101da05000306020001000306040001d0012301d0012301d0012301d0012301d00900040001060200011501230115012301150123011501230115012301150200010605000400010601000d1503000206020001000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb05000106010604000fe80300020601000100010603000fe802000106030002000106010011e8010001060300040002e80d2302e80200010602000300010c02230d0c0223010c04000200040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" + }, + { + "filename": "35-yamaguchi-shoin-heads", + "data": "0x00031715070100030c0c000200050c09000400060c060002000d23010001000f2301000223048805230388012302230e8802230e8802230388032304880323018801230f880588032304880323018806880123028801ca0288012303880a8801ca05880a8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c880100050009880200" + }, + { + "filename": "36-tokushima-awa-odori01-heads", + "data": "0x000118140d010002d80800010004d8030001880200010006d8010001880200010007d801060200020005d80106020001880200012303880106030001880300038803000101010001000301026703010200040102670101040003010367050003890367050002e201890367050004e2014f060002e2044f05000200044f050001000155044f050001000355014f06000300010107000200010108000200012301550700" + }, + { + "filename": "36-tokushima-naruto-wakame-heads", + "data": "0x00021a15070b000194035c04940b000348035c02480b00035c0100025c02000b00035c0200015c020004000748035c01480400020002480723035c012302480200010001480923025c0423014801000148042306de015c02de042301480148022302e90bde022301480148012304e905de015c05de01230148014807de045c06de0148014805de055c07de0148014806de035c03de02e903de014801480bde04e902de0148014811de014802480fde0248034801de055c07de034801001148010002000f48020004000b480400" + }, + { + "filename": "36-tokusima-whirlpools-heads", + "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" + }, + { + "filename": "37-kagawa-bonsai-heads", + "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" + }, + { + "filename": "38-ehime-iyokan-heads", + "data": "0x00051a140604000c4204000200084201e1074202000100024201250f42010002420125114201420125124201420125124214421442144214421442144214420100054203b30a42010002001042020003000e420300" + }, + { + "filename": "38-ehime-jakoten-heads", + "data": "0x0006191406020010d20100010001d203d102d2018e0bd201d204d10ed201d204d101d2018e0ad2018e01d201d204d106d2018e07d201d204d10ed201d204d10ed201d204d10ed201d204d10ed201d204d10dd2018e01d204d10ed201d204d105d2018e01d2018e06d201d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" + }, + { + "filename": "38-ehime-mandarin-orange-heads", + "data": "0x00061a140604000c4204000200084201e1074202000100024201250f4201000242012511420142012512420142012512421442144214421442144214420100054203b30a42010002001042020003000e420300" + }, + { + "filename": "38-ehime-onsen01-heads", + "data": "0x00031b15050700015504000155040001550400060002550300025503000255040005000255030002550300025505000400025503000255030002550600040002550300025503000255060004000255030002550300025506000400025503000255030002550600050002550300025503000255050006000255030002550300025504000200025502000255030002550300025501000155020001000255030002550300025503000255010002550100025503000255030002550300025503000255025502000255030002550300025504000255025502000155040001550400015505000255025512000255035510000355010003550e000355010002001255020004000e550400" + }, + { + "filename": "38-ehime-onsen02-heads", + "data": "0x00031b150507000101040001010400010104000600020103000201030002010400050002010300020103000201050004000201030002010300020106000400020103000201030002010600040002010300020103000201060004000201030002010300020106000500020103000201030002010500060002010300020103000201040002000374013f0201033f0201033f02010274020001000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f02740274023f0201033f0201033f0201043f02740274023f0101043f0101043f0101053f02740274123f02740374103f0374010003740e3f0374010002001274020004000e740400" + }, + { + "filename": "38-ehime-onsen03-heads", + "data": "0x00031c14050b00010c0b000900050c09000800016101740161017401610174016108000700017407de01740700020001610300016101de01ae05de01ae01de0161030001610200030001740161017401de04ae01de04ae01de0174016101740300030003de03ae053f03ae03de0300060003ae013f02e70126013f03ae0600060003ae053f03ae060006000bae060006000b3f0600013f03000f3f0300013f0100153f010002001321020004000f01040002000157010004ae015702ae015702ae015704ae0100015702000200010c010001ae0306015701ae033601ae0157030601ae0100010c02000200010c010001ae030602ae033602ae037401ae0100010c0200" + }, + { + "filename": "38-ehime-tai-somen-heads", + "data": "0x00031c18010d000189020001890a000b0001890100015f01890100015f0189090008000357015f01890157015f01890157015f018902570600070003570b20015705000600025701890e200400050002570189102003000500015701890320018d0220018d0220018d0220018d0520020001200300025714200100010001200200015715200100010001890120010001571220028d01200100020001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a20010603200306012003000257018907060401080601000400035712060200040004570f06040004000157010002570400068904000157040004000157010001570f000157040004000157110001570400040001571600" + }, + { + "filename": "38-ehime-taimeshi-heads", + "data": "0x00041a16060600082306000300030f0848022304000200050f01e90182020101e9015f01010248012303000100060f02e9018202e90182010101e901010148012302000100030f0282015f02e9015f02e9015f02e9015f01010148012301000100020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f02010148012301230148030f03e9044202e9028202e901480123012301480201025f0182044201010142015f04e90148012301230148015f028202e9044201e4014204e9015f0148012301230148018203e9015f064202e9015f01820101014801230123014803e9015f018201e9044201e9015f02820201014801230123014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e901010148012301000100012301480101018201e90101015f03e90182015f018202e9010101480123010002000123014803010182015f03e901010282010101480123020003000123024802010182015f02e9020102480123030004000223084802230400060008230600" + }, + { + "filename": "39-kochi-bonito-heads", + "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" + }, + { + "filename": "40-fukuoka-mojiko-heads", + "data": "0x00031e14030d0001960d0009000196030001960300019609000600019602000196072701960100019607000600019602000927010001960700060002610b27026106000500046102270106016b010101270106022704610500050001a501e0010601a5032701a501aa01a5032701a501e0010601a50500040009aa015709aa0400050001c1025701c1025701e9035701e9025701c1025701c105000200032701c1015701e001c102e001e903e001e902e001c1015701e001c1032702000100042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c1042701000100042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e001060157015702060157010601c10157010601c1010301460197034601970146010301c10157010601c101060157020601570557017f0257017f0103019701460397014601970103017f0257017f0557" + }, + { + "filename": "40-fukuoka-tenmangu-heads", + "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" + }, + { + "filename": "41-saga-mudskipper-fiddlercrab-heads", + "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" + }, + { + "filename": "41-saga-yoshinogari-heads", + "data": "0x0002181409030001d8010001d8010001d8010001d8010001d80300040007d80400030009c9030002000bd8020001000dc9010002000b99020001000d9901000f99010001bb050001bb050001bb010001de01bb050001bb050001bb01de0fde01de01bb050001bb050001bb01de0fde010001bb050001bb050001bb0100010001bb050001bb050001bb0100010001bb050001bb050001bb010001000dbb0100010001bb050001bb050001bb0100010001bb050001bb050001bb0100" + }, + { + "filename": "42-nagasaki-champon-heads", + "data": "0x00071a1406060008e00600040003e0065703e00400020003e00257066d025703e00200010002e00157032d01d4014e02eb0166012d026d025702e0010002e00257036602eb02d40166012d014e02d4025702e001e00257014e05d4014e01970166012d02d4026d025701e001e00157016d024e01d402eb02d4019702d402eb014e0297015701e001e0015702eb0266039703660197024e032d015701e002e00157032d02d401eb032d019701eb01d4036602e0010002e0016d01eb024e05d4019701eb014e036d01e001000100016f03e0015702d401b3016d02eb016d025703e0016f01000200026f03e0015701cd01b301cd025703e0026f02000300036f08e0036f030004000c6f0400" + }, + { + "filename": "42-nagasaki-meganebashi-heads", + "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e04080208017e0400017e0408017e0400017e020802080600017e0208017e060002080108017e060004080600017e0108017e080002080800017e019108000291080001910191080002910800019102910700039107000191010003910300029102000391030002910100030004910600049103000700019101000191010001910800" + }, + { + "filename": "42-nagasaki-saseboburger-heads", + "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" + }, + { + "filename": "43-kumamoto-karashirenkon-heads", + "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" + }, + { + "filename": "43-kumamoto-kumamotocastle-heads", + "data": "0x00021d15020800019d12000700019d0101019d11000600059d10000600050e1000040002c80206019d020602c80e00040002c8029d0101029d02c80e00030002c8029d0323029d02c80d0003000501019d05010800019d04000300010e0223010e019d0101019d010e0223010e0700019d0101019d0300020001c8036f019d0323019d036f01c8060003060300020001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c802000100019d0101019d0c01026f020101c80192019d019202c8010001000392010e0623010e0223020e029201230192019d0301019d01010100010003920c0e0492052301920100059d012301010123010101230101012301010123010101230a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" + }, + { + "filename": "44-oita-beppujigoku-heads", + "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" + }, + { + "filename": "44-oita-usajingu-heads", + "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" + }, + { + "filename": "45-miyazaki-aoshima-heads", + "data": "0x00061d14030500109205000600027f0192047f0192047f0192017f0600080001bf040001bf040001bf0700010001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf0700010004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf01920600030005e102bf080002bf0600030003e1011b019202bf010006af019202bf0600020002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d60100010001e1011b02e1019d01e1019209af019201af01990221039901000100011b03e1019d0caf01d6026001d6016001d60200" + }, + { + "filename": "45-miyazaki-chickennanban-heads", + "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" + }, + { + "filename": "46-kagoshima-goromon-heads", + "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" + }, + { + "filename": "46-kagoshima-shirokuma-heads", + "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" + }, + { + "filename": "47-okinawa-goya-chanpuru-heads", + "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" + }, + { + "filename": "47-okinawa-shuricastle-heads", + "data": "0x00051e1403050001d00f0001d00500050002c40d0002c40500050001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10500050001a101be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01a10500040001be01d001be01a101be01a101be01a101be01a101be01a101be01a101be01a101be01d001be0400020001be01a101be01a101be01a101be01a101be01a101be01c401be01a101be01a101be01a101be01a101be01a101be020004000848035408480400020001be01a101be01a101be01a101be01a1024d01a601be01a6024d01a101be01a101be01a101be01a101be020001be01a101be01a101be01a101be01a101be014d02a6039202a6014d01be01a101be01a101be01a101be01a101be0200044801be01a1014d01a601d0029201d0029201d001a6014d01a101be0448020002000148013301480133014801330148094d0148013301480133014801330148020002000748014d010101a603be01a60101014d074802000200014801010548014d0101014d0301014d0101014d02480201014801010148020002000148010104480105014d01be01a603be01a601be014d0105014802010148010101480200010007970105014d01be014d03be014d01be014d010507970100019707ee01d7095901d707ee0197" + }, + { + "filename": "47-okinawa-siisa-heads", + "data": "0x00041d14030200033706000437060003370200030004370200033702000337020004370300040008370200083704000300023703460137034602370246023702460337030003000237026602370266043701230337012303370300020001460237016601230237016601230337012301370123013701230137012302370146020001000246143702460100020001460337042307370423023701460200010003460837024606370123013702460200030002460637014602000146063702460300030002370746020007460237030001000146010003370246023701460137020001370146023702460337010001460100024601000937020009370100024601460b3702000b37014601000a370123020001230a3701000200013701460837022308370146013702000400023701660200023701660200016602370200016602370400" + } + ], + "glasses": [ + { + "filename": "glasses-hip-rose-glasses", + "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" + }, + { + "filename": "glasses-square-black-eyes-red-glasses", + "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" + }, + { + "filename": "glasses-square-black-rgb-glasses", + "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-black-glasses", + "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" + }, + { + "filename": "glasses-square-blue-med-saturated-glasses", + "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" + }, + { + "filename": "glasses-square-blue-glasses", + "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" + }, + { + "filename": "glasses-square-frog-green-glasses", + "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" + }, + { + "filename": "glasses-square-fullblack-glasses", + "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-green-blue-multi-glasses", + "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" + }, + { + "filename": "glasses-square-grey-light-glasses", + "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" + }, + { + "filename": "glasses-square-guava-glasses", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-honey-glasses", + "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" + }, + { + "filename": "glasses-square-magenta-glasses", + "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" + }, + { + "filename": "glasses-square-orange-glasses", + "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" + }, + { + "filename": "glasses-square-pink-purple-multi-glasses", + "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" + }, + { + "filename": "glasses-square-red-glasses", + "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" + }, + { + "filename": "glasses-square-smoke-glasses", + "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" + }, + { + "filename": "glasses-square-teal-glasses", + "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" + }, + { + "filename": "glasses-square-watermelon-glasses", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-yellow-orange-multi-glasses", + "data": "0x000b17100703000626010006130300012602010223012601000113020102230113034201260201022301260142011302010223011301260200012602010223012601000113020102230113012602000126020102230126010001130201022301130300062601000613" + }, + { + "filename": "glasses-square-yellow-saturated-glasses", + "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" + } + ] + } +} \ No newline at end of file diff --git a/src/utils/addresses/localNounsDescriptor_localhost.ts b/src/utils/addresses/localNounsDescriptor_localhost.ts index 2475711b..b820c479 100644 --- a/src/utils/addresses/localNounsDescriptor_localhost.ts +++ b/src/utils/addresses/localNounsDescriptor_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsDescriptor:"0xDC11f7E700A4c898AE5CAddB1082cFfa76512aDD", + localNounsDescriptor:"0x51A1ceB83B83F1985a81C295d1fF28Afef186E02", } diff --git a/src/utils/addresses/localNounsDescriptor_mumbai.ts b/src/utils/addresses/localNounsDescriptor_mumbai.ts index 5d3751e9..d97881a7 100644 --- a/src/utils/addresses/localNounsDescriptor_mumbai.ts +++ b/src/utils/addresses/localNounsDescriptor_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsDescriptor:"0x7351860b203bDDAC7e987F7d3B4e809960d05cf1", + localNounsDescriptor:"0x3034F3Bb199bc34F9e0BE392dc7015E8a10Ca38c", } diff --git a/src/utils/addresses/localNounsMinter_localhost.ts b/src/utils/addresses/localNounsMinter_localhost.ts index c08e5584..76fb5122 100644 --- a/src/utils/addresses/localNounsMinter_localhost.ts +++ b/src/utils/addresses/localNounsMinter_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsMinter:"0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", + localNounsMinter:"0x0355B7B8cb128fA5692729Ab3AAa199C1753f726", } diff --git a/src/utils/addresses/localNounsMinter_mumbai.ts b/src/utils/addresses/localNounsMinter_mumbai.ts index b9956f0b..fbcf4f3d 100644 --- a/src/utils/addresses/localNounsMinter_mumbai.ts +++ b/src/utils/addresses/localNounsMinter_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsMinter:"0x0d602965065c64e6d5d69834C246863472aac4A5", + localNounsMinter:"0x72A939Aa1c03A05021941ac24cFff0897FcD5f84", } diff --git a/src/utils/addresses/localNounsProvider_localhost.ts b/src/utils/addresses/localNounsProvider_localhost.ts index ff3d0c5d..5c18966d 100644 --- a/src/utils/addresses/localNounsProvider_localhost.ts +++ b/src/utils/addresses/localNounsProvider_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsProvider:"0x51A1ceB83B83F1985a81C295d1fF28Afef186E02", + localNounsProvider:"0x36b58F5C1969B7b6591D752ea6F5486D069010AB", } diff --git a/src/utils/addresses/localNounsProvider_mumbai.ts b/src/utils/addresses/localNounsProvider_mumbai.ts index 36843f0d..64eed001 100644 --- a/src/utils/addresses/localNounsProvider_mumbai.ts +++ b/src/utils/addresses/localNounsProvider_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsProvider:"0xfB4Fa72bcA36e02E24D2081EcBcf8D6d071CCE03", + localNounsProvider:"0xe8bf7CeA7F07b14906839c5A48AFA4Fb775a44e9", } diff --git a/src/utils/addresses/localNounsToken_localhost.ts b/src/utils/addresses/localNounsToken_localhost.ts index 09135c78..1b9cac23 100644 --- a/src/utils/addresses/localNounsToken_localhost.ts +++ b/src/utils/addresses/localNounsToken_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsToken:"0x36b58F5C1969B7b6591D752ea6F5486D069010AB", + localNounsToken:"0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", } diff --git a/src/utils/addresses/localNounsToken_mumbai.ts b/src/utils/addresses/localNounsToken_mumbai.ts index c8683abf..b76e47ec 100644 --- a/src/utils/addresses/localNounsToken_mumbai.ts +++ b/src/utils/addresses/localNounsToken_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsToken:"0x4d21F695453D2d206D72A08086f0440A97A82125", + localNounsToken:"0x9f3aBc7b9f17Fb58a367bdA86e6129a2F5849942", } diff --git a/src/utils/addresses/localseeder_localhost.ts b/src/utils/addresses/localseeder_localhost.ts index 83de0f6d..c5b1f85c 100644 --- a/src/utils/addresses/localseeder_localhost.ts +++ b/src/utils/addresses/localseeder_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localseeder:"0xD8a5a9b31c3C0232E196d518E89Fd8bF83AcAd43", + localseeder:"0xDC11f7E700A4c898AE5CAddB1082cFfa76512aDD", } diff --git a/src/utils/addresses/localseeder_mumbai.ts b/src/utils/addresses/localseeder_mumbai.ts index bad495e6..eecd0e5e 100644 --- a/src/utils/addresses/localseeder_mumbai.ts +++ b/src/utils/addresses/localseeder_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localseeder:"0x14E6BC05997989d6B5a1F2910Fe9eD4eC25F1294", + localseeder:"0x7d72e9A56C367948E1De02E63897bB71111e4b19", } diff --git a/src/utils/addresses/nftDescriptor_mumbai.ts b/src/utils/addresses/nftDescriptor_mumbai.ts index 26646f74..a6313951 100644 --- a/src/utils/addresses/nftDescriptor_mumbai.ts +++ b/src/utils/addresses/nftDescriptor_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - nftDescriptor:"0x77dD7d8d4a7091a64c25Eb0127839ff1f467edCa", + nftDescriptor:"0x3f722983286418E8AB70d9536E552F262A74041f", } diff --git a/src/utils/addresses/nounsDescriptor_mumbai.ts b/src/utils/addresses/nounsDescriptor_mumbai.ts index 908194a9..9d19d929 100644 --- a/src/utils/addresses/nounsDescriptor_mumbai.ts +++ b/src/utils/addresses/nounsDescriptor_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - nounsDescriptor:"0xE61d3572FDc4Bd1A49fa8bc691E3A0650FF0DdfC", + nounsDescriptor:"0x070054Ac97Fb9f53d68C90acb6CA535E3c33f627", } diff --git a/src/utils/addresses/nounsSeeder_mumbai.ts b/src/utils/addresses/nounsSeeder_mumbai.ts index 8433cc5d..e7ee929c 100644 --- a/src/utils/addresses/nounsSeeder_mumbai.ts +++ b/src/utils/addresses/nounsSeeder_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - nounsSeeder:"0x86c95EC4fA955505E0B904CFCF232E93e17a1c75", + nounsSeeder:"0x304861A6eD64b7f78C39243724d57b1e4b2B0D26", } diff --git a/src/utils/addresses/sample_localhost.ts b/src/utils/addresses/sample_localhost.ts index 153d86ba..df2d2401 100644 --- a/src/utils/addresses/sample_localhost.ts +++ b/src/utils/addresses/sample_localhost.ts @@ -1,4 +1,4 @@ export const addresses = { - providerAddress:"0x7Cf4be31f546c04787886358b9486ca3d62B9acf", - sampleToken:"0x33E45b187da34826aBCEDA1039231Be46f1b05Af" + providerAddress:"0xddE78e6202518FF4936b5302cC2891ec180E8bFf", + sampleToken:"0xB06c856C8eaBd1d8321b687E188204C1018BC4E5" } diff --git a/src/utils/addresses/tokenGate_localhost.ts b/src/utils/addresses/tokenGate_localhost.ts index 92bb7403..f550177e 100644 --- a/src/utils/addresses/tokenGate_localhost.ts +++ b/src/utils/addresses/tokenGate_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - tokenGate: "0xb007167714e2940013EC3bb551584130B7497E22", -}; + tokenGate:"0xD8a5a9b31c3C0232E196d518E89Fd8bF83AcAd43", +} diff --git a/src/utils/addresses/tokenGate_mumbai.ts b/src/utils/addresses/tokenGate_mumbai.ts index 7504fb52..61cbbd3c 100644 --- a/src/utils/addresses/tokenGate_mumbai.ts +++ b/src/utils/addresses/tokenGate_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - tokenGate: "0xD601E7E7138EDAfdC4FE9D2e3c7E8827D648DcEb", -}; + tokenGate:"0xD7eB488310b9E335459f17DB302BE20d04BA9Ac6", +} From 5d59d88e7525222fdf051ce98198a7d9e7e32a5d Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sat, 25 Nov 2023 21:58:31 +0900 Subject: [PATCH 124/146] =?UTF-8?q?=E3=83=AA=E3=82=A8=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=82=B7=E3=83=BC=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index a6ce3523..8aebee39 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -24,7 +24,6 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { address public developpersAddress; // 開発者ウォレット bool public canSetApproval = false; // setApprovalForAll, approveの可否 - uint256 public tradeRoyalty = 0.003 ether; // P2Pトレードのロイヤリティ constructor( @@ -85,10 +84,14 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { require(msg.sender == minter || msg.sender == owner(), 'Invalid sender'); require(_prefectureId % 100 <= 47, 'Invalid prefectureId'); + // リエントランシー対策のため状態変更を先に実施 + _safeMint(_to, _amount); + + uint256 startTokenId = _nextTokenId() - _amount; + for (uint256 i = 0; i < _amount; i++) { - assetProvider2.mint(_prefectureId, _nextTokenId() + i); + assetProvider2.mint(_prefectureId, startTokenId + i); } - _safeMint(_to, _amount); return _nextTokenId() - 1; } @@ -117,7 +120,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { function setCanSetAproval(bool _canSetApproval) external onlyOwner { canSetApproval = _canSetApproval; } - + function setAdministratorsAddress(address _admin) external onlyOwner { administratorsAddress = _admin; } From 6548ac559497850e9269ab3874f949081a5d1d9c Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 29 Nov 2023 17:34:54 +0900 Subject: [PATCH 125/146] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E5=9B=9E?= =?UTF-8?q?=E9=81=BF=E3=81=AE=E3=81=9F=E3=82=81keccak256=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E3=82=92=E5=9B=9E=E9=81=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contracts/localNouns/LocalNounsSeeder.sol | 40 +++++++++---------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/contract/contracts/localNouns/LocalNounsSeeder.sol b/contract/contracts/localNouns/LocalNounsSeeder.sol index cd7a847a..04928d38 100644 --- a/contract/contracts/localNouns/LocalNounsSeeder.sol +++ b/contract/contracts/localNouns/LocalNounsSeeder.sol @@ -21,26 +21,22 @@ import { ILocalNounsSeeder } from './interfaces/ILocalNounsSeeder.sol'; import { INounsDescriptorMinimal } from './interfaces/INounsDescriptorMinimal.sol'; contract LocalNounsSeeder is ILocalNounsSeeder { - /** - * @notice Generate a pseudo-random Noun seed using the previous blockhash and noun ID. - */ - function generateSeed(uint256 prefectureId, uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory) { - uint256 pseudorandomness = uint256( - keccak256(abi.encodePacked(blockhash(block.number - 1), nounId)) - ); - - uint256 accessoryCount = descriptor.accessoryCountInPrefecture(prefectureId % 100); // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 - uint256 headCount = descriptor.headCountInPrefecture(prefectureId); - - uint256 accesoryPartId = descriptor.accessoryInPrefecture(prefectureId % 100, (pseudorandomness >> 96) % accessoryCount); - uint256 headPartId = descriptor.headInPrefecture(prefectureId, (pseudorandomness >> 144) % headCount); - - return Seed({ - background: 0, - body: 0, - accessory: uint48(accesoryPartId), - head: uint48(headPartId), - glasses: 0 - }); - } + /** + * @notice Generate a pseudo-random Noun seed using the previous blockhash and noun ID. + */ + function generateSeed( + uint256 prefectureId, + uint256 nounId, + INounsDescriptorMinimal descriptor + ) external view returns (Seed memory) { + uint256 pseudorandomness = (block.number - 1) + nounId; + + uint256 accessoryCount = descriptor.accessoryCountInPrefecture(prefectureId % 100); // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 + uint256 headCount = descriptor.headCountInPrefecture(prefectureId); + + uint256 accesoryPartId = descriptor.accessoryInPrefecture(prefectureId % 100, pseudorandomness % accessoryCount); + uint256 headPartId = descriptor.headInPrefecture(prefectureId, pseudorandomness % headCount); + + return Seed({ background: 0, body: 0, accessory: uint48(accesoryPartId), head: uint48(headPartId), glasses: 0 }); + } } From f9f9d525fd2b40f89d670c5783e00123c764a3c4 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 29 Nov 2023 17:36:43 +0900 Subject: [PATCH 126/146] =?UTF-8?q?=E3=83=AD=E3=82=A4=E3=83=A4=E3=83=AA?= =?UTF-8?q?=E3=83=86=E3=82=A3=E8=A8=AD=E5=AE=9A=E3=82=92=E5=8F=AF=E5=A4=89?= =?UTF-8?q?=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 44 ++++++++++++++++---------- contract/test/localNouns.ts | 23 ++++++++------ 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 8aebee39..a1aba9aa 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -20,11 +20,13 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { mapping(uint256 => uint256[]) public tradePrefecture; // トレード先指定の都道府県 mapping(uint256 => address) public tradeAddress; // トレード先指定のアドレス - address public administratorsAddress; // 運営ウォレット - address public developpersAddress; // 開発者ウォレット + address[] public royaltyAddresses; // ロイヤリティ送信先ウォレット + mapping(address => uint256) public royaltyRatio; // ロイヤリティ送信先ウォレットごとの割合 + uint256 royaltyRatioTotal; // royaltyRatioの合計(割戻用) bool public canSetApproval = false; // setApprovalForAll, approveの可否 uint256 public tradeRoyalty = 0.003 ether; // P2Pトレードのロイヤリティ + uint256 public salesRoyaltyBasisPoint = 1000; // P2Pセールのロイヤリティ、購入価格の10% constructor( IAssetProviderExMint _assetProvider, @@ -33,8 +35,11 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { description = 'Local Nouns'; assetProvider2 = _assetProvider; minter = _minter; - administratorsAddress = msg.sender; - developpersAddress = msg.sender; + + // ロイヤリティ送信先(コンストラクタではデプロイアドレス100%) + royaltyAddresses = [msg.sender]; + royaltyRatio[msg.sender] = 1; + royaltyRatioTotal = 1; } function tokenName(uint256 _tokenId) internal pure override returns (string memory) { @@ -121,12 +126,16 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { canSetApproval = _canSetApproval; } - function setAdministratorsAddress(address _admin) external onlyOwner { - administratorsAddress = _admin; - } + function setRoyaltyAddresses(address[] memory _addr, uint256[] memory ratio) external onlyOwner { + // 引数の整合性チェック + require(_addr.length == ratio.length, 'Invalid Arrays length'); + royaltyAddresses = _addr; + royaltyRatioTotal = 0; - function setDeveloppersAddress(address _developper) external onlyOwner { - developpersAddress = _developper; + for (uint256 i = 0; i < _addr.length; i++) { + royaltyRatio[_addr[i]] = ratio[i]; + royaltyRatioTotal += ratio[i]; + } } /** @@ -208,9 +217,14 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { tradeRoyalty = _royalty; } + function setSalesRoyaltyBasisPoint(uint256 _bp) external onlyOwner { + salesRoyaltyBasisPoint = _bp; + } + // pay royalties to admin here function _processRoyalty(uint _salesPrice, uint) internal override returns (uint256 royalty) { - royalty = (_salesPrice * 100) / 1000; // 10.0% + // royalty = (_salesPrice * 100) / 1000; // 10.0% + royalty = (_salesPrice * salesRoyaltyBasisPoint) / 10000; _sendRoyalty(royalty); } @@ -221,9 +235,9 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { // send royalties to admin and developper function _sendRoyalty(uint _royalty) internal { - uint halfRoyalty = _royalty / 2; - _trySendRoyalty(administratorsAddress, halfRoyalty); - _trySendRoyalty(developpersAddress, _royalty - halfRoyalty); + for (uint256 i = 0; i < royaltyAddresses.length; i++) { + _trySendRoyalty(royaltyAddresses[i], (_royalty * royaltyRatio[royaltyAddresses[i]]) / royaltyRatioTotal); + } } function _trySendRoyalty(address to, uint amount) internal { @@ -232,9 +246,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { } function withdraw() external payable onlyOwner { - require(administratorsAddress != address(0), "Shouldn't be 0"); - (bool sent, ) = payable(administratorsAddress).call{ value: address(this).balance }(''); - require(sent, 'failed to move fund'); + _sendRoyalty(address(this).balance); } // 二重継承でエラーになるので個別関数を準備 diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index c4b48be0..aef912c4 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -249,7 +249,8 @@ describe('determinePrefectureId', function () { it('mint all prefecture', async function () { - const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(owner).functions.setPhase(2); + const txParams = { value: ethers.utils.parseUnits("0.3", "ether") }; // 全ての都道府県が1以上出現する for (var i = 0; i < 47; i++) { @@ -257,15 +258,15 @@ describe('determinePrefectureId', function () { const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(i + 1); console.log("mint all prefecture", i + 1); - await minter.connect(user1).functions.mintSelectedPrefecture(i + 1, 1, txParams); + await minter.connect(user1).functions.mintSelectedPrefecture(i + 1, 5, txParams); // ミント後の都道府県ごとのカウント const [mintNumberPerPrefecture2] = await provider.functions.mintNumberPerPrefecture(i + 1); - expect(mintNumberPerPrefecture2.sub(mintNumberPerPrefecture).toNumber(), "prefectureId:" + (i + 1)).to.equal(1); + expect(mintNumberPerPrefecture2.sub(mintNumberPerPrefecture).toNumber(), "prefectureId:" + (i + 1)).to.equal(5); } - }); + }).timeout(600000); // タイムアウトを60秒に設定 }); describe('P2P', function () { @@ -321,8 +322,9 @@ describe('P2P', function () { it('Purchase', async function () { await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Not enough fund'); - await token.connect(owner).setAdministratorsAddress(admin.address); - await token.connect(owner).setDeveloppersAddress(developper.address); + // await token.connect(owner).setAdministratorsAddress(admin.address); + // await token.connect(owner).setDeveloppersAddress(developper.address); + await token.connect(owner).setRoyaltyAddresses([developper.address,admin.address],[3,1]); result = await token.ownerOf(tokenId1); @@ -335,11 +337,11 @@ describe('P2P', function () { expect(result).equal(user2.address); const balance12 = await ethers.provider.getBalance(user1.address); - expect(balance12.sub(balance1)).equal(price.div(20).mul(18)); // 90% + expect(balance12.sub(balance1)).equal(price.div(40).mul(36)); // 90% const balanceA2 = await ethers.provider.getBalance(admin.address); - expect(balanceA2.sub(balanceA)).equal(price.div(20).mul(1)); // 5% + expect(balanceA2.sub(balanceA)).equal(price.div(40).mul(1)); // 5% const balanceD2 = await ethers.provider.getBalance(developper.address); - expect(balanceD2.sub(balanceD)).equal(price.div(20).mul(1)); // 5% + expect(balanceD2.sub(balanceD)).equal(price.div(40).mul(3)); // 15% }); @@ -392,6 +394,9 @@ describe('P2PTradable', function () { }); it('put trade', async function () { + + await token.connect(owner).setRoyaltyAddresses([developper.address,admin.address],[1,1]); + // 希望都道府県外のトークンと交換しようとする await token.connect(user1).putTradeLocalNoun(tokenId1, [1, 11, 12], zeroAddress); await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams)).revertedWith('unmatch to the wants list'); From 4a8c72f421be23a2ce8d2fd37b37dd229ac7dd76 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Wed, 29 Nov 2023 17:38:17 +0900 Subject: [PATCH 127/146] =?UTF-8?q?=E3=83=AD=E3=82=A4=E3=83=A4=E3=83=AA?= =?UTF-8?q?=E3=83=86=E3=82=A3=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/setup_localNouns.ts | 34 +++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/contract/scripts/setup_localNouns.ts b/contract/scripts/setup_localNouns.ts index e0a38540..50674f81 100644 --- a/contract/scripts/setup_localNouns.ts +++ b/contract/scripts/setup_localNouns.ts @@ -28,13 +28,35 @@ async function main() { const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); // tokengateに設定 - const nfts = [ - "0x898a7dBFdDf13962dF089FBC8F069Fa7CE92cDBb", // NDJ-PFP - "0x866648Ef4Dd51e857cA05ea200eD5D5D0c6f93Ce", // NDJ-POAP - "0x09d53609a3709BBc1206B9Aa8C54DC71625e31aC", // Nounish CNP - "0x4bE962499cE295b1ed180F923bf9c73b6357DE80" // pNouns + if (network.name == 'mumbai') { + const nfts = [ + "0x9f3aBc7b9f17Fb58a367bdA86e6129a2F5849942" // TEST用 + ]; + await tokenGate.functions['setWhitelist'](nfts); + } else { + const nfts = [ + "0x898a7dBFdDf13962dF089FBC8F069Fa7CE92cDBb", // NDJ-PFP + "0x866648Ef4Dd51e857cA05ea200eD5D5D0c6f93Ce", // NDJ-POAP + "0x09d53609a3709BBc1206B9Aa8C54DC71625e31aC", // Nounish CNP + "0x4bE962499cE295b1ed180F923bf9c73b6357DE80" // pNouns + ]; + await tokenGate.functions['setWhitelist'](nfts); + } + + // ロイヤリティ設定 + const rolyaltyAddresses = [ + '0xA0B9D89F6d17658EAA71fC0b916fCCB248340382', // eiba + '0x52A76a606AC925f7113B4CC8605Fe6bCad431EbB', // takumi(仮) + '0x35e5664686475Fe0Fb05300a1708B3C7243F916e', // deynao(仮) + '0x2072C081C77A476c28d4B2e0F86ED8A789BD8078' // udon(仮) + ]; + const rolyaltyRatio = [ + 5, // eiba + 2, // takumi + 2, // deynao + 1 // udon ]; - await tokenGate.functions['setWhitelist'](nfts); + await localToken.functions['setRoyaltyAddresses'](rolyaltyAddresses, rolyaltyRatio); // 運営用初期ミント // 300体を都道府県割合で運用へミント From 2ed0ded04e869ea73433a4818c8cde27f37075b3 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 30 Nov 2023 10:03:00 +0900 Subject: [PATCH 128/146] =?UTF-8?q?gasMultiplier=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/hardhat.config.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contract/hardhat.config.ts b/contract/hardhat.config.ts index faaa2626..bfaa1746 100644 --- a/contract/hardhat.config.ts +++ b/contract/hardhat.config.ts @@ -37,6 +37,7 @@ const config: HardhatUserConfig = { mumbai: { // url: "https://rpc-mumbai.maticvigil.com", url: "https://polygon-mumbai.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY, + gasMultiplier: 1.1, accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], }, @@ -54,7 +55,7 @@ const config: HardhatUserConfig = { }, mainnet: { url: "https://eth-mainnet.alchemyapi.io/v2/" + process.env.ALCHEMY_API_KEY, - gasMultiplier: 1.2, + gasMultiplier: 1.1, accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], } From b66d628a8bad2f4e6458411badc0854c2b57a663 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 15 Dec 2023 07:20:09 +0900 Subject: [PATCH 129/146] =?UTF-8?q?mumbai=E3=82=AC=E3=82=B9=E5=84=AA?= =?UTF-8?q?=E5=85=88=E5=BA=A6=E8=A8=AD=E5=AE=9A=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contract/hardhat.config.ts b/contract/hardhat.config.ts index bfaa1746..e2cdb433 100644 --- a/contract/hardhat.config.ts +++ b/contract/hardhat.config.ts @@ -37,7 +37,7 @@ const config: HardhatUserConfig = { mumbai: { // url: "https://rpc-mumbai.maticvigil.com", url: "https://polygon-mumbai.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY, - gasMultiplier: 1.1, + gasMultiplier: 1.3, accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], }, From ff24014a4d4a60795bbb5e34a5c790d811636899 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 15 Dec 2023 07:35:30 +0900 Subject: [PATCH 130/146] =?UTF-8?q?NounsSeeder=E5=BB=83=E6=AD=A2=E3=80=81R?= =?UTF-8?q?andomizer=E3=82=92=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../localNouns/LocalNounsProvider2.sol | 232 ++++++++++++++++++ contract/scripts/deploy_localNouns.ts | 17 +- .../scripts/deploy_localNounsProvider2.ts | 42 ++++ 3 files changed, 277 insertions(+), 14 deletions(-) create mode 100644 contract/contracts/localNouns/LocalNounsProvider2.sol create mode 100644 contract/scripts/deploy_localNounsProvider2.ts diff --git a/contract/contracts/localNouns/LocalNounsProvider2.sol b/contract/contracts/localNouns/LocalNounsProvider2.sol new file mode 100644 index 00000000..8ed1bae1 --- /dev/null +++ b/contract/contracts/localNouns/LocalNounsProvider2.sol @@ -0,0 +1,232 @@ +// SPDX-License-Identifier: MIT + +/* + * Created by Isamu Arimoto (@isamua) + */ + +pragma solidity ^0.8.6; + +import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +import './interfaces/IAssetProviderExMint.sol'; +import '@openzeppelin/contracts/utils/Strings.sol'; +import '@openzeppelin/contracts/interfaces/IERC165.sol'; +import 'randomizer.sol/Randomizer.sol'; + +import { INounsDescriptor } from './interfaces/INounsDescriptor.sol'; +import { INounsSeeder } from './interfaces/INounsSeeder.sol'; + +contract LocalNounsProvider2 is IAssetProviderExMint, IERC165, Ownable { + using Strings for uint256; + using Randomizer for Randomizer.Seed; + + string constant providerKey = 'LocalNouns'; + address public receiver; + + uint256 public nextTokenId; + + INounsDescriptor public immutable descriptor; + INounsDescriptor public immutable localDescriptor; + + mapping(uint256 => uint256) public tokenIdToPrefectureId; + mapping(uint256 => string) public prefectureName; + mapping(uint256 => uint256) public mintNumberPerPrefecture; // 都道府県ごとのミント数 + // mapping(uint256 => uint256) public prefectureRatio; // ランダムミント時に決定される都道府県の割合 + uint256 totalPrefectureRatio; + + uint256[5] ratioRank = [5, 4, 3, 3, 2]; + uint256[5] accumulationRatioRank; + uint256 accumulationRatioRankTotal; + mapping(uint256 => uint256[]) public prefectureRatio; + + constructor(INounsDescriptor _descriptor, INounsDescriptor _localDescriptor) { + receiver = owner(); + + descriptor = _descriptor; + localDescriptor = _localDescriptor; + + prefectureName[1] = 'Hokkaido'; + prefectureName[2] = 'Aomori'; + prefectureName[3] = 'Iwate'; + prefectureName[4] = 'Miyagi'; + prefectureName[5] = 'Akita'; + prefectureName[6] = 'Yamagata'; + prefectureName[7] = 'Fukushima'; + prefectureName[8] = 'Ibaraki'; + prefectureName[9] = 'Tochigi'; + prefectureName[10] = 'Gunma'; + prefectureName[11] = 'Saitama'; + prefectureName[12] = 'Chiba'; + prefectureName[13] = 'Tokyo'; + prefectureName[14] = 'Kanagawa'; + prefectureName[15] = 'Niigata'; + prefectureName[16] = 'Toyama'; + prefectureName[17] = 'Ishikawa'; + prefectureName[18] = 'Fukui'; + prefectureName[19] = 'Yamanashi'; + prefectureName[20] = 'Nagano'; + prefectureName[21] = 'Gifu'; + prefectureName[22] = 'Shizuoka'; + prefectureName[23] = 'Aichi'; + prefectureName[24] = 'Mie'; + prefectureName[25] = 'Shiga'; + prefectureName[26] = 'Kyoto'; + prefectureName[27] = 'Osaka'; + prefectureName[28] = 'Hyogo'; + prefectureName[29] = 'Nara'; + prefectureName[30] = 'Wakayama'; + prefectureName[31] = 'Tottori'; + prefectureName[32] = 'Shimane'; + prefectureName[33] = 'Okayama'; + prefectureName[34] = 'Hiroshima'; + prefectureName[35] = 'Yamaguchi'; + prefectureName[36] = 'Tokushima'; + prefectureName[37] = 'Kagawa'; + prefectureName[38] = 'Ehime'; + prefectureName[39] = 'Kochi'; + prefectureName[40] = 'Fukuoka'; + prefectureName[41] = 'Saga'; + prefectureName[42] = 'Nagasaki'; + prefectureName[43] = 'Kumamoto'; + prefectureName[44] = 'Oita'; + prefectureName[45] = 'Miyazaki'; + prefectureName[46] = 'Kagoshima'; + prefectureName[47] = 'Okinawa'; + + prefectureRatio[0] = [13, 14, 27, 23, 11, 12, 28, 1, 40]; + prefectureRatio[1] = [22, 8, 34, 26, 4, 15, 20, 21, 10]; + prefectureRatio[2] = [9, 33, 7, 24, 43, 46, 47, 25, 35]; + prefectureRatio[3] = [29, 38, 42, 2, 3, 17, 44, 45, 6, 16]; + prefectureRatio[4] = [37, 5, 30, 19, 41, 18, 36, 39, 32, 31]; + + for (uint256 i = 0; i < ratioRank.length; i++) { + accumulationRatioRankTotal += ratioRank[i]; + accumulationRatioRank[i] = accumulationRatioRankTotal; + } + } + + function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { + return interfaceId == type(IAssetProvider).interfaceId || interfaceId == type(IERC165).interfaceId; + } + + function getOwner() external view override returns (address) { + return owner(); + } + + function getProviderInfo() external view override returns (ProviderInfo memory) { + return ProviderInfo(providerKey, 'Logo', this); + } + + function totalSupply() external pure override returns (uint256) { + return 0; // indicating "dynamically (but deterministically) generated from the given assetId) + } + + function processPayout(uint256 _assetId) external payable override { + address payable payableTo = payable(receiver); + payableTo.transfer(msg.value); + emit Payout(providerKey, _assetId, payableTo, msg.value); + } + + function setReceiver(address _receiver) external onlyOwner { + receiver = _receiver; + } + + function generateSeed( + uint256 prefectureId, + uint256 _assetId + ) internal view returns (INounsSeeder.Seed memory mixedSeed) { + uint256 pseudorandomness; + Randomizer.Seed memory seed = Randomizer.Seed(_assetId, 0); + + // LocalNounsのヘッドを決定 + uint256 headCount = localDescriptor.headCountInPrefecture(prefectureId); + (seed, pseudorandomness) = seed.random(headCount); + uint256 headPartId = localDescriptor.headInPrefecture(prefectureId, pseudorandomness); + + // LocalNounsのアクセサリを決定 + uint256 accessoryCount = localDescriptor.accessoryCountInPrefecture(prefectureId % 100); // 1,2桁目:都道府県番号、3桁目以降:バージョン番号 + (seed, pseudorandomness) = seed.random(accessoryCount); + uint256 accesoryPartId = localDescriptor.accessoryInPrefecture(prefectureId % 100, pseudorandomness); + + // Nounsのバックグラウンドを決定 + uint256 backgroundCount = descriptor.backgroundCount(); + (seed, pseudorandomness) = seed.random(backgroundCount); + uint256 backgroundPartId = pseudorandomness; + + // Nounsのボディを決定 + uint256 bodyCount = descriptor.bodyCount(); + (seed, pseudorandomness) = seed.random(bodyCount); + uint256 bodyPartId = pseudorandomness; + + // Nounsのグラスを決定 + uint256 glassesCount = descriptor.glassesCount(); + (seed, pseudorandomness) = seed.random(glassesCount); + uint256 glassesPartId = pseudorandomness; + + mixedSeed = INounsSeeder.Seed({ + background: uint48(backgroundPartId), + body: uint48(bodyPartId), + accessory: uint48(accesoryPartId), + head: uint48(headPartId), + glasses: uint48(glassesPartId) + }); + } + + function generateSVGPart(uint256 _assetId) public view override returns (string memory svgPart, string memory tag) { + INounsSeeder.Seed memory seed = generateSeed(tokenIdToPrefectureId[_assetId], _assetId); + + svgPart = localDescriptor.generateSVGImage(seed); + tag = string(''); + } + + function generateTraits(uint256 _assetId) external view override returns (string memory traits) { + INounsSeeder.Seed memory seed = generateSeed(tokenIdToPrefectureId[_assetId], _assetId); + + uint256 headPartsId = seed.head; + uint256 accessoryPartsId = seed.accessory; + traits = string( + abi.encodePacked( + '{"trait_type": "prefecture" , "value":"', + prefectureName[tokenIdToPrefectureId[_assetId] % 100], + '"}', + ',{"trait_type": "head" , "value":"', + localDescriptor.headName(headPartsId), + '"}', + ',{"trait_type": "accessory" , "value":"', + localDescriptor.accessoryName(accessoryPartsId), + '"}' + ) + ); + } + + // テスト用にpublic + function determinePrefectureId(uint256 _assetId) public view returns (uint256) { + uint256 rank = _assetId % accumulationRatioRankTotal; + for (uint256 i = 0; i < accumulationRatioRank.length; i++) { + if (rank < accumulationRatioRank[i]) { + rank = i; + break; + } + } + return prefectureRatio[rank][_assetId % prefectureRatio[rank].length]; + } + + function mint(uint256 _prefectureId, uint256 _assetId) external returns (uint256) { + uint256 prefectureId; + // 末尾2桁が00の場合は都道府県をランダムに決定する + if (_prefectureId % 100 == 0) { + prefectureId = _prefectureId + determinePrefectureId(_assetId); + } else { + prefectureId = _prefectureId; + } + + tokenIdToPrefectureId[_assetId] = prefectureId; + mintNumberPerPrefecture[prefectureId % 100]++; + nextTokenId++; + + return _assetId; + } + + function getPrefectureId(uint256 _tokenId) external view override returns (uint256) { + return tokenIdToPrefectureId[_tokenId]; + } +} diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts index b59660b9..6e7e0ee1 100644 --- a/contract/scripts/deploy_localNouns.ts +++ b/contract/scripts/deploy_localNouns.ts @@ -4,7 +4,6 @@ import { writeFile } from 'fs'; import { addresses } from '../../src/utils/addresses'; const nounsDescriptor = addresses.nounsDescriptor[network.name]; -const nounsSeeder = addresses.nounsSeeder[network.name]; const nftDescriptor = addresses.nftDescriptor[network.name]; async function main() { @@ -20,16 +19,6 @@ async function main() { const addresses0 = `export const addresses = {\n` + ` tokenGate:"${tokenGate.address}",\n` + `}\n`; await writeFile(`../src/utils/addresses/tokenGate_${network.name}.ts`, addresses0, () => { }); - const factorySeeder = await ethers.getContractFactory('LocalNounsSeeder'); - const localseeder = await factorySeeder.deploy(); - await localseeder.deployed(); - console.log(`##localseeder="${localseeder.address}"`); - await runCommand(`npx hardhat verify ${localseeder.address} --network ${network.name} &`); - - const addresses = `export const addresses = {\n` + ` localseeder:"${localseeder.address}",\n` + `}\n`; - await writeFile(`../src/utils/addresses/localseeder_${network.name}.ts`, addresses, () => { }); - - const factoryLocalNounsDescriptor = await ethers.getContractFactory('LocalNounsDescriptor', { libraries: { NFTDescriptor: nftDescriptor, @@ -46,11 +35,11 @@ async function main() { await writeFile(`../src/utils/addresses/localNounsDescriptor_${network.name}.ts`, addresses2, () => { }); - const factorySVGStore = await ethers.getContractFactory('LocalNounsProvider'); - const provider = await factorySVGStore.deploy(nounsDescriptor, localNounsDescriptor.address, nounsSeeder, localseeder.address); + const factoryProvider = await ethers.getContractFactory('LocalNounsProvider2'); + const provider = await factoryProvider.deploy(nounsDescriptor, localNounsDescriptor.address); await provider.deployed(); console.log(`##LocalNounsProvider="${provider.address}"`); - await runCommand(`npx hardhat verify ${provider.address} ${nounsDescriptor} ${localNounsDescriptor.address} ${nounsSeeder} ${localseeder.address} --network ${network.name} &`); + await runCommand(`npx hardhat verify ${provider.address} ${nounsDescriptor} ${localNounsDescriptor.address} --network ${network.name} &`); const addresses3 = `export const addresses = {\n` + ` localNounsProvider:"${provider.address}",\n` + `}\n`; await writeFile(`../src/utils/addresses/localNounsProvider_${network.name}.ts`, addresses3, () => { }); diff --git a/contract/scripts/deploy_localNounsProvider2.ts b/contract/scripts/deploy_localNounsProvider2.ts new file mode 100644 index 00000000..006252fb --- /dev/null +++ b/contract/scripts/deploy_localNounsProvider2.ts @@ -0,0 +1,42 @@ +// LocalNounsTokenとLocalNounsProviderのみデプロイ +import { ethers, network } from 'hardhat'; +import { writeFile } from 'fs'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; +const localNounsDescriptor = addresses.localNounsDescriptor[network.name]; +const localNounsMinter = addresses.localNounsMinter[network.name]; + +async function main() { + + const factoryProvider = await ethers.getContractFactory('LocalNounsProvider2'); + const provider = await factoryProvider.deploy(nounsDescriptor, localNounsDescriptor); + await provider.deployed(); + console.log(`##LocalNounsProvider="${provider.address}"`); + await runCommand(`npx hardhat verify ${provider.address} ${nounsDescriptor} ${localNounsDescriptor} --network ${network.name} &`); + + const addresses3 = `export const addresses = {\n` + ` localNounsProvider:"${provider.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsProvider_${network.name}.ts`, addresses3, () => { }); + + + const factoryToken = await ethers.getContractFactory('LocalNounsToken'); + const token = await factoryToken.deploy(provider.address, localNounsMinter); + await token.deployed(); + console.log(`##LocalNounsToken="${token.address}"`); + await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${localNounsMinter} --network ${network.name} &`); + + const addresses4 = `export const addresses = {\n` + ` localNounsToken:"${token.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsToken_${network.name}.ts`, addresses4, () => { }); + +} + +async function runCommand(command: string) { + if (network.name !== 'localhost') { + console.log(command); + } +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); \ No newline at end of file From 1ff4da3854ab6be012a462abcdef635b3bd421ee Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 15 Dec 2023 07:38:50 +0900 Subject: [PATCH 131/146] =?UTF-8?q?=E3=83=88=E3=83=A9=E3=83=B3=E3=82=B6?= =?UTF-8?q?=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3=E3=83=8F=E3=83=83=E3=82=B7?= =?UTF-8?q?=E3=83=A5=E3=83=AD=E3=82=B0=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/populate_localNouns.ts | 57 ++++++++++-------------- contract/scripts/populate_localNouns2.ts | 4 +- contract/scripts/setup_localNouns.ts | 24 ++++++---- 3 files changed, 41 insertions(+), 44 deletions(-) diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts index 8493e57f..31d31304 100644 --- a/contract/scripts/populate_localNouns.ts +++ b/contract/scripts/populate_localNouns.ts @@ -4,7 +4,7 @@ import { addresses } from '../../src/utils/addresses'; const nounsDescriptor = addresses.nounsDescriptor[network.name]; -import { images, palette,bgcolors } from "../test/image-local-data"; +import { images, palette, bgcolors } from "../test/image-local-data"; import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; @@ -33,25 +33,30 @@ async function main() { const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); + let tx; if (true) { - - // set Background - console.log(`set backgrounds start`); - await localNounsDescriptor.addManyBackgrounds(bgcolors); - console.log(`set backgrounds end`); + // set Background Nounsコントラクトを使用するため不要 + // console.log(`set backgrounds start`); + // tx = await localNounsDescriptor.addManyBackgrounds(bgcolors); + // console.log(`set backgrounds end:`, tx.hash); // set Palette console.log(`set Palette start`); - await localNounsDescriptor.addManyColorsToPalette(0, palette); - console.log(`set Palette end`); + tx = await localNounsDescriptor.addManyColorsToPalette(0, palette); + console.log(`set Palette end`, tx.hash); // set Accessories console.log(`set Accessories start`); const accessoryChunk = chunkArrayByPrefectureId(images.accessories); for (const chunk of accessoryChunk) { const prefectureId = chunk[0].prefectureId; - await localNounsDescriptor.addManyAccessories(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); - // console.log("chunk:", prefectureId, chunk); + + // トランザクションエラーで再実行する場合に成功している都道府県をスキップ + // if (Number(prefectureId) <= 47 ) { + // continue; + // } + tx = await localNounsDescriptor.addManyAccessories(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + console.log("chunk:", prefectureId, tx.hash); } console.log(`set Accessories end`); @@ -60,32 +65,18 @@ async function main() { const headChunk = chunkArrayByPrefectureId(images.heads); for (const chunk of headChunk) { const prefectureId = chunk[0].prefectureId; - await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); - // console.log("chunk:", prefectureId, chunk); + + // トランザクションエラーで再実行する場合に成功している都道府県をスキップ + // if (Number(prefectureId) <= 36 ) { + // continue; + // } + tx = await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + console.log("chunk:", prefectureId, tx.hash); } console.log(`set Heads end`); } - // for (var i: number = 1; i <= 47; i++) { - // try { - // await localMinter.functions['mintSelectedPrefecture(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.000001') }); - - // console.log(`mint [`, i, `]`); - // } catch (error) { - // console.error(error); - // }; - // } - - // console.log(`write file start`); - // const index = 0; - // const ret = await localToken.tokenURI(index); - // const json = Buffer.from(ret.split(",")[1], 'base64').toString(); - // const svgB = Buffer.from(JSON.parse(json)["image"].split(",")[1], 'base64').toString(); - // const svg = Buffer.from(svgB, 'base64').toString(); - // // fs.writeFileSync(`./svg/${index}.svg`, svg, { encoding: 'utf8' }); - // console.log(`write file end`); - } main().catch(error => { @@ -101,7 +92,6 @@ interface ImageData { function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { let map = new Map(); - for (let i = 0; i < imagedata.length; i++) { // dataが空っぽはスキップ if (imagedata[i].data === undefined) { @@ -112,7 +102,6 @@ function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { let filename = imagedata[i].filename.split('-'); let id = filename[0]; imagedata[i].prefectureId = id; - // filenameの抽出 ex)"35-yamaguchi-white -snake-accessories" -> "white-snake" let name = ''; for (var j = 2; j < filename.length - 1; j++) { @@ -122,7 +111,7 @@ function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { name += filename[j].trim(); } imagedata[i].filename = name; - console.log("imagedata[i].filename", imagedata[i].filename); + // console.log("imagedata[i].filename", imagedata[i].filename); if (!map.has(id)) { map.set(id, []); } diff --git a/contract/scripts/populate_localNouns2.ts b/contract/scripts/populate_localNouns2.ts index 2d26396a..1ec74352 100644 --- a/contract/scripts/populate_localNouns2.ts +++ b/contract/scripts/populate_localNouns2.ts @@ -36,14 +36,16 @@ async function main() { const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); + let tx; if (true) { // set Heads console.log(`set Heads start`); const headChunk = chunkArrayByPrefectureId(images.heads); for (const chunk of headChunk) { const prefectureId = chunk[0].prefectureId; - await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); + tx = await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); // console.log("chunk:", prefectureId, chunk); + console.log(prefectureId,tx.hash); } console.log(`set Heads end`); diff --git a/contract/scripts/setup_localNouns.ts b/contract/scripts/setup_localNouns.ts index 50674f81..38288d61 100644 --- a/contract/scripts/setup_localNouns.ts +++ b/contract/scripts/setup_localNouns.ts @@ -1,4 +1,4 @@ -import * as dotenv from "dotenv"; +// import * as dotenv from "dotenv"; import { ethers, network } from 'hardhat'; import { addresses } from '../../src/utils/addresses'; @@ -7,8 +7,6 @@ const nounsDescriptor = addresses.nounsDescriptor[network.name]; import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; import { abi as tokenGateABI } from "../artifacts/contracts/libs/AssetTokenGate.sol/AssetTokenGate"; -dotenv.config(); - const localTokenAddress = addresses.localNounsToken[network.name]; const tokenGateAddress = addresses.tokenGate[network.name]; @@ -27,12 +25,13 @@ async function main() { const tokenGate = new ethers.Contract(tokenGateAddress, tokenGateABI, wallet); const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + let tx; // tokengateに設定 if (network.name == 'mumbai') { const nfts = [ "0x9f3aBc7b9f17Fb58a367bdA86e6129a2F5849942" // TEST用 ]; - await tokenGate.functions['setWhitelist'](nfts); + tx = await tokenGate.functions['setWhitelist'](nfts); } else { const nfts = [ "0x898a7dBFdDf13962dF089FBC8F069Fa7CE92cDBb", // NDJ-PFP @@ -40,8 +39,9 @@ async function main() { "0x09d53609a3709BBc1206B9Aa8C54DC71625e31aC", // Nounish CNP "0x4bE962499cE295b1ed180F923bf9c73b6357DE80" // pNouns ]; - await tokenGate.functions['setWhitelist'](nfts); + tx = await tokenGate.functions['setWhitelist'](nfts); } + console.log("tokengate設定", tx.hash); // ロイヤリティ設定 const rolyaltyAddresses = [ @@ -56,7 +56,8 @@ async function main() { 2, // deynao 1 // udon ]; - await localToken.functions['setRoyaltyAddresses'](rolyaltyAddresses, rolyaltyRatio); + tx = await localToken.functions['setRoyaltyAddresses'](rolyaltyAddresses, rolyaltyRatio); + console.log("ロイヤリティ設定", tx.hash); // 運営用初期ミント // 300体を都道府県割合で運用へミント @@ -112,15 +113,20 @@ async function main() { for (var i = 0; i < mintNumForPrefecture.length; i++) { try { - await localToken.functions['ownerMint']([wallet.address], [mintNumForPrefecture[i][0]], [mintNumForPrefecture[i][1]]); - console.log("mint:", mintNumForPrefecture[i]); + tx = await localToken.functions['ownerMint']([wallet.address], [mintNumForPrefecture[i][0]], [mintNumForPrefecture[i][1]]); + console.log("mint:", mintNumForPrefecture[i], tx.hash); } catch (error) { - console.log("mint error:", mintNumForPrefecture[i]); + console.log("mint error:", mintNumForPrefecture[i], tx.hash); // console.error(error); }; + await sleep(1000); // 1秒待機 } } +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +} + main().catch(error => { console.error(error); process.exitCode = 1; From e240fd9d31fad34596fb632cb02a84cdef9a787b Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 15 Dec 2023 07:39:46 +0900 Subject: [PATCH 132/146] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/test/localNouns.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index aef912c4..37e1b5ac 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -22,12 +22,15 @@ before(async () => { # npx hardhat run scripts/deploy_nounsDescriptorV1.ts # npx hardhat run scripts/populate_nounsV1.ts # npx hardhat run scripts/deploy_localNouns.ts - # npx hardhat run scripts/populate_localNouns_dummy.ts + # npx hardhat run scripts/populate_localNouns.ts # npx hardhat run scripts/deploy_sample.ts note: `npx hardhat node`実行時にJavaScript heap out of memory が発生した場合は環境変数で使用メモリを指定する export NODE_OPTIONS=--max-old-space-size=4096 + # テスト実行 + # npx hardhat test test/localNouns.ts + */ [owner, user1, user2, user3, user4, user5, admin, developper] = await ethers.getSigners(); From 0e0cc8b19ce47000f20b10747adb6f5078613f61 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 15 Dec 2023 07:40:19 +0900 Subject: [PATCH 133/146] =?UTF-8?q?=E9=83=BD=E9=81=93=E5=BA=9C=E7=9C=8C?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=89(ver2)=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E7=94=A8=E3=83=87=E3=83=97=E3=83=AD=E3=82=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/setup_localNouns2.ts | 48 +++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 contract/scripts/setup_localNouns2.ts diff --git a/contract/scripts/setup_localNouns2.ts b/contract/scripts/setup_localNouns2.ts new file mode 100644 index 00000000..a457c132 --- /dev/null +++ b/contract/scripts/setup_localNouns2.ts @@ -0,0 +1,48 @@ +// import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; + +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; + +const localTokenAddress = addresses.localNounsToken[network.name]; + +async function main() { + + let wallet; + if (network.name == 'localhost') { + [wallet] = await ethers.getSigners(); // localhost + } else { + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + wallet = new ethers.Wallet(privateKey, ethers.provider); + + } + + // ethers.Contract オブジェクトのインスタンスを作成 + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + + let tx; + + // 都道府県ヘッドのミント + + for (var i = 101; i <= 147; i++) { + try { + tx = await localToken.functions['ownerMint']([wallet.address], [i], [3]); + console.log("mint:", i, tx.hash); + } catch (error) { + console.log("mint error:", i, tx.hash); + // console.error(error); + }; + await sleep(1000); // 1秒待機 + } +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); From 9c4bd2fa9c70c14dff9a979eb56c517c9d130fc6 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 15 Dec 2023 07:45:43 +0900 Subject: [PATCH 134/146] =?UTF-8?q?=E3=83=91=E3=83=BC=E3=83=84=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/test/image-local-data.json | 316 ++++++++++++++++++++++++++-- 1 file changed, 298 insertions(+), 18 deletions(-) diff --git a/contract/test/image-local-data.json b/contract/test/image-local-data.json index a4a94764..b83fe958 100644 --- a/contract/test/image-local-data.json +++ b/contract/test/image-local-data.json @@ -395,12 +395,16 @@ }, { "filename": "03-iwate-egg-accessories", - "data": "0x0018141b100100020101000101021e01010101021e0101010002010100" + "data": "0x0018131b0f0100020101000101021e01010101021e0101010002010100" }, { "filename": "03-iwate-fujiwara-accessories", "data": "0x0017141c0f0100012303000200012302000200015d02000100026701cd0100046701310101013101670201" }, + { + "filename": "03-iwate-zashikiwarashi-accessories", + "data": "0x0018131c0f022301440100012301880123010004be01be027901be03be0100" + }, { "filename": "04-miyagi-beeftongue-accessories", "data": "0x0019131a0e013501a1013501a10135018501a1018501a10135" @@ -431,7 +435,7 @@ }, { "filename": "06-yamagata-lafrance-accessories", - "data": "0x0019131c10010001840100010001840122022201c601de0222" + "data": "0x0019121c0f010001840100010001840122022201c601de0222" }, { "filename": "06-yamagata-shogi-accessories", @@ -467,7 +471,7 @@ }, { "filename": "09-tochigi-lemon-accessories", - "data": "0x0018131c100152020103c701c7015201c7010101c701010352" + "data": "0x0018121c0f0152020103c701c7015201c7010101c701010352" }, { "filename": "09-tochigi-shimotsukare-accessories", @@ -485,13 +489,21 @@ "filename": "10-gunma-yakimanjyu-accessories", "data": "0x0017161e0e04000236011101220300023401230101010003000136011101340136010002000134011101230101020001000134013601340101013602000100011101340123013403000100012201360134040001220700" }, + { + "filename": "11-saitama-dischargechannel-accessories", + "data": "0x0017171c0c03a0010003a0010003a0010001a001cf020001a0020001cf01a00100010001a001cf020001a0020001cf01a00100010001a001e0020001a0020001e001a00100010001a0030001a0030001a00100010001e0030001e0030001e00100" + }, { "filename": "11-saitama-icicle-accessories", "data": "0x0015171c090e0104000101010001010100010101000101010001010100040001e0010001010100010101000101010001010100060001010100010101000101010001e0010006000101010001e001000101030006000101030001e00300060001e0030001e00300060001e00700" }, + { + "filename": "11-saitama-satsumaimo-accessories", + "data": "0x0019151b0e0100020901280300030901280200010901000309010001090100" + }, { "filename": "11-saitama-soka-senbei-accessories", - "data": "0x0018131b0f0100016001e6010002e601110160011103e60100011101e60100" + "data": "0x0018121b0e0100016001e6010002e601110160011103e60100011101e60100" }, { "filename": "12-chiba-inubosaki-accessories", @@ -503,7 +515,11 @@ }, { "filename": "12-chiba-peanuts-accessories", - "data": "0x0018131b100100016001d8010002600260010001d801600100" + "data": "0x0018121b0f0100016001d8010002600260010001d801600100" + }, + { + "filename": "13-tokyo-scramblecrossing-accessories", + "data": "0x0016161f0c030001010100010101000101010001010201010001010100010101000101010001010a000201060001010100060001010100010101000201020001010100010103000400010105000201080003000101010001010100010101000101020101000101010001010100010101000101" }, { "filename": "13-tokyo-tower-accessories", @@ -511,24 +527,32 @@ }, { "filename": "13-tokyo-yamanote-accessories", - "data": "0x0018141c0f010001c0010101c00100010103bc010101c003bc01c00101010001bc01000101010001c0010101c00100" + "data": "0x0018131c0e010001c0010101c00100010103bc010101c003bc01c00101010001bc01000101010001c0010101c00100" }, { - "filename": "14-ibaraki-natto-accessories", - "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + "filename": "14-kanagawa-akarenga-accessories", + "data": "0x0017171b09010001c8050001c8050001c80161017f056101a10561017f0161017f0461014701a101470461017f01bc01a1010001a101bc01a101bc01a101bc01a101bc014701bc01a1014701a1010001a1014701a1014701a1014701a1034701a1" }, { "filename": "14-kanagawa-baybridge-accessories", "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010001a201a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" }, + { + "filename": "14-kanagawa-escalator-accessories", + "data": "0x0017151d0e02000128010c03000200010c02000128010c0128010c0300010c0100010c02000128010c02000300010c030001000128010c04000100010c0500" + }, { "filename": "14-kanagawa-yacht-accessories", - "data": "0x0018141c100100015402000254014301000254024302000243037f0100" + "data": "0x0018121c0e0100015402000254014301000254024302000243037f0100" }, { "filename": "15-nigata-edamame-accessories", "data": "0x0019141b0e0200014e0200014e0100014e01c00100014e01c0011e01c00100011e01c00100" }, + { + "filename": "15-niigata-poppoyaki-accessories", + "data": "0x0015171c09022802410228024102280241022802280241022802410228024102280e000e0004000135010001350100013501000135010001350100040001350100013501000135010001350100013501000400013501000135010001350100013501000135010004000135010001350100013501000135010001350100" + }, { "filename": "15-niigata-riceear-accessories", "data": "0x0018131d0f02000128010001000128020001c001280100012801c001000128010002c0020002c00200" @@ -577,6 +601,14 @@ "filename": "19-yamanashi-grape-accessories", "data": "0x0018121b0e0200019a01220100019a0112019a019a0112016e01120112016e01450100" }, + { + "filename": "19-yamanashi-momo-accessories", + "data": "0x0018121a0f0100024c0220010002eb0100" + }, + { + "filename": "20-nagano-gyunyupan-accessories", + "data": "0x0017171b09028e0100038e0100038e0100038e0288018e0388018e0388018e0388020101000b01028801000b88028e01000b8e" + }, { "filename": "20-nagano-kappa-accessories", "data": "0x0018131a0e020f0201010f0100013e0123013e01000100023e022a" @@ -601,10 +633,18 @@ "filename": "21-gifu-ukaibody-accessories", "data": "0x0015171f090592075402920592075402920592075402920592075402920292010002920754029202920100029207540292029201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" }, + { + "filename": "22-shizuoka-chabatake-accessories", + "data": "0x0017171e0c08000379080003e104000779040007e10879030008e103000479070004e10700" + }, { "filename": "22-shizuoka-fuji-accessories", "data": "0x0017171d0c090002e0020003e0020001010300060002320101020003e0020005320100040001e10632020001dd04e1043204dd07e1" }, + { + "filename": "22-shizuoka-sakuraebi-accessories", + "data": "0x0018121b0e0300010e0238010e013801380300010001380200" + }, { "filename": "23-aichi-misodengaku-accessories", "data": "0x0019141c0e03350157020001570235015702600335016302000163023501630260" @@ -617,6 +657,10 @@ "filename": "23-aichi-tebasaki-accessories", "data": "0x0017131a0e010001480300014804000548010003480100" }, + { + "filename": "23-aichi-uiro-accessories", + "data": "0x0019151a0e0186010001790100016a010001c10186010001790100016a010001c1" + }, { "filename": "24-mie-iseebi-accessories", "data": "0x0017151e0d02000132020001320200010001320100023201000132010001000132010002320100013201000132021802320218013201320100011802b40118010001320100011801000232010001180100030002b40300020001180132011801320200" @@ -625,6 +669,14 @@ "filename": "24-mie-mochi-accessories", "data": "0x0019121a0f018401b80184018401b80184" }, + { + "filename": "24-mie-pearl-accessories", + "data": "0x001514170d01010500010101000101030001010100020003010200" + }, + { + "filename": "25-shiga-akakonnyaku-accessories", + "data": "0x0018141a0e032c0200012c022c0200022c012c0200032c" + }, { "filename": "25-shiga-funazushi-accessories", "data": "0x0018151a0e01420100013701000137020001420100014201000137010001370142010001420100014201000142" @@ -637,6 +689,10 @@ "filename": "26-kyoto-daimonji-accessories", "data": "0x0017161d0d0300011405000200011401490114040003140149031402000749020002000114014901140400021401490100014904140249030003490100" }, + { + "filename": "26-kyoto-torii-accessories", + "data": "0x0016171e0d0300070e04000141010001410100014101000200070c014103000124014101240100012401410100070e022401000100014101000141010001410100012402000741010c0200010001410300014104000100010e0300010e0400" + }, { "filename": "26-kyoto-yatsuhashi-accessories", "data": "0x0018131a0e02000157020001000157018601570100015702860257" @@ -649,13 +705,21 @@ "filename": "27-osaka-jinbezame-accessories", "data": "0x0018161c0d010001a2020001a20400010601a2010002a20400020001a2010602a20106020002a2012302a20106012302a202000206025f01060200" }, + { + "filename": "27-osaka-kushikatsu-accessories", + "data": "0x0018141d0e02b801e6030002b801e6036001b803e6020003b801e6026002b801e6030003b80360" + }, { "filename": "27-osaka-owarai-accessories", "data": "0x0017141c0e0100013301000133020001000533013301000133010001330100010005330300013302000100023301000233" }, + { + "filename": "28-hyogo-akashikaikyobridge-accessories", + "data": "0x0018171d0903000101070001010200020003010500030101000100010101000101010001010300010101000101010001010101020001010200030102000101020001a001400100010101a0014001a0014001a001a601a0010101a001a603000101070001010200" + }, { "filename": "28-hyogo-akashiyaki-accessories", - "data": "0x0019141b0f02000260010001000160015d016001ae015d016002ae0160" + "data": "0x0019131b0e02000260010001000160015d016001ae015d016002ae0160" }, { "filename": "28-hyogo-jst-meridian-accessories", @@ -667,12 +731,16 @@ }, { "filename": "29-nara-kakinohasushi-accessories", - "data": "0x0019141c0f010001c0011b01c0011b0100011b02c0011b019501a2019501a2010002cc019701cc0100" + "data": "0x0019131c0e010001c0011b01c0011b0100011b02c0011b019501a2019501a2010002cc019701cc0100" }, { "filename": "29-nara-narazuke-accessories", "data": "0x0019121a0f03b801b8010001b8" }, + { + "filename": "29-nara-yoshinoyama-accessories", + "data": "0x0017151b0d02e1011b02ba01ed011b01e101ed025f02e101ed025f01ba01ed015f02ba01e1011b015f015f02ba02e1011b02ba015f02e1011b02ed01ba015f" + }, { "filename": "30-wakayama-meharizushi-accessories", "data": "0x0018141c0e010004e1010002e1030101e102c00101021b010102e1030101e1010002e101c001e10100" @@ -685,6 +753,30 @@ "filename": "30-wakayama-nankoume-accessories", "data": "0x001a151b0d024e010002a60100029c024e010002a60100029c" }, + { + "filename": "31-tottori-dunes-accessories", + "data": "0x0019171f0901bd01d8015803d808bd02c9015803c902d806bd02d8015803d802c903d803bd02c9015803c902d803c903d802d8015803d802c903d803c902c9015803c902d803c903d802d8015803d802c903d803c9" + }, + { + "filename": "31-tottori-mosa-shrimp-accessories", + "data": "0x0017161e0b01140100011408000100011601140123011601000114040002000116015101af011401af011401af020003000251011601510116015101140100020002160151011601510200011401af0100011602000116050001510100011601000116030002140151011403000116050001140100" + }, + { + "filename": "31-tottori-sand-borer-accessories", + "data": "0x0015141f0e020001a30300020001c30300020001c30300010001c101c301e90200010002c101e90200010002c102e9010003c102e9010003c10101012301e903c1020101e903c103e903c103e9" + }, + { + "filename": "32-shimane-rope-accessories", + "data": "0x0018171e0b0c7703d8017204d8017203d803000172040001720300010001780100017202780100017801720100017801b1010001b1027801b1027801b1027801b101780100017801b1027801b1027801b102780100020002d8010102d8010102d80200" + }, + { + "filename": "32-shimane-shijimi-clam-accessories", + "data": "0x0018131b0f010003920100036f019d0193019d010003920100" + }, + { + "filename": "32-shimane-tamahagane-accessories", + "data": "0x0018131b0e020001e001060100010001e0010601c8016201e00106016f0262016f03620100" + }, { "filename": "33-oakayama-mamakari-accessories", "data": "0x0019151b0e01a2019d01a2019d01a201000157019d01a2019d01a2019d01060100050601000157" @@ -777,6 +869,14 @@ "filename": "37-kagawa-oliveoil-accessories", "data": "0x0017121c0f010001ac01000100015c0100035c015c01c6015c015c01c6015c035c" }, + { + "filename": "37-kagawa-stairs-accessories", + "data": "0x0015171f0c0a000174090002d7080003740100090501d702000105020001050274010502740100090501d70200010501000474010502740200010505d7010502d702000105057401050274010001d7010505d7010502d70b74" + }, + { + "filename": "37-kagawa-udon-accessories", + "data": "0x0018171e0e01d801e9010b01e905d8010001e9010b01e90500010001e9010b01e905000701020007540200010005010300020003a00400" + }, { "filename": "38-ehime-dango-accessories", "data": "0x0018131c0e0300021b020002a6011b0100027001a60100010001570170020001570400" @@ -793,18 +893,34 @@ "filename": "38-ehime-turt-accessories", "data": "0x0018141c0e0100045701000157037002570157017001570270015701570270015701700157010004570100" }, + { + "filename": "39-kochi-beach-accessories", + "data": "0x0016171f090b00034c0700064c01dd050402c904dd014c02dd010401c90100010404c903020360025601000756010101c90102016002560100085602c90102025601000756020101020160025601000456030102020260025601000401030204600202010004020760" + }, + { + "filename": "39-kochi-ginger-accessories", + "data": "0x0018141c0f020001ad01d8010001d8010001d802e7010001ad01d801e701a601d801ad01d8020001d80400" + }, { "filename": "39-kochi-seared-bonito-accessories", - "data": "0x0019131b0f0378010001780294017801780394" + "data": "0x0018141b0e010003ab020001ab033901ab010001390389013901ab013904890139" }, { "filename": "40-fukuoka-mentaiko-accessories", "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf016a026a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" }, + { + "filename": "40-fukuoka-strawberry-accessories", + "data": "0x0018131b0f0200010f01000100020f0171020f027101000371" + }, { "filename": "40-fukuoka-umegaeda-accessories", "data": "0x0018131c0e010003c1010002c1019702c101c1019701c1019701c101c1029702c1010003c10100" }, + { + "filename": "41-saga-aritayaki-accessories", + "data": "0x0019131b0e010001e0035401e00100011802e0010001e00318" + }, { "filename": "41-saga-saga-accessories", "data": "0x0017151d0e010002560200015601000100015602000156010001560256020001560100015607000156040001560100015601000156010001560100015603560100015601000156" @@ -825,6 +941,10 @@ "filename": "42-nagasaki-milkshake-accessories", "data": "0x0018121d0f014d02000157017101570357037f0100017f0100037f" }, + { + "filename": "43-kumamoto-basashi-accessories", + "data": "0x0017151d0d0600022c0300022c0100022c022c0100022c0100022c022c0100022c0300022c0400010f010003000129040001570700" + }, { "filename": "43-kumamoto-hitomojiguruguru-accessories", "data": "0x001913190e014e01e101c001e1014e" @@ -833,6 +953,10 @@ "filename": "43-kumamoto-ikinaridango-accessories", "data": "0x0018131b0e01000351010001d401b8028401d401d40129012a012901d4010003d40100" }, + { + "filename": "44-oita-hoshishiitake-accessories", + "data": "0x0017171e09037e0100037e0100037e0100027e010001af030001af030001af030001af0e00017e0200027e0100037e0100037e0100030001af030001af030001af02000e00027e0200037e0100037e0100027e010001af030001af030001af030001af" + }, { "filename": "44-oita-toriten-accessories", "data": "0x0019121b0f01000293039301930200" @@ -845,6 +969,10 @@ "filename": "45-miyazaki-mango-accessories", "data": "0x0018131a0e0100014601e601460100014601e6014601e601460100014601e601460100" }, + { + "filename": "45-miyazaki-moai-accessories", + "data": "0x0018141d0e05740100020c0174020c01050205017403050105037402050105030c0105010005050100" + }, { "filename": "45-miyazaki-takachihokyo-accessories", "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e10127010501270106010101050127012701050201013d010501270127053d0127" @@ -857,6 +985,10 @@ "filename": "46-kagoshima-shochu-accessories", "data": "0x0017121c0f0100012301000100013401000334017f01b7017f01b7027f0334" }, + { + "filename": "46-kagoshima-yakusugi-accessories", + "data": "0x0015151d0d0100027c01a4017c01a4010001a4010001a4017c01a4017c01a4010001a4010001a4017c01a4017c01a40100017c010001a4017c01a4027c01a40100010001a4017c02a4017c02000100017c01a4017c02a402000100017c01a4017c02a40200010001a4017c01a4017c01a40200017c0100017c010001a4010001a40100" + }, { "filename": "47-okinawa-fish-accessories", "data": "0x0017171d0d012401000224060001000224010001240500012401000224010001280100022801000600022801000128019b0100029b010001280100022801000100029b0100019b0500019b0100029b0600" @@ -879,6 +1011,10 @@ "filename": "01-hokkaido-ishikari-heads", "data": "0x00031c15040400067f0200017f0b000200037f0400017f0300027f0100017f07000100017f0200037f0200010d037f02e1010003a201e004000200027f0100017f020d06e103a203e004000400020d015702e101a2019501a201e103a2010d02e0019504000300020d015702a2019501ce029704a204e0010d03000200020d019501a201ce029703ce03a205e0020d02000100020d015704ce01cd02ce01cd02a206e00157020d01000100010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d010e010e010d01221057034e010d010e010e010d03010e570149024e010d010e0100010d03010e570249014e010d01000100010d01220101015701490d570149014e020d01000200020d034901570434025705010157020d02000300020d01490157023401af033405010157020d03000400030d033402af01340501020d04000600020d05340257030d060009000334030d0900" }, + { + "filename": "01-hokkaido-potato-heads", + "data": "0x00061a1406060007eb070004000ceb0400020010eb0200010004eb01ea06eb01ea06eb0100010005eb01ea06eb01ea05eb010014eb14eb14eb14eb14eb13eb0100010002eb01ea0beb01ea03eb0100010003eb01ea03eb01ea01eb01ea05eb01ea02eb0100020007eb01ea08eb020003000eeb0300" + }, { "filename": "01-hokkaido-tokeidai-heads", "data": "0x00011b14060a00010b0a00090002a101370900070002a1013701e9013701a10137070007000237030102370700080001e901010196010101e908000800015d01960201015d0800080002e9013702e90800080001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033702a102a1013702a10237010b01e903ca01e9010b01a1023702a10237023702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e901000100015d016f035d016f035d010b035d016f035d016f015d01000100080b013701a10137080b01000100035d010b035d02a10337035d010b035d0100010001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e901000100015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d0100010003e9010b04e9030b04e9010b03e90100" @@ -895,6 +1031,10 @@ "filename": "02-aomori-goldfish-nebuta-heads", "data": "0x000119170409000333090008000533080007000233010101330101023307000700033301010333070005000b3305000400053301010133010105330400030002330101043301010433010102330300030003330101033303bf01330101033303000300053307bf033303000100053303bf010103bf010103bf0333010005330dbf03330233010101330fbf0233033301010fbf023301000233022301010bbf0101022301000200013302230dbf02230100040001230dbf01230200040001bf012304bf032304bf012301bf020005000123030101bf010d01b4010d01bf03010123030006000301010d0301010d030104000200010101000201010001330301012303010133010002010100010103000101010001010100013302000123010101230200013301000101010001010100030002010d0002010100050001010b0001010300" }, + { + "filename": "03-iwate-konjikido-heads", + "data": "0x00041d14040c0001da0c000b0003e40b000a00018601970186019701860a0008000186019701860197018601970186019701860800060001860197018601970186019701860197018601970186019701860600018601000186019701860197018601970186019701860197018601970186019701860197018601970186019701860100018601000197018601970186019701860197018601970186019701860197018601970186019701860197018601970186019701000100016d01e4016d01e4016d01e4016d01e4016d01e4016d01e4016d01e4016d01e4016d01e4016d01e4016d01e4016d01000300016d0129046d0129056d0129046d0129016d0300010001da020011e4020001da010004000129016d02ad016d0129016d03ad016d0129016d02ad016d0129040004000129016d02ad016d0129016d01ad01e401ad016d0129016d02ad016d0129040004000129016d01ad01e4016d0129016d03e4016d0129016d01e401ad016d0129040004000129016d01ad01e4016d0129016d03e4016d0129016d01e401ad016d01290400196d012901e4022901e4042901e4052901e4042901e4022901e40129010001e4020001e4040001e4050001e4040001e4020001e40100" + }, { "filename": "03-iwate-moriokamen-heads", "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" @@ -937,7 +1077,7 @@ }, { "filename": "06-yamagata-zaookama-heads", - "data": "0x00041d14040a00072702010227040007000b2703010127030005000e27024c0101012702000400022701010c2704010127010003000127020103270a010127024c0101012701000200020102270301073004010127030101270100010102270201019b0b3002010127024c01010127022703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f3003010127020001000201014c01010e3003010127020002000101014c03010a300201014c01010127030003000201014c0b01014c0101014c0101040005000401014c0101014c0101014c0301014c01010600" + "data": "0x00061a1405030003e10900037e01880200020004bb02e104000151037e02d1017e01880100010002bb04e103bb0251057e01d1017e01880100030006bb0151037e0251017e0151017e02d10100010003bb02e101bb0251027e0751037e020003bb0251027e073f0351027e010005bb027e0a3f035105bb017e0d3f01510188020002bb01880e3f01510188020001bb01880e3f0388010004bb0d3f0188027e020005bb023f0251063f015101880200030003bb01e101bb0a51017e0200020006e101bb02e1015101e1015101e10251027e020004000ce10151017e0300" }, { "filename": "07-fukushima-peach-heads", @@ -987,6 +1127,10 @@ "filename": "10-gunma-takasakidaruma-heads", "data": "0x00061a1607050009410500030002410101014102010741030002000f41020001000141016001410123020102230101022302010123014101e601410100010001e6022301010423010104230101022301e60100014101e60123020103a70101010e010103a7020101230141016001e60160020101a7030101a7010101a7030101a7020101e6016001e60160020101a7030101a7010101a7030101a7020101e6014101e60141020101a7030101a7010101a7030101a7020101e60160014101600223010103a7030103a701010223014101e602410123030101a1010101a1010101a1010101a1030101230241010001410123010e040102410501010e012301410100010002410223010e0123014102010141010e0123010e02230241010002000341010e0123010e0301010e0123010e034102000300014101600141016001410260024101600141016001410300040001e6014101e6024101e6024101e6014101e60400060001e6014101e6014101e6014101e60600" }, + { + "filename": "11-saitama-musashinoudon-heads", + "data": "0x00051c15050e00040305000c00080303000b00030304a0030302000a00030307c1020301000a00010309a001c1010301000900030309c102030900020301c109a00203030004480200020301a006c102a00303010008480100010307a003c1010301b1034801b8029301b80348020308c1020301b1014801b802830222028301b8014801b1030305a0020301b10100014801830222018302220283014802b1080302b10100014801b8019302e90183029301b80148020002b1040302b1030001bc024801b8022201b8024801bc02a2010006b1040003bc044803bc0d00010008bc0e00030004bc1000" + }, { "filename": "11-saitama-tokinokane-heads", "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" @@ -1003,10 +1147,18 @@ "filename": "12-chiba-nanohana-heads", "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a02000300012a0100012a0100022a0100022a0100012a0100022a0100022a06000200012a0100122a0100012a02000200172a01000100062a0122112a01000100152a0122022a01000100032a0122152a1a2a042a01c0102a01c0042a032a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a02000100012a020001c0102a01c0012a0100012a0100" }, + { + "filename": "12-chiba-pear-heads", + "data": "0x0006191508040009e70400020004e70222017e022204e70200010006e70122017e012206e7010001000fe7010011e711e711e711e711e711e711e701000fe70100010005e7017e03e7017e05e70100020005e7037e05e7020003000be70300050007e70500" + }, { "filename": "12-chiba-soysauce-heads", "data": "0x000317140b010008b40300020006b4020001850100020006b404000200066f030001850200016f0101046f04000200016f0101046f04000100016f01b8010104b8016f03000100016f010105b8016f0300026f06b8026f0200026f06b8026f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f08b8016f0200016f02b803ea03b8016f0200016f08b8016f02000a6f0200" }, + { + "filename": "13-tokyo-oochouchin-heads", + "data": "0x0003181408050004ad01da01ad050003000a6403000100034108230341010003640a230364024101230241012301410223024101230141012302410264012301640123026402230164012302640123026403410a2303410364012302640323026402230364034102230241032302410123034104640823046403410a2303410364012302640323026402230364034102230241032302410123034103640a23036403410123084101230341010002640123076402230264010003000a410300050004ad01da01ad0500" + }, { "filename": "13-tokyo-station-heads", "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" @@ -1016,8 +1168,8 @@ "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" }, { - "filename": "14-ibaraki-anglerfish-heads", - "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + "filename": "13-tokyo-tower0-heads", + "data": "0x000117140a0600014106000600010106000600010106000600014106000600014106000600010106000500035405000500030105000500014101be01410500040001010100010101000101040004000501040004000141010001be0100014104000400024101be024104000300010101540101015401010154010103000400050104000400024101be02410400030001410100014101be014101000141030002000341010001be010003410200010002410100057e01000241010002410200057e02000241" }, { "filename": "14-kanagawa-curry-heads", @@ -1027,6 +1179,14 @@ "filename": "14-kanagawa-king-heads", "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" }, + { + "filename": "14-kanagawa-shumai-heads", + "data": "0x00061a14060500048602c0048605000200068604c0068602000100088602c008860100010001af02d4038602d401af048602d4028601af010001d403af01d404af01d406af01d402af01d4010001d402af01d404af01d406af01d401af01d40100010001d402af01d40baf01d401af01d40100010003af01d40baf01d402af0100010004af01d409af01d403af0100010004af01d409af01d403af0100010004af01d409af01d403af0100010004af01d409af01d403af0100010004af01d404af037d02af01d403af0100020003af01d409af01d402af020003000eaf0300" + }, + { + "filename": "15-niigata-italian-heads", + "data": "0x00061b1505150001d2130002d2010005000c01010001d203000300020102d201bf011805bf02d2012b010101d2030002000101032b01bf012804bf0118012802bf01d2012b01d20101020001000101012b02d20bbf01d201bf01d2012b010101000101012b01d2012b07bf012807bf022b0101010101d2032b0dbf011802d20101010101d2022b0fbf012b01d201010101012b02d201180dbf02d2012b01010201042b0bbf032b020101000101012b01d2012b01d202bf012806bf012b02d2012b020101000100010101d2020101d2012b04bf011801bf012802d2012b04010100020001d2020101d20e010200020001d210010300020001d21300" + }, { "filename": "15-niigata-sasadango-heads", "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" @@ -1053,7 +1213,7 @@ }, { "filename": "17-ishikawa-jibuni-heads", - "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b8032302000300032301de0123038301b8012301de032303000400032301de052301880223040006000223018801de022301de01230600" + "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b80323020003000523038301b8052303000400032301de022301880523040006000223018801de04230600" }, { "filename": "17-ishikawa-kinpaku-heads", @@ -1071,6 +1231,10 @@ "filename": "18-fukui-tojinbo-heads", "data": "0x00051c15050d00037407000800037402000374027205000500037203740272037402720274030005000372037402720374027202740300030002740372037402720374027202740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372037402720374020502740300030002740372039902720374020502740300030002990372039902720374020502740300030002990305039902720374020502990300030002990305039902720399020502990300030002990305039902720399020502990272010003000299030503990205039902050299027201000100027702990305030c02050399020502990272017703000299030503990205039902050299027701000177010013770200" }, + { + "filename": "19-yamanashi-houtou-heads", + "data": "0x00041b14050800060d08000600020d0600020d06000400020d0a00020d04000300010d0e00010d03000200010d0400080e0400010d02000200010d0200020e02d801d501d8025702d8020e0200010d02000100010d0100020e02d8015701d501600222021b025701d8020e0100010d01000100010d010e01d8025701d8015702600322035703d8010e010d01000100010d01d80157026001d50222026001d5031b0257021b01d8010d0100010e010d01d8022202570422021b0357026001d501d8010d010e020e01d801220249011b0257031b025702d80122015702d8020e010e02d801570249021b02d802570522025702d8010e0100020e01d80160025706460122025703d8020e01000100040e01d8015706460222015701d8040e01000200050e010f0146010f0146010f014602d8050e02000300100e030005000c0e0500" + }, { "filename": "19-yamanashi-shingen-heads", "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" @@ -1083,6 +1247,10 @@ "filename": "20-nagano-matumotocastle-heads", "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" }, + { + "filename": "20-nagano-shinshusoba-heads", + "data": "0x00051b1505070008930200035e0200040003930257046002570193015e01930400030001930157046004570260015e0160015701930300020001930260035e01570160035e0157045e016001930200010001930257010202b1025e010202b1025e010202b1025e015701930100010001930160010f010201b1010f025e010201b10160025e010201b10157025e0160019301000193030f010201b1010f025e010201b1010f025e010201b10160025e0257019301930160020f0202035e0202035e0202035e02600193019303570102035e01600102035e01600102035e0357019301930360010202b1025e010202b1025e010202b1025e0260019301930357010201b10160025e010201b10157025e010201b10160025e02570193010001930260010201b10157025e010201b10160025e010201b10157025e0160019301000100019302570202035e0202035e0202035e0157019301000200019301600202025e019901b1019901b1019901570202025e0160019302000300019301570460045704600157019303000400039302570460025703930400070008930700" + }, { "filename": "20-nagano-wasabi-heads", "data": "0x0003161505040002220100024e08000100024e01000222034e08000122024e0222034e09000122034e0122014e0222090001000122034e032201c90122070002000622014e022206000200013f022201c9014e042206000200013f014e0622014e01c90500030001c90922040003000a22040003000422014e062203000400013f014e0522014e0322020005000922014e020005000b22010006000122014e082201000700042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" @@ -1103,6 +1271,14 @@ "filename": "21-gifu-ukai-heads", "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f540700030010540700030010540700020011540700020005540c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c0201010c06000100030c0601010c07a60101010c06000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" }, + { + "filename": "22-shizuoka-eel-heads", + "data": "0x00031a1405110002950200020004230b000196029501000100022301ec01010223090002230196029501df0223020103230700032302960195019601df062306000323040001df019601df022302950123050003230500010001df03230296012305000523030002000623050006230200030005230600062301000300052308000523030005230900042303000523090004230300062307000423010003001123010004000f23020004000f23020005000d23030006000a230500" + }, + { + "filename": "22-shizuoka-hamamatsu-gyoza-heads", + "data": "0x00021b16050c00013409000b000234090003000134060001340157013409000400013404000134018e0157013403000334010001340100030001340157013401570200018e0157018e0134020001340157018e01570134020003000134018e0157013401570100028e015701340200018e02570134030003000134035701340257018e0157018e01000134025701340157030004000134018e0257018e0100035701000257013401570400060001340357030b01290157018e015705000634018e0157068701570100028e013401570200010001340257018e0257080b028e0157018e013401570100010001570134018e0157028e070b01000257018e025701340100020001570134028e010007870157018e063405000157018e0157030b0129020b015701340600040001570134025706870257018e0134040003000157013402570134018701340157028e01570134035701340300030001340257018e01000129030b018e0100015701340157018e01340300020001340157018e01570134020001340157018e0134020001570134015701340300010001340100033403000134015701340157040001340400090002340157060001340300090001340c00" + }, { "filename": "22-shizuoka-oden-heads", "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" @@ -1123,9 +1299,13 @@ "filename": "24-mie-jingu-heads", "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" }, + { + "filename": "24-mie-meotoiwa-heads", + "data": "0x00071d1403070005c10e00080001c1010001c10f000700017401c1017401c10f00070005740e00050008600d000500087401600c0005000874010001600b0004000974010001600b0003000a740200016003000374040003000a740200016002000560030002000b740300026001000474030002000b740200038b01000474030001000c74060006740100078b02000a8b0100048b0100018b" + }, { "filename": "24-mie-ninja-heads", - "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" + "data": "0x00041817050700079205000500039201bc079203000400039201bc069201bc029202000400039201bc079201bc019202000300039201bc01e302da010101da010101da01e301bc029201000300039201bc01e301da01e3010101da010101da02e301bc019201000200039201bc0b880292020003920c880292020003920c880292020003920c8802920200039203a2088801a20292020003920ca20292020003920ca20292030003920ba201920100030003920aa2029201000200059202a2049203a201920200020002920100039207a202920200010003920300029205a202920300010003920f0002921100" }, { "filename": "25-shiga-blackbass-heads", @@ -1135,6 +1315,14 @@ "filename": "25-shiga-hikonecastle-heads", "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" }, + { + "filename": "25-shiga-shigarayaki-heads", + "data": "0x00041b15040700010a0250010a0250010a0150080005000250010a0250010a0250010a0450050003000150010a0f50030002000250010a035005850350048501500200020004500b850297028501500100010004500d8502970185015001000100035003850388028504880385019701850250045002850b8804850250025003850d8802850350015004850d880285035001500185019702850d880285035001500185029701850d8802850250010001500285019701850c88038502500100025004850b8803850250010001000350048501880101012301010123010106850150020001000350088502880585025002000200035007850388048501500300040001501200" + }, + { + "filename": "26-kyoto-gojunotou-heads", + "data": "0x0001181409070001210700070001a907000700012107000500010d01bc010d01bc010d05000300010d01bc010d01bc010d01bc010d01bc010d030001bc010d01bc010d01bc010d01bc010d01bc010d01bc010d01bc010d01bc01a90200019701b6019701b6018401b6019701b60197020001a9020001bc010d01bc010d01bc010d01bc010d01bc010d01bc020001bc010d01bc010d01bc010d01bc010d01bc010d01bc010d01bc010d01bc01a90200019701b6019701b6018401b6019701b60197020001a9020001bc010d01bc010d01bc010d01bc010d01bc010d01bc020001bc010d01bc010d01bc010d01bc010d01bc010d01bc010d01bc010d01bc01a90200019701b6019701b6018401b6019701b60197020001a9020001bc010d01bc010d01bc010d01bc010d01bc010d01bc020001bc010d01bc010d01bc010d01bc010d01bc010d01bc010d01bc010d01bc01a90200019701b6019701b6018401b6019701b60197020001a9020001bc010d01bc010d01bc010d01bc010d01bc010d01bc0200010d02bc010d01bc010d01bc010d01bc010d01bc010d02bc010d01a90200019701b6019701b6018401b6019701b60197020001a903000397038403970300" + }, { "filename": "26-kyoto-kinkaku-heads", "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" @@ -1171,6 +1359,10 @@ "filename": "29-nara-ashura-heads", "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" }, + { + "filename": "29-nara-daibutsu-heads", + "data": "0x00041715080500018a0150018a0150018a015004000400018a0150018a0150018a0150018a0150030002000150018a0150018a0150018a0150018a0150018a0150018a010001000150018a0150018a0150018a0150018a0150018a0150018a0150018a0100018a0150018a0150070a0150018a015001000150060a0126060a0100010a0550030a0550010001500d0a080a0150060a0f0a080a0150060a0150070a0150060a0150070a0150060a0150060a0350050a01500e0a0150060a0350050a01500e0a01500e00" + }, { "filename": "29-nara-deer-heads", "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" @@ -1187,6 +1379,38 @@ "filename": "30-wakayama-wakayamaramen-heads", "data": "0x00041b150508000633080006000233060102330600040002330a010233040003000133040106d804010133030002000133030102d8016001d8017d026003d803010133020001000133020103d80260037d01d80160025b02d802010133010001000133010102d8027d0160047d010f035b016002d80101013301000133020101d8067d030f017d025b026001d8020101330133010101d8077d030f046003d8010101330133010101d8067d040f066001d8010101330133010102d8057d040f066001d8010101330133020101d80160047d040f056001d80201013301000133010101d8067d076002d801010133010001000133020101d8047d0160026c01d8026001d8016001d802010133010002000133020101d8027d0160016c02c1016c01d8026001d802010133020003000133020102d80160016c02c1016c016002d802010133030004000133030102d8026c02d803010133040006000133080101330600" }, + { + "filename": "31-tottori-camel-heads", + "data": "0x00051f140604000155070001460c00030001540155015405000154014601540b0002000254015502540300025401460254040003d80300010003540155025403b10254015503540200038a02d80200010003540155025404b1015401550354020001d8028a0223018a014601000454025504b101550454020002d8038a014601d80100028a045404b10454018a0200014601d8038a014601d80100048a0854038a020001d80246018a014601d8010c078a0454058a01d80100038a01460300168a01460200158a02000246158a04000100138a05000100068a05b1078a06000200108a070003000e8a0800" + }, + { + "filename": "31-tottori-crab-heads", + "data": "0x00041f14010700041402d4050002d404140600050004140d0004140400040004140f00041403000300031404d404000214050004d40314020002000214080001140123023301230114090002140100010002140800081409000214021408000a14090001140100071401000c1401000814080001880c1401880800071401880e140188071408000e140800071401880e140188071408000e1408000100061401880e1401880614010008000188041404330414018808000300061401880a140188061403000a000a880a00" + }, + { + "filename": "31-tottori-pear-heads", + "data": "0x00041a140605000522016b04220500030006220179016b01790522030002000222014e0d22020002000122014e0e22020001001222010001000122014e102201000222014e11220222014e112214221422142214220100122201000100122201000200062202ac0822020002001022020003000e220300" + }, + { + "filename": "32-shimane-black-throat-heads", + "data": "0x00011f15020d0003240d000b000347012403470b0009000b47090008000d4708000700024704010347040102470700070002470323010103470101032302470700060003470401034704010347060006001147060004240200013902470b64024701390200042401000524023901640101090d01010164023905240100020004240139016401010b0d0101016401390424020004000224013901640d0d01640139022404000600013901010d0d0101013906000600013901010d0d0101013906000600013901010d0d0101013906000600010101640d0d0164010106000600010101640d0d01640101060006000101016401010b0d0101016401010600070002640101090d0101026407000700010102640901026401010700080001010b6401010800" + }, + { + "filename": "32-shimane-castle-heads", + "data": "0x00011b140607000195050501950700060009050600070003720105037207000700020c010501660105020c070006000305036603050600050003050166030c01660305050003000f050300040002b5097202b50400030003050166010c0266010c0266010c0166030503000100130501000200060c0105030c0105060c02000200040c0205050c0205040c020015050200040c0966040c02000200040c038603720386040c0200020002de02c903860372038602de02c90200020002c902de097202c902de0200010001c902de02c902b5050c02b502de01c901de01c90100010001de02c902de010201d802b502d8020201d802c901de01c901de0100010001c902de02c902d802b504d8010202de01c901de01c90100" + }, + { + "filename": "32-shimane-soba-heads", + "data": "0x0004181608040008850400020002850811028502000100018502110172070502110185010001850111030501720123017201710172014c0172020501110185018501050372020501230271013e01dd027201050185011101850305017201230172012301dd014c0172020501850111011101cc0285080502850211011102cc0133088502330211013402cc053304b40233011101340111018501cc0111043304b40133011101850111011101cc02850411043302850211011102cc0133088502330211013402cc053304b40233011101340111018501cc0111043304b40133011101850111011101cc02850411043302850211011102cc01330885023302110100011101cc053304b402330111010002000211043304b40133011102000400041104330400" + }, + { + "filename": "32-shimane-zenzai-heads", + "data": "0x00051a140606000823060003000323083403230300020001230e34012302000100012304340338018503d105340123010001230334018505380185038802d10334012301230134038505380588018402d1013401230111012308850588038501230111021101230284028502840185028403850184018501230211011101cc011103230685028403230311011101cc041108230611011102cc11110100011101cc101101000100011101cc101101000200071104340511020002001011020003000e110300" + }, + { + "filename": "33-okayama-castle-heads", + "data": "0x00031e16010e00020c0d000d00040c0c000c00020c0266020c0b000b00020c016602590166020c0a000a00020c0666020c090009000c0c08000a00016601590166015901660159016601590166015909000a00016601590166040c01590166015909000900040c0466040c08000600050c026604590266050c050003660400010c055904660559010c060004660100030c01590166012301590166015901660159016601590166012301660159040c03000366050c01590166012301590166015901660159016601590166012301660459040004000359110c0400016604000366110c030002660400010c0123010c026001d801600899016001d8026001d8020003660400010c0123010c02d8016001d8026002d8016001d8016002d8016002d80160050002000366020c026001d8016002d8026001d8016001d8026001d801600366040007660d000766020008660b000a66" + }, { "filename": "33-okayama-denim01-heads", "data": "0x00061815090a54042b01540799010c0299042b019907540199075401540599015401990154059901540754019907540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" @@ -1287,6 +1511,26 @@ "filename": "37-kagawa-bonsai-heads", "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" }, + { + "filename": "37-kagawa-castle-heads", + "data": "0x00021b14050a0002270a0009000127027f0127090008000127017f0258017f0127080007000127017f0458017f0127070005000c27050006000258010c04b5010c025806000600027f060c027f060006000a7f060004000e27040002001227020004000558040c055804000400017f010c027f010c0401010c017f0158010c017f04000400027f020c0101047f0101020c027f0400020012270200162702000158057f0c5802000200015805010c7f02000200010c02b5017402b5030c0174040c0174030c02000200010c05b50c0c0200" + }, + { + "filename": "37-kagawa-udon01-heads", + "data": "0x00011d15031100010b01e9010b06000f0001de010b01e9010b07de0f0001d8010b01e9010b07d81000010b01e9020b01e9050009000701010b01e9020b01e9050006000301074b010b01e9020b01e90500040002010a4b010b01e9020b01e90101040002000201054b0760010b01e9010b014b01e9014b0201020001000101054b0260080b01e9010b014b01e9034b0101010001000101034b0260020b07e9010b01e9010b016001e9034b010101000101034b0160020b02e9010b03e9040b01e9010b02e90160034b01010101024b0160010b02e9020b01e9030b03e9010b01e9020b01e90260024b01010101024b010b01e9020b02e9010b03e9070b01e9010b0160024b01010101024b020b02e9020b01e9030b05e9010b0157020b0160024b010101720101014b015701e9020b06e9050b01e9010b0157010b0160014b0101017201720101024b015702e9060b06e9010b0257024b01010172010001720201014b025706e9060b0257014b020101720100020002720201014b0257040b04e90257014b020102720200030002050172030104e9040b0301017202050300050002050272080102720205050008000a050800" + }, + { + "filename": "37-kagawa-udon02-heads", + "data": "0x00051d150309000801090006000301084b03010600040002010e4b0201040002000201054b0860054b0201020001000101054b0260080b0260054b0101010001000101034b0260020b07e9010b01e9010b0260034b010101000101034b0160020b02e9010b03e9040b01e9010b02e90160034b01010101024b0160010b02e9020b01e9030b03e9010b01e9020b01e90260024b01010101024b010b01e9020b02e9010b03e9070b01e9010b0160024b01010101024b020b02e9020b01e9030b05e9010b0157020b0160024b010101720101014b015701e9020b06e9050b01e9010b0157010b0160014b0101017201720101024b015702e9060b06e9010b0257024b01010172010001720201014b025706e9060b0257014b020101720100020002720201014b0257040b04e90257014b020102720200030002050172030104e9040b0301017202050300050002050272080102720205050008000a050800" + }, + { + "filename": "38-ehime-castle01-heads", + "data": "0x00011914050e0001b505000e0001b505000d0001b5010101b504000b0002b5030102b502000100090c09b501000100090c010002010323020102000b0c020801b5010101b50208020001000401010c040103b5010101b5010104b50100010101230101010c0101010c010101230101030801b5010101b5030801000b0c02b5030104b501000901090801000100030c0385030c0ab5010009850908010001000263027202630272016302d7020502d7020501d70100010002720263027202630172020502d7020502d70105010001000263027202630272016302d7020502d7020501d70100010002720263027202630172020502d7020502d70105010001000263027202630272016309b1010001000272026302720263017209c9010001000263027202630272016309b10100" + }, + { + "filename": "38-ehime-castle02-heads", + "data": "0x00011a1406050001b5090501b5040005000b05040004000d0503000300050502010105020105050200050004010105010101050401040005000101017201010105030101050101017201010400040004050501040503000200110501000300020101050901010502010200030001010105010101050201037202010105010101050101020002000205030107050301020501000b0506b503050200080102b5040102b5010101000200020102720501018504050185020101000200090101850405018502010100020009b1018504b6018502b1010001000a9902b1029902b1029901b101000786019902b1029902b1029902b101990100079901b1029902b1029902b1029901b101000786019902b1029902b1029902b10199" + }, { "filename": "38-ehime-iyokan-heads", "data": "0x00051a140604000c4204000200084201e1074202000100024201250f42010002420125114201420125124201420125124214421442144214421442144214420100054203b30a42010002001042020003000e420300" @@ -1323,10 +1567,26 @@ "filename": "39-kochi-bonito-heads", "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" }, + { + "filename": "39-kochi-castle-heads", + "data": "0x00011a140609000227090008000127025801270800070001270158027f0158012707000600082706000700065807000700017f040c017f0700060008a206000600087f060004000c270400050003580162022701620358050003000227037f0127027f0127037f0227030003000227017f01620127017f0258017f01270162017f0227030003000227017f0127017f0458017f0127017f0227030002000427017f0658017f04270200142701001258010014270100025802d4045802d4045802d4025801000100027f02d4047f02d4047f02d4027f01000100017f015802870158027f015802870158027f015802870158017f0100" + }, + { + "filename": "39-kochi-eggplant-heads", + "data": "0x00011915070600050e07000500070e06000400090e05000300060e01e5040e04000300050e01e5011201e5030e04000300040e01e5011201900112040e03000200030e01e50212029001b70112030e0300010e0100010e01e50212049002b70112030e02000100010e0212069004b7020e0100010e0200099004b7020e01000200099004b7030002000a9004b7020001000b9004b7020001000c9004b7010001000c9004b7010001000d9004b701000d9002b7010101b7010001bc0c9002b7010101b7010001bc0c9004b7020001bc0a9004b701000300049002b7019006b70200" + }, + { + "filename": "40-fukuoka-hakataramen-heads", + "data": "0x00041b150508000692080006000292060102920600040002920a01029204000300019204010688040101920300020001920301048803980388030101920200010001920201018803980188019804d304880201019201000100019201010188019804d3019805d301570388010101920100019202010188019804d3019805d30357018802010192019201010288019804d3019805d303570188015701010192019201010288019805d3010f03d30557018801010192019201010288010f019803d3020f0122075701880101019201920201090f07570201019201000192010101880222030f085702880101019201000100019202010188010f0122010f0122018801570188025701880157028802010192010002000192020102880157018802b8018802b80388020101920200030001920201048803b80388020101920300040001920301068803010192040006000192080101920600" + }, { "filename": "40-fukuoka-mojiko-heads", "data": "0x00031e14030d0001960d0009000196030001960300019609000600019602000196072701960100019607000600019602000927010001960700060002610b27026106000500046102270106016b010101270106022704610500050001a501e0010601a5032701a501aa01a5032701a501e0010601a50500040009aa015709aa0400050001c1025701c1025701e9035701e9025701c1025701c105000200032701c1015701e001c102e001e903e001e902e001c1015701e001c1032702000100042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c1042701000100042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e001060157015702060157010601c10157010601c1010301460197034601970146010301c10157010601c101060157020601570557017f0257017f0103019701460397014601970103017f0257017f0557" }, + { + "filename": "40-fukuoka-motsunabe-heads", + "data": "0x00041d14030900067f0200017f08000700037f0400017f0300027f0100017f04000600017f0200037f0300037f08000700027f0100017f0f001a00090004010462090006000162020101d8018802e1014102e101570362060004000162010101d8038807e1025701d8026204000300016201d8028801570288031b0141031b038802d8016203000100026201d80388025708220288035701d802620100016201000162018801570288025708e10457028801620100016201000262018802570388041b0141031b02570488026201000300016201d80257038807e1048801d801620300030001620101016202d8028803e1014103e1028801d80362030003000162010101620201016201d8042201e1015701d80662030004000101016202010e6204000500016202010d620500" + }, { "filename": "40-fukuoka-tenmangu-heads", "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" @@ -1335,6 +1595,10 @@ "filename": "41-saga-mudskipper-fiddlercrab-heads", "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" }, + { + "filename": "41-saga-sicilianrice-heads", + "data": "0x00051b150507000801070005000c01050003000601022202010122050103000200040102dd0222022c022201dd012204010200010004010122022c01dd0122022c02dd022c050101000100030102dd022c012804b801dd022c02dd030101000301052203b8012804b8042202010201022203dd08b803dd012203010301022c022209b80122022c03010301022c012205b8012804b80122022c012202010301012202dd02b8012806b803dd0122030101000301012201dd09b802dd01220301010001000301012201dd022c05b80128022c02220301010002000401022c012201b8022c0222022c01dd03010200030006010122022c0122010101220401030005000401012207010500070008010700" + }, { "filename": "41-saga-yoshinogari-heads", "data": "0x0002181409030001d8010001d8010001d8010001d8010001d80300040007d80400030009c9030002000bd8020001000dc9010002000b99020001000d9901000f99010001bb050001bb050001bb010001de01bb050001bb050001bb01de0fde01de01bb050001bb050001bb01de0fde010001bb050001bb050001bb0100010001bb050001bb050001bb0100010001bb050001bb050001bb010001000dbb0100010001bb050001bb050001bb0100010001bb050001bb050001bb0100" @@ -1351,6 +1615,10 @@ "filename": "42-nagasaki-saseboburger-heads", "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" }, + { + "filename": "43-kumamoto-igusa-heads", + "data": "0x00071b140516a201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012901220129012201290122012916a2" + }, { "filename": "43-kumamoto-karashirenkon-heads", "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" @@ -1363,6 +1631,10 @@ "filename": "44-oita-beppujigoku-heads", "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" }, + { + "filename": "44-oita-shiroshitakarei-heads", + "data": "0x00051c15010c0001cd012b01cd012b01cd012b01cd08000b00012b01cd012b01cd012b01cd012b01cd032b05000a0001cd012b01cd012b01cd0898012b03000900012b01cd012b0d9802000800022b0f98012301000700012b0d9801b80298012302980700012b0a980197029802b8039801cd0600012b08980197069801b8039801000600079801970c9801000400069801970e980200010002cd049801971198020001cd022b01980197139801b80200022b01cd012b1398010001b80200010001cd022b01cd0200049803230798012b05000100022b01cd04000b98022b0600030001cd0500022b059801cd012b01cd012b07000b00012b01cd012b01cd012b01cd012b01cd0800" + }, { "filename": "44-oita-usajingu-heads", "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" @@ -1375,17 +1647,25 @@ "filename": "45-miyazaki-chickennanban-heads", "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" }, + { + "filename": "45-miyazaki-karamen-heads", + "data": "0x00041b1505080006bf0800060002bf060102bf0600040002bf0a0102bf0400030001bf04010633040101bf0300020001bf0301043301280533030101bf0200010001bf020103330128013302d00128014101d00433020101bf0100010001bf0101033302d0012801d00141022801d0012801d00333010101bf010001bf0201013301410133012808d002280233020101bf01bf0101023303d0032803d0052801410133010101bf01bf01010233022803d0032803d0012803d00133010101bf01bf01010233012803d00328014107280133010101bf01bf02010133014103280ad00133020101bf010001bf01010333072804d00233010101bf0100010001bf02010133022802d0022802d0012801d002280133020101bf0100020001bf0201013301d001410133012801b8012801b80128014101d00133020101bf0200030001bf0201033301b8012801b8012801b80233020101bf0300040001bf03010633030101bf0400060001bf080101bf0600" + }, { "filename": "46-kagoshima-goromon-heads", "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" }, + { + "filename": "46-kagoshima-sakurajimaradish-heads", + "data": "0x00021a15060600015c01dd0100015c0a000500025c01dd025c01dd015c0800060001dd0122011b01dd011b025c07000500025c0122011b0122011b012208000600015c0122011b0122011b0122015c070007000122011b0122011b0122080002001001020001001201010014011401140114011401140114010100120101000200090102e70501020003000e010300060008010600090002010900" + }, { "filename": "46-kagoshima-shirokuma-heads", "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" }, { "filename": "47-okinawa-goya-chanpuru-heads", - "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" + "data": "0x00051a15060600038703a2028706000400018701a2028701a2078704000300018701a20387026d020f038702a203000200028701a20187020f0201010f0222018701a2038702000100028701a2010f01380222010f0122026d01380122010f048701000100028701a20138026d010f0122010f020101380222010f0387010001a202870101026d010f03380101010f0201030f02a2018701a20287020f02010222020f0122020f0222026d018701a2018701a2018703220101026d0322010f026d020f028701a2028701a20222016d0138036d03380301020f02870287026d0201012201380201016d020f026d01010222028701000287020f0138020f01010422010f0222010f01a20187010001000387013801220201016d0122010f0201016d01220138018701a201870100020002a20187010f01010438010f0222010f028701a2020003000387010f0438010f0122010f028701a203000400038701a2016d020f028701a202870400060001a2048702a201870600" }, { "filename": "47-okinawa-shuricastle-heads", From ea67a293681303d8ac1e40dbaa04aed07bc54554 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 15 Dec 2023 07:49:55 +0900 Subject: [PATCH 135/146] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=88=E3=83=A9?= =?UTF-8?q?=E3=82=AF=E3=83=88=E6=9C=80=E6=96=B0=E3=83=87=E3=83=97=E3=83=AD?= =?UTF-8?q?=E3=82=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/addresses/localNounsDescriptor_localhost.ts | 2 +- src/utils/addresses/localNounsDescriptor_mumbai.ts | 2 +- src/utils/addresses/localNounsMinter_localhost.ts | 2 +- src/utils/addresses/localNounsMinter_mumbai.ts | 2 +- src/utils/addresses/localNounsProvider_localhost.ts | 2 +- src/utils/addresses/localNounsProvider_mumbai.ts | 2 +- src/utils/addresses/localNounsToken_localhost.ts | 2 +- src/utils/addresses/localNounsToken_mumbai.ts | 2 +- src/utils/addresses/localseeder_localhost.ts | 2 +- src/utils/addresses/localseeder_mumbai.ts | 2 +- src/utils/addresses/sample_localhost.ts | 4 ++-- src/utils/addresses/tokenGate_mumbai.ts | 2 +- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/utils/addresses/localNounsDescriptor_localhost.ts b/src/utils/addresses/localNounsDescriptor_localhost.ts index b820c479..2475711b 100644 --- a/src/utils/addresses/localNounsDescriptor_localhost.ts +++ b/src/utils/addresses/localNounsDescriptor_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsDescriptor:"0x51A1ceB83B83F1985a81C295d1fF28Afef186E02", + localNounsDescriptor:"0xDC11f7E700A4c898AE5CAddB1082cFfa76512aDD", } diff --git a/src/utils/addresses/localNounsDescriptor_mumbai.ts b/src/utils/addresses/localNounsDescriptor_mumbai.ts index d97881a7..216c9a4c 100644 --- a/src/utils/addresses/localNounsDescriptor_mumbai.ts +++ b/src/utils/addresses/localNounsDescriptor_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsDescriptor:"0x3034F3Bb199bc34F9e0BE392dc7015E8a10Ca38c", + localNounsDescriptor:"0x54A4148220BFbcEB9D649a821B6a16b81392f912", } diff --git a/src/utils/addresses/localNounsMinter_localhost.ts b/src/utils/addresses/localNounsMinter_localhost.ts index 76fb5122..c08e5584 100644 --- a/src/utils/addresses/localNounsMinter_localhost.ts +++ b/src/utils/addresses/localNounsMinter_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsMinter:"0x0355B7B8cb128fA5692729Ab3AAa199C1753f726", + localNounsMinter:"0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", } diff --git a/src/utils/addresses/localNounsMinter_mumbai.ts b/src/utils/addresses/localNounsMinter_mumbai.ts index fbcf4f3d..2bec2a7b 100644 --- a/src/utils/addresses/localNounsMinter_mumbai.ts +++ b/src/utils/addresses/localNounsMinter_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsMinter:"0x72A939Aa1c03A05021941ac24cFff0897FcD5f84", + localNounsMinter:"0x141e200e60bDaEC81B2c482e173256a4B2bf63A6", } diff --git a/src/utils/addresses/localNounsProvider_localhost.ts b/src/utils/addresses/localNounsProvider_localhost.ts index 5c18966d..ff3d0c5d 100644 --- a/src/utils/addresses/localNounsProvider_localhost.ts +++ b/src/utils/addresses/localNounsProvider_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsProvider:"0x36b58F5C1969B7b6591D752ea6F5486D069010AB", + localNounsProvider:"0x51A1ceB83B83F1985a81C295d1fF28Afef186E02", } diff --git a/src/utils/addresses/localNounsProvider_mumbai.ts b/src/utils/addresses/localNounsProvider_mumbai.ts index 64eed001..c8d30bd8 100644 --- a/src/utils/addresses/localNounsProvider_mumbai.ts +++ b/src/utils/addresses/localNounsProvider_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsProvider:"0xe8bf7CeA7F07b14906839c5A48AFA4Fb775a44e9", + localNounsProvider:"0x38F3D7C1E139f7b6F8E8b0909cF885aFD3Af52f5", } diff --git a/src/utils/addresses/localNounsToken_localhost.ts b/src/utils/addresses/localNounsToken_localhost.ts index 1b9cac23..09135c78 100644 --- a/src/utils/addresses/localNounsToken_localhost.ts +++ b/src/utils/addresses/localNounsToken_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsToken:"0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", + localNounsToken:"0x36b58F5C1969B7b6591D752ea6F5486D069010AB", } diff --git a/src/utils/addresses/localNounsToken_mumbai.ts b/src/utils/addresses/localNounsToken_mumbai.ts index b76e47ec..d67d9c6c 100644 --- a/src/utils/addresses/localNounsToken_mumbai.ts +++ b/src/utils/addresses/localNounsToken_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsToken:"0x9f3aBc7b9f17Fb58a367bdA86e6129a2F5849942", + localNounsToken:"0x3915C2246042d85b5cdD20AAe22D7Babe203AdFf", } diff --git a/src/utils/addresses/localseeder_localhost.ts b/src/utils/addresses/localseeder_localhost.ts index c5b1f85c..89614cca 100644 --- a/src/utils/addresses/localseeder_localhost.ts +++ b/src/utils/addresses/localseeder_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - localseeder:"0xDC11f7E700A4c898AE5CAddB1082cFfa76512aDD", + localseeder:"0xd9140951d8aE6E5F625a02F5908535e16e3af964", } diff --git a/src/utils/addresses/localseeder_mumbai.ts b/src/utils/addresses/localseeder_mumbai.ts index eecd0e5e..61fd7a33 100644 --- a/src/utils/addresses/localseeder_mumbai.ts +++ b/src/utils/addresses/localseeder_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localseeder:"0x7d72e9A56C367948E1De02E63897bB71111e4b19", + localseeder:"0x18Ef7201b771167f383A63CCFe5cE33BdA6d9876", } diff --git a/src/utils/addresses/sample_localhost.ts b/src/utils/addresses/sample_localhost.ts index df2d2401..4ed9ecca 100644 --- a/src/utils/addresses/sample_localhost.ts +++ b/src/utils/addresses/sample_localhost.ts @@ -1,4 +1,4 @@ export const addresses = { - providerAddress:"0xddE78e6202518FF4936b5302cC2891ec180E8bFf", - sampleToken:"0xB06c856C8eaBd1d8321b687E188204C1018BC4E5" + providerAddress:"0x5D42EBdBBa61412295D7b0302d6F50aC449Ddb4F", + sampleToken:"0xddE78e6202518FF4936b5302cC2891ec180E8bFf" } diff --git a/src/utils/addresses/tokenGate_mumbai.ts b/src/utils/addresses/tokenGate_mumbai.ts index 61cbbd3c..e9710325 100644 --- a/src/utils/addresses/tokenGate_mumbai.ts +++ b/src/utils/addresses/tokenGate_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - tokenGate:"0xD7eB488310b9E335459f17DB302BE20d04BA9Ac6", + tokenGate:"0xf5C0D978403daec0a266608717D2965bbaCC090c", } From 48c6382a1d8cbcd01818c04d5ab93c7752cc0208 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sat, 23 Dec 2023 17:16:58 +0900 Subject: [PATCH 136/146] =?UTF-8?q?Event=E8=BF=BD=E5=8A=A0=E3=80=81Approve?= =?UTF-8?q?=E5=88=B6=E9=99=90=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/LocalNounsToken.sol | 18 +++- .../contracts/localNouns/LocalNounsMinter.sol | 11 ++- .../interfaces/ILocalNounsToken.sol | 7 ++ .../packages/ERC721P2P/ERC721AP2P.sol | 7 +- contract/test/localNouns.ts | 98 ++++++++++++++++++- 5 files changed, 130 insertions(+), 11 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index a1aba9aa..8ecbdf2d 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -28,6 +28,8 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { uint256 public tradeRoyalty = 0.003 ether; // P2Pトレードのロイヤリティ uint256 public salesRoyaltyBasisPoint = 1000; // P2Pセールのロイヤリティ、購入価格の10% + mapping(address => bool) public approveWhiteList; // Approveを許可するアドレスリスト + constructor( IAssetProviderExMint _assetProvider, address _minter @@ -126,6 +128,10 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { canSetApproval = _canSetApproval; } + function setApproveWhiteList(address _address, bool approve) external onlyOwner { + approveWhiteList[_address] = approve; + } + function setRoyaltyAddresses(address[] memory _addr, uint256[] memory ratio) external onlyOwner { // 引数の整合性チェック require(_addr.length == ratio.length, 'Invalid Arrays length'); @@ -195,6 +201,7 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { super.executeTrade(_myTokenId, _targetTokenId); _processTradeRoyalty(msg.value); + emit ExecuteTrade(_targetTokenId, ownerOf(_targetTokenId), _myTokenId, ownerOf(_myTokenId)); } function putTrade(uint256, bool) public pure override { @@ -205,6 +212,11 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { revert('Cannot use'); } + function purchase(uint256 _tokenId, address _buyer, address _facilitator) external payable override { + super._purchase(_tokenId, _buyer, _facilitator); + emit Purchase(_tokenId, _buyer); + } + // transfer時はトレード解除 function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal override { uint256[] memory emptyArray; @@ -256,15 +268,13 @@ contract LocalNounsToken is ProviderTokenA2, ILocalNounsToken { // 誰もがトークンを承認できないようにする function setApprovalForAll(address operator, bool approved) public override { - // revert( 'Not allowed to set approval for all'); - require(canSetApproval, 'Not allowed to set approval for all'); + require(canSetApproval || approveWhiteList[operator], 'Not allowed to set approval for all'); super.setApprovalForAll(operator, approved); } // 特定のトークンの承認も不可能にする function approve(address to, uint256 tokenId) public payable override { - // revert('Not allowed to approve'); - require(canSetApproval, 'Not allowed to approve'); + require(canSetApproval || approveWhiteList[to], 'Not allowed to approve'); super.approve(to, tokenId); } } diff --git a/contract/contracts/localNouns/LocalNounsMinter.sol b/contract/contracts/localNouns/LocalNounsMinter.sol index 4fb79736..f369bae7 100644 --- a/contract/contracts/localNouns/LocalNounsMinter.sol +++ b/contract/contracts/localNouns/LocalNounsMinter.sol @@ -22,6 +22,9 @@ import './interfaces/ILocalNounsToken.sol'; import '../interfaces/ITokenGate.sol'; contract LocalNounsMinter is Ownable { + // Fires when the purchase executed + event MintSelectedPrefecture(uint256 prefectureId, uint256 amount, address minter); + ILocalNounsToken public token; ITokenGate public immutable tokenGate; @@ -82,14 +85,16 @@ contract LocalNounsMinter is Ownable { require(token.totalSupply2() + _amount <= mintMax, 'Over the mint limit'); uint256 mintPrice; - if(_prefectureId == 0){ + if (_prefectureId == 0) { mintPrice = mintPriceForNotSpecified; - }else{ + } else { mintPrice = mintPriceForSpecified; } require(msg.value >= mintPrice * _amount, 'Must send the mint price'); - return token.mintSelectedPrefecture(msg.sender, _prefectureId, _amount); + tokenId = token.mintSelectedPrefecture(msg.sender, _prefectureId, _amount); + + emit MintSelectedPrefecture(_prefectureId, _amount, msg.sender); } function withdraw() external payable onlyOwner { diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol index 022409a1..345de18e 100644 --- a/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol +++ b/contract/contracts/localNouns/interfaces/ILocalNounsToken.sol @@ -30,4 +30,11 @@ interface ILocalNounsToken { // Fires when the owner cancel the trade event CancelTradePrefecture(uint256 indexed tokenId); + + // Fires when the purchase executed + event Purchase(uint256 indexed tokenId, address _buyer); + + // Fires when the trade executed + event ExecuteTrade(uint256 indexed targetTokenId, address _lister, uint256 indexed ownedTokenId, address _executer); + } diff --git a/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol b/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol index 7c19098f..771a0a68 100644 --- a/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol +++ b/contract/contracts/packages/ERC721P2P/ERC721AP2P.sol @@ -28,7 +28,11 @@ abstract contract ERC721AP2P is IERC721P2PCore, ERC721A, Ownable { return prices[_tokenId]; } - function purchase(uint256 _tokenId, address _buyer, address _facilitator) external payable override { + function purchase(uint256 _tokenId, address _buyer, address _facilitator) external payable virtual { + _purchase(_tokenId, _buyer, _facilitator); + } + + function _purchase(uint256 _tokenId, address _buyer, address _facilitator) internal { uint256 price = prices[_tokenId]; require(price > 0, 'Token is not on sale'); require(msg.value >= price, 'Not enough fund'); @@ -68,5 +72,4 @@ abstract contract ERC721AP2P is IERC721P2PCore, ERC721A, Ownable { setPriceOf(_tokenId, _price); _dealer.acceptOffer(this, _tokenId, _price); } - } diff --git a/contract/test/localNouns.ts b/contract/test/localNouns.ts index 37e1b5ac..931505ac 100644 --- a/contract/test/localNouns.ts +++ b/contract/test/localNouns.ts @@ -260,7 +260,7 @@ describe('determinePrefectureId', function () { // ミント前の都道府県ごとのカウント const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(i + 1); - console.log("mint all prefecture", i + 1); + // console.log("mint all prefecture", i + 1); await minter.connect(user1).functions.mintSelectedPrefecture(i + 1, 5, txParams); // ミント後の都道府県ごとのカウント @@ -540,4 +540,98 @@ describe('P2PTradable', function () { }); -}); \ No newline at end of file +}); + + +describe('Approval', function () { + let result, tx, err, balance, tokenId1: number, tokenId2: number; + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + + it('Approvale error', async function () { + await minter.connect(owner).functions.setPhase(2); + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + await expect(token.connect(user1).functions.setApprovalForAll(user2.address, true)).revertedWith('Not allowed to set approval for all'); + + await expect(token.connect(user1).functions.approve(user2.address, tokenId1)).revertedWith('Not allowed to approve'); + }); + + it('setApprovalForAll', async function () { + await minter.connect(owner).functions.setPhase(2); + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + await token.connect(owner).functions.setCanSetAproval(true); + + await token.connect(user1).functions.setApprovalForAll(user2.address, true); + + result = await token.isApprovedForAll(user1.address, user2.address); + + expect(result).equal(true); + + + }); + + it('setApprovalForAllWithWhiteList', async function () { + await minter.connect(owner).functions.setPhase(2); + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + await token.connect(owner).functions.setCanSetAproval(false); + await token.connect(owner).functions.setApproveWhiteList(user2.address, true); + + await token.connect(user1).functions.setApprovalForAll(user2.address, true); + + result = await token.isApprovedForAll(user1.address, user2.address); + + expect(result).equal(true); + }); + + it('approve', async function () { + await minter.connect(owner).functions.setPhase(2); + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + await token.connect(owner).functions.setCanSetAproval(true); + + await token.connect(user1).functions.approve(user2.address, tokenId1); + + result = await token.getApproved(tokenId1); + + expect(result).equal(user2.address); + + + }); + + it('approveWithWhiteList', async function () { + await minter.connect(owner).functions.setPhase(2); + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + await token.connect(owner).functions.setCanSetAproval(false); + await token.connect(owner).functions.setApproveWhiteList(user2.address, true); + + await token.connect(user1).functions.approve(user2.address, tokenId1); + + result = await token.getApproved(tokenId1); + + expect(result).equal(user2.address); + }); + +}); From 1c7aa095af7345d689992f78fe2d8049e6df29e6 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sat, 23 Dec 2023 17:18:58 +0900 Subject: [PATCH 137/146] =?UTF-8?q?HEAD=E3=81=8C1=E7=A8=AE=E9=A1=9E?= =?UTF-8?q?=E3=81=97=E3=81=8B=E5=87=BA=E7=8F=BE=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E7=9C=8C=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E9=A0=86=E7=95=AA=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/setup_localNouns.ts | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/contract/scripts/setup_localNouns.ts b/contract/scripts/setup_localNouns.ts index 38288d61..eb3f15a8 100644 --- a/contract/scripts/setup_localNouns.ts +++ b/contract/scripts/setup_localNouns.ts @@ -62,12 +62,6 @@ async function main() { // 運営用初期ミント // 300体を都道府県割合で運用へミント const mintNumForPrefecture = [ - [13, 10], - [14, 10], - [27, 10], - [23, 10], - [11, 10], - [12, 10], [28, 9], [1, 9], [40, 9], @@ -77,6 +71,16 @@ async function main() { [26, 8], [4, 8], [15, 8], + [37, 4], + [5, 4], + [30, 4], + [19, 4], + [41, 4], + [18, 4], + [36, 4], + [39, 4], + [32, 4], + [31, 4], [20, 7], [21, 7], [10, 7], @@ -99,16 +103,12 @@ async function main() { [45, 5], [6, 5], [16, 5], - [37, 4], - [5, 4], - [30, 4], - [19, 4], - [41, 4], - [18, 4], - [36, 4], - [39, 4], - [32, 4], - [31, 4] + [13, 10], + [14, 10], + [27, 10], + [23, 10], + [11, 10], + [12, 10], ]; for (var i = 0; i < mintNumForPrefecture.length; i++) { From 7d5a89ef6e5a1c5f8b787e56cc69772019c3faf9 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sat, 23 Dec 2023 17:19:29 +0900 Subject: [PATCH 138/146] =?UTF-8?q?author=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/contracts/localNouns/LocalNounsProvider2.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider2.sol b/contract/contracts/localNouns/LocalNounsProvider2.sol index 8ed1bae1..178a4d7d 100644 --- a/contract/contracts/localNouns/LocalNounsProvider2.sol +++ b/contract/contracts/localNouns/LocalNounsProvider2.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT /* - * Created by Isamu Arimoto (@isamua) + * Created by @eiba8884 */ pragma solidity ^0.8.6; From 3a72d605bd558d66d094f9dc7ece5d0b40a0f6af Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sat, 23 Dec 2023 17:20:35 +0900 Subject: [PATCH 139/146] =?UTF-8?q?trait-name=20=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/test/image-local-data.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/contract/test/image-local-data.json b/contract/test/image-local-data.json index b83fe958..15dfa89d 100644 --- a/contract/test/image-local-data.json +++ b/contract/test/image-local-data.json @@ -546,7 +546,7 @@ "data": "0x0018121c0e0100015402000254014301000254024302000243037f0100" }, { - "filename": "15-nigata-edamame-accessories", + "filename": "15-niigata-edamame-accessories", "data": "0x0019141b0e0200014e0200014e0100014e01c00100014e01c0011e01c00100011e01c00100" }, { @@ -777,14 +777,6 @@ "filename": "32-shimane-tamahagane-accessories", "data": "0x0018131b0e020001e001060100010001e0010601c8016201e00106016f0262016f03620100" }, - { - "filename": "33-oakayama-mamakari-accessories", - "data": "0x0019151b0e01a2019d01a2019d01a201000157019d01a2019d01a2019d01060100050601000157" - }, - { - "filename": "33-okauama-muscat-accessories", - "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" - }, { "filename": "33-okayama-denim-jacket01-accessories", "data": "0x0015171f090354049201000492025404540392010103920354055401920354019204540e540754010106540a54019201010192015402540100075403920154025401000454010102540392015402540100085401920254025401000b5402540100045401010654" @@ -801,10 +793,18 @@ "filename": "33-okayama-kibidango-accessories", "data": "0x0018131b0f010002570100015703eb04eb010002eb0100" }, + { + "filename": "33-okayama-mamakari-accessories", + "data": "0x0019151b0e01a2019d01a2019d01a201000157019d01a2019d01a2019d01060100050601000157" + }, { "filename": "33-okayama-momotaro-accessories", "data": "0x0015171f080100054d010105040101024d0100054d010105040101024d01000204034d010105040101024d01000204034d010105040101024d010002040100024d010105040101024d010002040100024d010105040101024d01000204010001eb014d010105740101024d01eb020401eb010a01eb010105740101024d01eb020402eb014d010105540101024d01eb020402eb014d010105540101024d01eb020402eb014d010105540101024d" }, + { + "filename": "33-okayama-muscat-accessories", + "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" + }, { "filename": "33-okayama-peach02-accessories", "data": "0x0018151c0e0300015f03000200035f02000100055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" @@ -846,12 +846,12 @@ "data": "0x0017171f090e53055303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" }, { - "filename": "35-yamaguchi-white -snake-accessories", - "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" + "filename": "35-yamaguchi-tsunoshima-big-bridge-accessories", + "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" }, { - "filename": "35-yamaguhchi-tsunoshima-big-bridge-accessories", - "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" + "filename": "35-yamaguchi-white-snake-accessories", + "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" }, { "filename": "36-tokushima-awaodori-accessories", @@ -1504,7 +1504,7 @@ "data": "0x00021a15070b000194035c04940b000348035c02480b00035c0100025c02000b00035c0200015c020004000748035c01480400020002480723035c012302480200010001480923025c0423014801000148042306de015c02de042301480148022302e90bde022301480148012304e905de015c05de01230148014807de045c06de0148014805de055c07de0148014806de035c03de02e903de014801480bde04e902de0148014811de014802480fde0248034801de055c07de034801001148010002000f48020004000b480400" }, { - "filename": "36-tokusima-whirlpools-heads", + "filename": "36-tokushima-whirlpools-heads", "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" }, { From af13517b9c5e86ddcdc54405e68b7343e4de1d28 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Sat, 23 Dec 2023 17:20:58 +0900 Subject: [PATCH 140/146] =?UTF-8?q?minter=E3=81=AE=E3=83=87=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=82=A4=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scripts/deploy_localNounsProvider2.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/contract/scripts/deploy_localNounsProvider2.ts b/contract/scripts/deploy_localNounsProvider2.ts index 006252fb..8ae04d7c 100644 --- a/contract/scripts/deploy_localNounsProvider2.ts +++ b/contract/scripts/deploy_localNounsProvider2.ts @@ -5,7 +5,8 @@ import { addresses } from '../../src/utils/addresses'; const nounsDescriptor = addresses.nounsDescriptor[network.name]; const localNounsDescriptor = addresses.localNounsDescriptor[network.name]; -const localNounsMinter = addresses.localNounsMinter[network.name]; +const localNounsMinterAddress = addresses.localNounsMinter[network.name]; +const tokenGateAddress = addresses.tokenGate[network.name]; async function main() { @@ -20,14 +21,26 @@ async function main() { const factoryToken = await ethers.getContractFactory('LocalNounsToken'); - const token = await factoryToken.deploy(provider.address, localNounsMinter); + const token = await factoryToken.deploy(provider.address, localNounsMinterAddress); await token.deployed(); console.log(`##LocalNounsToken="${token.address}"`); - await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${localNounsMinter} --network ${network.name} &`); + await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${localNounsMinterAddress} --network ${network.name} &`); const addresses4 = `export const addresses = {\n` + ` localNounsToken:"${token.address}",\n` + `}\n`; await writeFile(`../src/utils/addresses/localNounsToken_${network.name}.ts`, addresses4, () => { }); + const factoryMinter = await ethers.getContractFactory('LocalNounsMinter'); + const minterContract = await factoryMinter.deploy(token.address, tokenGateAddress); + await minterContract.deployed(); + console.log(`##LocalNounsMinter="${minterContract.address}"`); + await runCommand(`npx hardhat verify ${minterContract.address} ${token.address} ${tokenGateAddress} --network ${network.name} &`); + + const addresses5 = `export const addresses = {\n` + ` localNounsMinter:"${minterContract.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsMinter_${network.name}.ts`, addresses5, () => { }); + + await token.setMinter(minterContract.address); + + } async function runCommand(command: string) { From bfd240f4b851c17e4e6f285b5f9bb509b5e0e44a Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 18 Jan 2024 08:49:01 +0900 Subject: [PATCH 141/146] =?UTF-8?q?Piement=E3=82=AF=E3=83=AC=E3=82=AB?= =?UTF-8?q?=E6=89=95=E3=81=84=E5=AF=BE=E5=BF=9C=E3=81=AE=E3=81=9F=E3=82=81?= =?UTF-8?q?=E3=83=9F=E3=83=B3=E3=83=88=E5=85=88=E3=82=A2=E3=83=89=E3=83=AC?= =?UTF-8?q?=E3=82=B9=E6=8C=87=E5=AE=9A=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../localNouns/LocalNounsMinter2.sol | 145 ++++ contract/scripts/deploy_localNounsMinter2.ts | 31 + contract/scripts/setup_localNounsMinter.ts | 55 ++ contract/test/localNounsMinter2.ts | 660 ++++++++++++++++++ 4 files changed, 891 insertions(+) create mode 100644 contract/contracts/localNouns/LocalNounsMinter2.sol create mode 100644 contract/scripts/deploy_localNounsMinter2.ts create mode 100644 contract/scripts/setup_localNounsMinter.ts create mode 100644 contract/test/localNounsMinter2.ts diff --git a/contract/contracts/localNouns/LocalNounsMinter2.sol b/contract/contracts/localNouns/LocalNounsMinter2.sol new file mode 100644 index 00000000..54bb581d --- /dev/null +++ b/contract/contracts/localNouns/LocalNounsMinter2.sol @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsSeeder + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +import './interfaces/ILocalNounsToken.sol'; +import '../interfaces/ITokenGate.sol'; + +contract LocalNounsMinter2 is Ownable { + // Fires when the purchase executed + event MintSelectedPrefecture(uint256 prefectureId, uint256 amount, address minter); + + ILocalNounsToken public token; + ITokenGate public immutable tokenGate; + + address[] public royaltyAddresses; // ロイヤリティ送信先ウォレット + mapping(address => uint256) public royaltyRatio; // ロイヤリティ送信先ウォレットごとの割合 + uint256 royaltyRatioTotal; // royaltyRatioの合計(割戻用) + + uint256 public mintPriceForSpecified = 0.03 ether; + uint256 public mintPriceForNotSpecified = 0.01 ether; + + uint256 public mintMax = 1500; + + enum SalePhase { + Locked, + PreSale, + PublicSale + } + + SalePhase public phase = SalePhase.PublicSale; // セールフェーズ + + address public administratorsAddress; // 運営ウォレット + + constructor(ILocalNounsToken _token, ITokenGate _tokenGate) { + token = _token; + administratorsAddress = msg.sender; + tokenGate = _tokenGate; + + // ロイヤリティ送信先(コンストラクタではデプロイアドレス100%) + royaltyAddresses = [msg.sender]; + royaltyRatio[msg.sender] = 1; + royaltyRatioTotal = 1; + } + + function setMintMax(uint256 _mintMax) external onlyOwner { + mintMax = _mintMax; + } + + function setLocalNounsToken(ILocalNounsToken _token) external onlyOwner { + token = _token; + } + + function setMintPriceForSpecified(uint256 _price) external onlyOwner { + mintPriceForSpecified = _price; + } + + function setMintPriceForNotSpecified(uint256 _price) external onlyOwner { + mintPriceForNotSpecified = _price; + } + + function setPhase(SalePhase _phase) external onlyOwner { + phase = _phase; + } + + function setAdministratorsAddress(address _admin) external onlyOwner { + administratorsAddress = _admin; + } + + function mintSelectedPrefecture(uint256 _prefectureId, uint256 _amount) public payable returns (uint256 tokenId) { + return mintSelectedPrefecture2(_prefectureId, _amount, msg.sender); + } + + function mintSelectedPrefecture2( + uint256 _prefectureId, + uint256 _amount, + address _mintTo + ) public payable returns (uint256 tokenId) { + if (phase == SalePhase.Locked) { + revert('Sale is locked'); + } else if (phase == SalePhase.PreSale) { + require(tokenGate.balanceOf(msg.sender) > 0, 'TokenGate token is needed'); + } + + require(token.totalSupply2() + _amount <= mintMax, 'Over the mint limit'); + + uint256 mintPrice; + if (_prefectureId == 0) { + mintPrice = mintPriceForNotSpecified; + } else { + mintPrice = mintPriceForSpecified; + } + require(msg.value >= mintPrice * _amount, 'Must send the mint price'); + + tokenId = token.mintSelectedPrefecture(_mintTo, _prefectureId, _amount); + + _sendRoyalty(msg.value); + + emit MintSelectedPrefecture(_prefectureId, _amount, _mintTo); + } + + function withdraw() external payable onlyOwner { + _sendRoyalty(address(this).balance); + } + + // send royalties to admin and developper + function _sendRoyalty(uint _royalty) internal { + for (uint256 i = 0; i < royaltyAddresses.length; i++) { + _trySendRoyalty(royaltyAddresses[i], (_royalty * royaltyRatio[royaltyAddresses[i]]) / royaltyRatioTotal); + } + } + + function _trySendRoyalty(address to, uint amount) internal { + (bool sent, ) = payable(to).call{ value: amount }(''); + require(sent, 'Failed to send'); + } + + function setRoyaltyAddresses(address[] memory _addr, uint256[] memory ratio) external onlyOwner { + // 引数の整合性チェック + require(_addr.length == ratio.length, 'Invalid Arrays length'); + royaltyAddresses = _addr; + royaltyRatioTotal = 0; + + for (uint256 i = 0; i < _addr.length; i++) { + royaltyRatio[_addr[i]] = ratio[i]; + royaltyRatioTotal += ratio[i]; + } + } + +} diff --git a/contract/scripts/deploy_localNounsMinter2.ts b/contract/scripts/deploy_localNounsMinter2.ts new file mode 100644 index 00000000..3faa86ae --- /dev/null +++ b/contract/scripts/deploy_localNounsMinter2.ts @@ -0,0 +1,31 @@ +// LocalNounsTokenとLocalNounsProviderのみデプロイ +import { ethers, network } from 'hardhat'; +import { writeFile } from 'fs'; +import { addresses } from '../../src/utils/addresses'; + +const localNounsTokenAddress = addresses.localNounsToken[network.name]; +const tokenGateAddress = addresses.tokenGate[network.name]; + +async function main() { + + const factoryMinter = await ethers.getContractFactory('LocalNounsMinter2'); + const minterContract = await factoryMinter.deploy(localNounsTokenAddress, tokenGateAddress); + await minterContract.deployed(); + console.log(`##LocalNounsMinter="${minterContract.address}"`); + await runCommand(`npx hardhat verify ${minterContract.address} ${localNounsTokenAddress} ${tokenGateAddress} --network ${network.name} &`); + + const addresses5 = `export const addresses = {\n` + ` localNounsMinter:"${minterContract.address}",\n` + `}\n`; + await writeFile(`../src/utils/addresses/localNounsMinter_${network.name}.ts`, addresses5, () => { }); + +} + +async function runCommand(command: string) { + if (network.name !== 'localhost') { + console.log(command); + } +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/contract/scripts/setup_localNounsMinter.ts b/contract/scripts/setup_localNounsMinter.ts new file mode 100644 index 00000000..053b4236 --- /dev/null +++ b/contract/scripts/setup_localNounsMinter.ts @@ -0,0 +1,55 @@ +// import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../src/utils/addresses'; + +const nounsDescriptor = addresses.nounsDescriptor[network.name]; + +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; +import { abi as localMinterABI } from "../artifacts/contracts/localNouns/LocalNounsMinter2.sol/LocalNounsMinter2"; + +const localTokenAddress = addresses.localNounsToken[network.name]; +const localMinterAddress = addresses.localNounsMinter[network.name]; + +async function main() { + + let wallet; + if (network.name == 'localhost') { + [wallet] = await ethers.getSigners(); // localhost + } else { + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + wallet = new ethers.Wallet(privateKey, ethers.provider); + + } + + // ethers.Contract オブジェクトのインスタンスを作成 + const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + + let tx; + + // ロイヤリティ設定 + const rolyaltyAddresses = [ + '0x4F4bD77781cEeE4914B6bC16633D5437eaBCa5D3', // fuyu256 + '0x7731396aEe82849D0824162e634422Ee7144507D', // miorobo + '0xBE5f70E61D00acFb8Ba934551103387EE9fd3dB2', // eiba + '0xA0B9D89F6d17658EAA71fC0b916fCCB248340382' // 運営 + ]; + const rolyaltyRatio = [ + 3764, // fuyu256 + 1236, // miorobo + 2500, // eiba + 2500 // 運営 + ]; + tx = await localMinter.functions['setRoyaltyAddresses'](rolyaltyAddresses, rolyaltyRatio); + console.log("ロイヤリティ設定", tx.hash); + + // Minter設定 + // tx = await localToken.setMinter(localMinter.address); + // console.log("Minter設定", tx.hash); + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); diff --git a/contract/test/localNounsMinter2.ts b/contract/test/localNounsMinter2.ts new file mode 100644 index 00000000..c03343ab --- /dev/null +++ b/contract/test/localNounsMinter2.ts @@ -0,0 +1,660 @@ +import { expect } from 'chai'; +import { ethers, network, SignerWithAddress, Contract } from "hardhat"; +import { addresses } from '../../src/utils/addresses'; +import { ethers } from 'ethers'; +import { abi as sampleTokenAbi } from "../artifacts/contracts/sampleToken.sol/sampleToken"; + +let owner: SignerWithAddress, user1: SignerWithAddress, user2: SignerWithAddress, user3: SignerWithAddress, user4: SignerWithAddress, user5: SignerWithAddress, admin: SignerWithAddress, developper: SignerWithAddress; +let token: Contract, minter: Contract, provider: Contract, tokenGate: Contract, sampleToken: Contract; + +const nounsDescriptorAddress = addresses.nounsDescriptor[network.name]; +const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; +const nounsSeederAddress = addresses.nounsSeeder[network.name]; +const localSeederAddress = addresses.localSeeder[network.name]; +const sampleTokenAddress = addresses.sampleToken[network.name]; + +const zeroAddress = '0x0000000000000000000000000000000000000000'; + +before(async () => { + /* `npx hardhat node`実行後、このスクリプトを実行する前に、Nouns,LocalNounsの関連するコントラクトを + * デプロイする必要があります。(一度実行すると、node停止までは再実施する必要なし) + # cd contract + npx hardhat run scripts/deploy_nounsDescriptorV1.ts + npx hardhat run scripts/populate_nounsV1.ts + npx hardhat run scripts/deploy_localNouns.ts + npx hardhat run scripts/populate_localNouns.ts + npx hardhat run scripts/deploy_sample.ts + + note: `npx hardhat node`実行時にJavaScript heap out of memory が発生した場合は環境変数で使用メモリを指定する + export NODE_OPTIONS=--max-old-space-size=4096 + + # テスト実行 + # npx hardhat test test/localNounsMinter2.ts + + */ + + [owner, user1, user2, user3, user4, user5, admin, developper] = await ethers.getSigners(); + + const factoryTokenGate = await ethers.getContractFactory('AssetTokenGate'); + tokenGate = await factoryTokenGate.deploy(); + await tokenGate.deployed(); + + const factoryProvider = await ethers.getContractFactory('LocalNounsProvider2'); + provider = await factoryProvider.deploy( + nounsDescriptorAddress, localNounsDescriptorAddress); + await provider.deployed(); + // console.log(`##LocalNounsProvider="${provider.address}"`); + + const factoryToken = await ethers.getContractFactory('LocalNounsToken'); + token = await factoryToken.deploy(provider.address, owner.address); + await token.deployed(); + // console.log(`##LocalNounsToken="${token.address}"`); + + const factoryMinter = await ethers.getContractFactory('LocalNounsMinter2'); + minter = await factoryMinter.deploy(token.address, tokenGate.address); + await minter.deployed(); + // console.log(`##LocalNounsMinter="${minter.address}"`); + + await token.setMinter(minter.address); + + // sampleTokenのコントラクト定義 + sampleToken = await ethers.getContractAt(sampleTokenAbi, sampleTokenAddress); + + // tokenGateにsampleTokenをセット + await tokenGate.setWhitelist([sampleToken.address]); + +}); + +describe('mint functions', function () { + let result, tx; + + it('mint from non-minter', async function () { + await expect(token.connect(user1).functions.mint()) + .revertedWith('Cannot use'); + + await expect(token.connect(user1).functions.mintSelectedPrefecture(user1.address, 1, 1)) + .revertedWith('Invalid sender'); + + await expect(token.connect(user1).functions.ownerMint([user1.address], [1], [1])) + .revertedWith('Ownable: caller is not the owner'); + + }); + + it('mint at lock phaze', async function () { + + const [phaze] = await minter.functions.phase(); + expect(phaze).to.equal(2); // PublicSale + + await minter.connect(owner).functions.setPhase(0); + const [phaze2] = await minter.functions.phase(); + expect(phaze2).to.equal(0); // PublicSale + + await expect(minter.connect(user1).functions.mintSelectedPrefecture(1, 1)) + .revertedWith('Sale is locked'); + + await minter.connect(owner).functions.setPhase(2); + const [phaze3] = await minter.functions.phase(); + expect(phaze3).to.equal(2); // PublicSale + + }); + + it('Invalid prefectureId', async function () { + + // OKパターンは別テストで実施 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(48, 1, txParams)) + .revertedWith('Invalid prefectureId'); + }); + + it('mint from minter', async function () { + + const txParams = { value: ethers.utils.parseUnits("0.01", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(0, 1, txParams); + + const [balance] = await token.functions.balanceOf(user1.address); + expect(balance.toNumber()).to.equal(1); // user1は1つ保持 + + const [owner0] = await token.functions.ownerOf(0); + expect(owner0).to.equal(user1.address); + + const [totalSupply] = await token.functions.totalSupply(); + expect(totalSupply.toNumber()).to.equal(1); // tokenId=1 + + const [traits1] = await provider.functions.generateTraits(0); + // console.log('mint from minter', traits1); + + }); + + it('mint from minter2', async function () { + + const txParams = { value: ethers.utils.parseUnits("0.01", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture2(0, 1, user2.address, txParams); + + const [balance] = await token.functions.balanceOf(user2.address); + expect(balance.toNumber()).to.equal(1); // user2は1つ保持 + + const [owner1] = await token.functions.ownerOf(1); + expect(owner1).to.equal(user2.address); + + const [totalSupply] = await token.functions.totalSupply(); + expect(totalSupply.toNumber()).to.equal(2); // tokenId=1 + + const [traits1] = await provider.functions.generateTraits(1); + // console.log('mint from minter', traits1); + + }); + + it('multiple mint', async function () { + + const [balance0] = await token.functions.balanceOf(user3.address); + + const txParams = { value: ethers.utils.parseUnits("0.09", "ether") }; + await minter.connect(user3).functions.mintSelectedPrefecture(16, 3, txParams); + + const [balance] = await token.functions.balanceOf(user3.address); + + expect(balance.toNumber()).to.equal(3); // user3は3つ追加 + + const [owner0] = await token.functions.ownerOf(2); + expect(owner0).to.equal(user3.address); + + const [owner1] = await token.functions.ownerOf(3); + expect(owner1).to.equal(user3.address); + + const [owner2] = await token.functions.ownerOf(4); + expect(owner2).to.equal(user3.address); + + const [totalSupply] = await token.functions.totalSupply(); + expect(totalSupply.toNumber()).to.equal(5); // tokenId=1 + + // Traitsに指定した都道府県名が設定される + const [traits1] = await provider.functions.generateTraits(2); + const [traits2] = await provider.functions.generateTraits(3); + const [traits3] = await provider.functions.generateTraits(4); + // head,accessoryがランダムなので県のみチェック(head,accessoryは目視) + console.log('multiple mint', traits1); + console.log('multiple mint', traits2); + console.log('multiple mint', traits3); + expect(traits1.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); + expect(traits2.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); + expect(traits3.includes('{"trait_type": "prefecture" , "value":"Toyama"}')).to.equal(true); + + // 都道府県ごとのミント数 + const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(16); + expect(mintNumberPerPrefecture.toNumber()).to.equal(3); // tokenId=1 + + }); + + it('owner mint', async function () { + + const [balance3] = await token.functions.balanceOf(user3.address); + const [balance4] = await token.functions.balanceOf(user4.address); + const [balance5] = await token.functions.balanceOf(user5.address); + const [totalSupply] = await token.functions.totalSupply(); + + const txParams = { value: 0 }; + await token.connect(owner).functions.ownerMint([user3.address, user4.address, user5.address], [3, 5, 0], [1, 2, 20], txParams); + + const [balance3a] = await token.functions.balanceOf(user3.address); + const [balance4a] = await token.functions.balanceOf(user4.address); + const [balance5a] = await token.functions.balanceOf(user5.address); + + expect(balance3a.toNumber()).to.equal(balance3.toNumber() + 1); + expect(balance4a.toNumber()).to.equal(balance4.toNumber() + 2); + expect(balance5a.toNumber()).to.equal(balance5.toNumber() + 20); + + const [totalSupplya] = await token.functions.totalSupply(); + expect(totalSupplya.toNumber()).to.equal(totalSupply.toNumber() + 23); + + }); + + it('tokenGate', async function () { + + await minter.connect(owner).functions.setPhase(1); + const [phaze] = await minter.functions.phase(); + expect(phaze).to.equal(1); // PreSale + + const txParams = { value: ethers.utils.parseUnits("0.09", "ether") }; + // この後でSampleTokenをmintするので、node起動後の1回目しか正常に動作しない + await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 1, txParams)) + .revertedWith('TokenGate token is needed'); + + // sampleTokenをミント + await sampleToken.connect(user4).functions.mint(); + + const [balance] = await token.functions.balanceOf(user4.address); + await minter.connect(user4).functions.mintSelectedPrefecture(1, 3, txParams); + + const [balance2] = await token.functions.balanceOf(user4.address); + + expect(balance2.toNumber() - balance.toNumber()).to.equal(3); // user4は3つ追加 + + await minter.connect(owner).functions.setPhase(2); + const [phaze2] = await minter.functions.phase(); + expect(phaze2).to.equal(2); // PublicSale + + }); + + it('Send eth', async function () { + + await minter.connect(owner).functions.setPhase(2); + const [phaze] = await minter.functions.phase(); + expect(phaze).to.equal(2); // PreSale + + // 都道府県指定 OKパターンは'multiple mint'テストで実施 + const txParams = { value: ethers.utils.parseUnits("0.059", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(1, 2, txParams)) + .revertedWith('Must send the mint price'); + + // 都道府県指定なし OKパターンは'mint from minter'テストで実施 + const txParams2 = { value: ethers.utils.parseUnits("0.019", "ether") }; + await expect(minter.connect(user4).functions.mintSelectedPrefecture(0, 2, txParams2)) + .revertedWith('Must send the mint price'); + + }); + +}); + +describe('determinePrefectureId', function () { + it.skip('determinePrefectureId', async function () { + + let prefectureCount = new Array(47).fill(0); + + for (var i = 0; i < 1500; i++) { + const [prefectureId] = await provider.connect(owner).functions.determinePrefectureId(i); + prefectureCount[prefectureId.toNumber() - 1]++; + } + + // 全ての都道府県が1以上出現する + for (var i = 0; i < prefectureCount.length; i++) { + expect(prefectureCount[i]).to.greaterThan(0); + console.log("prefectureId", i+1, prefectureCount[i], prefectureCount[i]/1500*100 + '%'); + } + + }); + + it('mint all prefecture', async function () { + + await minter.connect(owner).functions.setPhase(2); + const txParams = { value: ethers.utils.parseUnits("0.3", "ether") }; + + // 全ての都道府県が1以上出現する + for (var i = 0; i < 47; i++) { + // ミント前の都道府県ごとのカウント + const [mintNumberPerPrefecture] = await provider.functions.mintNumberPerPrefecture(i + 1); + + // console.log("mint all prefecture", i + 1); + await minter.connect(user1).functions.mintSelectedPrefecture(i + 1, 5, txParams); + + // ミント後の都道府県ごとのカウント + const [mintNumberPerPrefecture2] = await provider.functions.mintNumberPerPrefecture(i + 1); + + expect(mintNumberPerPrefecture2.sub(mintNumberPerPrefecture).toNumber(), "prefectureId:" + (i + 1)).to.equal(5); + } + + }).timeout(600000); // タイムアウトを60秒に設定 +}); + +describe('P2P', function () { + let tx, result, tokenId1: number; + const price = ethers.BigNumber.from('1000000000000000'); + + it('not on sale', async function () { + + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // セールなし + await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Token is not on sale'); + }); + + it('Over the mint limit', async function () { + + // mintMaxに現在の発行数+1をセット + const [totalSupply] = await token.functions.totalSupply(); + await minter.functions.setMintMax(totalSupply.toNumber() + 1); + const [mintMax] = await minter.functions.mintMax(); + expect(mintMax.toNumber()).to.equal(totalSupply.toNumber() + 1); + + const txParams = { value: ethers.utils.parseUnits("0.06", "ether") }; + await expect(minter.connect(user5).functions.mintSelectedPrefecture(47, 2, txParams)) + .revertedWith('Over the mint limit'); + + // 一つだけならOK + const [balance] = await token.functions.balanceOf(user5.address); + const txParams2 = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user5).functions.mintSelectedPrefecture(47, 1, txParams2); + + const [balancea] = await token.functions.balanceOf(user5.address); + expect(balancea.toNumber()).to.equal(balance.toNumber() + 1); // user1は1つ保持 + + await minter.functions.setMintMax(1500); + const [mintMax2] = await minter.functions.mintMax(); + expect(mintMax2.toNumber()).to.equal(1500); + }); + + it('SetPrice', async function () { + await expect(token.connect(user2).setPriceOf(tokenId1, price)).revertedWith('Only the onwer can set the price'); + await token.connect(user1).setPriceOf(tokenId1, price); + result = await token.getPriceOf(tokenId1); + expect(result.toNumber()).equal(price); + + await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Not enough fund'); + + }); + + it('Purchase', async function () { + await expect(token.connect(user2).purchase(tokenId1, user2.address, zeroAddress)).revertedWith('Not enough fund'); + + // await token.connect(owner).setAdministratorsAddress(admin.address); + // await token.connect(owner).setDeveloppersAddress(developper.address); + await token.connect(owner).setRoyaltyAddresses([developper.address,admin.address],[3,1]); + + result = await token.ownerOf(tokenId1); + + const balance1 = await ethers.provider.getBalance(user1.address); + const balanceA = await ethers.provider.getBalance(admin.address); + const balanceD = await ethers.provider.getBalance(developper.address); + + await token.connect(user2).purchase(tokenId1, user2.address, zeroAddress, { value: price }); + result = await token.ownerOf(tokenId1); + expect(result).equal(user2.address); + + const balance12 = await ethers.provider.getBalance(user1.address); + expect(balance12.sub(balance1)).equal(price.div(40).mul(36)); // 90% + const balanceA2 = await ethers.provider.getBalance(admin.address); + expect(balanceA2.sub(balanceA)).equal(price.div(40).mul(1)); // 5% + const balanceD2 = await ethers.provider.getBalance(developper.address); + expect(balanceD2.sub(balanceD)).equal(price.div(40).mul(3)); // 15% + + }); + + it('Attempt to setprice/buy by user1', async function () { + await expect(token.connect(user1).purchase(0, user2.address, zeroAddress, { value: price })).revertedWith('Token is not on sale'); + await expect(token.connect(user1).setPriceOf(tokenId1, price)).revertedWith('Only the onwer can set the price'); + }); +}); + +describe('P2PTradable', function () { + let result, tx, err, balance, tokenId1: number, tokenId2: number; + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + + it('mint for test', async function () { + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + }); + + it('Attempt to super functions', async function () { + await expect(token.connect(user2).executeTrade(tokenId2, tokenId1)).revertedWith('Cannot use'); + + await expect(token.connect(user2).putTrade(tokenId1, true)).revertedWith('Cannot use'); + + }); + + it('Attempt to trade non-tradable token', async function () { + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams)).revertedWith('TargetTokenId is not on trade'); + }); + + it('Attempt to execute trade non-owner token', async function () { + await expect(token.connect(user2).executeTradeLocalNoun(tokenId1, tokenId2, txParams)).revertedWith('Only the onwer can trade'); + }); + + it('Attempt to put trade non-owner token', async function () { + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [], zeroAddress)).revertedWith('Only the onwer can trade'); + }); + + it('incorrect prefecutre id', async function () { + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [0], zeroAddress)).revertedWith('incorrect prefecutre id'); + await expect(token.connect(user2).putTradeLocalNoun(tokenId1, [48], zeroAddress)).revertedWith('incorrect prefecutre id'); + }); + + it('put trade', async function () { + + await token.connect(owner).setRoyaltyAddresses([developper.address,admin.address],[1,1]); + + // 希望都道府県外のトークンと交換しようとする + await token.connect(user1).putTradeLocalNoun(tokenId1, [1, 11, 12], zeroAddress); + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams)).revertedWith('unmatch to the wants list'); + + result = await token.connect(user1).getTradePrefectureFor(tokenId1); + expect(result.length).equal(3); + expect(result[0].toNumber()).equal(1); + expect(result[1].toNumber()).equal(11); + expect(result[2].toNumber()).equal(12); + + await token.connect(user1).putTradeLocalNoun(tokenId1, [10, 11, 12], zeroAddress); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + // 実行前の保持ETH + const balanceA = await ethers.provider.getBalance(admin.address); + const balanceD = await ethers.provider.getBalance(developper.address); + + const txParams2 = { value: ethers.utils.parseUnits("0.0029", "ether") }; + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams2)).revertedWith('Insufficial royalty'); + + tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams); + await tx.wait(); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + result = await token.connect(user1).ownerOf(tokenId1); + expect(result).equal(user2.address); + + result = await token.connect(user1).ownerOf(tokenId2); + expect(result).equal(user1.address); + + // 実行後の保持ETH + const balanceA2 = await ethers.provider.getBalance(admin.address); + const balanceD2 = await ethers.provider.getBalance(developper.address); + expect(balanceA2.sub(balanceA)).to.equal(ethers.utils.parseUnits("0.0015", "ether")); + expect(balanceD2.sub(balanceD)).to.equal(ethers.utils.parseUnits("0.0015", "ether")); + + }); + + it('put trade(都道府県指定なし)', async function () { + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + // 希望都道府県なしでトレードリストに出す + await token.connect(user1).putTradeLocalNoun(tokenId1, [], zeroAddress); + + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + result = await token.connect(user1).getTradePrefectureFor(tokenId1); + expect(result.length).equal(0); + + tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams); + await tx.wait(); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + result = await token.connect(user1).ownerOf(tokenId1); + expect(result).equal(user2.address); + + result = await token.connect(user1).ownerOf(tokenId2); + expect(result).equal(user1.address); + }); + + it('put trade(トレード先アドレス指定)', async function () { + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + // ユーザ2のアドレス指定でトレードリストに出す + await token.connect(user1).putTradeLocalNoun(tokenId1, [], user2.address); + + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + result = await token.connect(user1).tradeAddress(tokenId1); + expect(result).equal(user2.address); + + // ユーザ3がトレードしようとする → 失敗 + await expect(token.connect(user3).executeTradeLocalNoun(tokenId2, tokenId1, txParams)).revertedWith('Limited address can trade'); + + // ユーザ2がトレードしようとする → 成功 + tx = await token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams); + await tx.wait(); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + result = await token.connect(user1).ownerOf(tokenId1); + expect(result).equal(user2.address); + + result = await token.connect(user1).ownerOf(tokenId2); + expect(result).equal(user1.address); + }); + + it('cancel trade', async function () { + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + // for user2 + await minter.connect(user2).functions.mintSelectedPrefecture(10, 1, txParams); + result = await token.totalSupply(); + tokenId2 = result.toNumber() - 1; + + // 希望都道府県なしでトレードリストに出す + await token.connect(user1).putTradeLocalNoun(tokenId1, [], zeroAddress); + + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(true); + + // オーなー以外がキャンセルしようとする + await expect(token.connect(user2).cancelTradeLocalNoun(tokenId1)).revertedWith('Only the onwer can trade'); + + // オーなーがキャンセルする + await token.connect(user1).cancelTradeLocalNoun(tokenId1); + result = await token.connect(user1).trades(tokenId1); + expect(result).equal(false); //トレードリストから解除 + + await expect(token.connect(user2).executeTradeLocalNoun(tokenId2, tokenId1, txParams)).revertedWith('TargetTokenId is not on trade'); + + }); + +}); + + +describe('Approval', function () { + let result, tx, err, balance, tokenId1: number, tokenId2: number; + const txParams = { value: ethers.utils.parseUnits("0.003", "ether") }; + + it('Approvale error', async function () { + await minter.connect(owner).functions.setPhase(2); + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + await expect(token.connect(user1).functions.setApprovalForAll(user2.address, true)).revertedWith('Not allowed to set approval for all'); + + await expect(token.connect(user1).functions.approve(user2.address, tokenId1)).revertedWith('Not allowed to approve'); + }); + + it('setApprovalForAll', async function () { + await minter.connect(owner).functions.setPhase(2); + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + await token.connect(owner).functions.setCanSetAproval(true); + + await token.connect(user1).functions.setApprovalForAll(user2.address, true); + + result = await token.isApprovedForAll(user1.address, user2.address); + + expect(result).equal(true); + + + }); + + it('setApprovalForAllWithWhiteList', async function () { + await minter.connect(owner).functions.setPhase(2); + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + await token.connect(owner).functions.setCanSetAproval(false); + await token.connect(owner).functions.setApproveWhiteList(user2.address, true); + + await token.connect(user1).functions.setApprovalForAll(user2.address, true); + + result = await token.isApprovedForAll(user1.address, user2.address); + + expect(result).equal(true); + }); + + it('approve', async function () { + await minter.connect(owner).functions.setPhase(2); + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + await token.connect(owner).functions.setCanSetAproval(true); + + await token.connect(user1).functions.approve(user2.address, tokenId1); + + result = await token.getApproved(tokenId1); + + expect(result).equal(user2.address); + + + }); + + it('approveWithWhiteList', async function () { + await minter.connect(owner).functions.setPhase(2); + // for user1 + const txParams = { value: ethers.utils.parseUnits("0.03", "ether") }; + await minter.connect(user1).functions.mintSelectedPrefecture(5, 1, txParams); + result = await token.totalSupply(); + tokenId1 = result.toNumber() - 1; + + await token.connect(owner).functions.setCanSetAproval(false); + await token.connect(owner).functions.setApproveWhiteList(user2.address, true); + + await token.connect(user1).functions.approve(user2.address, tokenId1); + + result = await token.getApproved(tokenId1); + + expect(result).equal(user2.address); + }); + +}); From b2923490e7ee9482f5c47a7504736b8c77f2df77 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 18 Jan 2024 08:52:18 +0900 Subject: [PATCH 142/146] =?UTF-8?q?=E3=83=A1=E3=82=A4=E3=83=B3=E3=83=8D?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=83=87=E3=83=97=E3=83=AD=E3=82=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/hardhat.config.ts | 2 +- contract/scripts/populate_localNouns.ts | 18 +++--------------- contract/scripts/setup_localNouns.ts | 12 ++++-------- src/utils/addresses.ts | 12 ++++++++++++ .../addresses/localNounsDescriptor_mainnet.ts | 3 +++ .../addresses/localNounsMinter_mainnet.ts | 3 +++ .../addresses/localNounsProvider_mainnet.ts | 3 +++ src/utils/addresses/localNounsToken_mainnet.ts | 3 +++ src/utils/addresses/nftDescriptor_mainnet.ts | 3 +++ src/utils/addresses/nounsDescriptor_mainnet.ts | 3 +++ 10 files changed, 38 insertions(+), 24 deletions(-) create mode 100644 src/utils/addresses/localNounsDescriptor_mainnet.ts create mode 100644 src/utils/addresses/localNounsMinter_mainnet.ts create mode 100644 src/utils/addresses/localNounsProvider_mainnet.ts create mode 100644 src/utils/addresses/localNounsToken_mainnet.ts create mode 100644 src/utils/addresses/nftDescriptor_mainnet.ts create mode 100644 src/utils/addresses/nounsDescriptor_mainnet.ts diff --git a/contract/hardhat.config.ts b/contract/hardhat.config.ts index e2cdb433..ddead97c 100644 --- a/contract/hardhat.config.ts +++ b/contract/hardhat.config.ts @@ -54,7 +54,7 @@ const config: HardhatUserConfig = { process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], }, mainnet: { - url: "https://eth-mainnet.alchemyapi.io/v2/" + process.env.ALCHEMY_API_KEY, + url: "https://eth-mainnet.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY, gasMultiplier: 1.1, accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts index 31d31304..ff115119 100644 --- a/contract/scripts/populate_localNouns.ts +++ b/contract/scripts/populate_localNouns.ts @@ -5,20 +5,12 @@ import { addresses } from '../../src/utils/addresses'; const nounsDescriptor = addresses.nounsDescriptor[network.name]; import { images, palette, bgcolors } from "../test/image-local-data"; -import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; -import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; -import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; -import { abi as localMinterABI } from "../artifacts/contracts/localNouns/LocalNounsMinter.sol/LocalNounsMinter"; dotenv.config(); -const localSeederAddress = addresses.localSeeder[network.name]; const localNounsDescriptorAddress = addresses.localNounsDescriptor[network.name]; -const localProviderAddress = addresses.localProvider[network.name]; -const localTokenAddress = addresses.localNounsToken[network.name]; -const localMinterAddress = addresses.localNounsMinter[network.name]; async function main() { @@ -27,11 +19,7 @@ async function main() { const [wallet] = await ethers.getSigners(); // localhost // ethers.Contract オブジェクトのインスタンスを作成 - const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); - const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); - const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); - const localMinter = new ethers.Contract(localMinterAddress, localMinterABI, wallet); let tx; if (true) { @@ -67,9 +55,9 @@ async function main() { const prefectureId = chunk[0].prefectureId; // トランザクションエラーで再実行する場合に成功している都道府県をスキップ - // if (Number(prefectureId) <= 36 ) { - // continue; - // } + if (Number(prefectureId) == 2 || Number(prefectureId) == 3 ) { + continue; + } tx = await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data), chunk.map(({ filename }) => filename)); console.log("chunk:", prefectureId, tx.hash); } diff --git a/contract/scripts/setup_localNouns.ts b/contract/scripts/setup_localNouns.ts index eb3f15a8..62a90b2c 100644 --- a/contract/scripts/setup_localNouns.ts +++ b/contract/scripts/setup_localNouns.ts @@ -45,16 +45,12 @@ async function main() { // ロイヤリティ設定 const rolyaltyAddresses = [ - '0xA0B9D89F6d17658EAA71fC0b916fCCB248340382', // eiba - '0x52A76a606AC925f7113B4CC8605Fe6bCad431EbB', // takumi(仮) - '0x35e5664686475Fe0Fb05300a1708B3C7243F916e', // deynao(仮) - '0x2072C081C77A476c28d4B2e0F86ED8A789BD8078' // udon(仮) + '0xA0B9D89F6d17658EAA71fC0b916fCCB248340382', // 運営 + '0xBE5f70E61D00acFb8Ba934551103387EE9fd3dB2' // eiba ]; const rolyaltyRatio = [ - 5, // eiba - 2, // takumi - 2, // deynao - 1 // udon + 5, // 運営 + 5 // eiba ]; tx = await localToken.functions['setRoyaltyAddresses'](rolyaltyAddresses, rolyaltyRatio); console.log("ロイヤリティ設定", tx.hash); diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index 345e2521..a633c3a1 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -81,19 +81,25 @@ import { addresses as messagetoken_goerli } from "./addresses/messagetoken_goerl import { addresses as messagetoken_localhost } from "./addresses/messagetoken_localhost"; import { addresses as messagetoken_mumbai } from "./addresses/messagetoken_mumbai"; import { addresses as nounsDescriptor_mumbai } from "./addresses/nounsDescriptor_mumbai"; +import { addresses as nounsDescriptor_mainnet } from "./addresses/nounsDescriptor_mainnet"; import { addresses as nounsDescriptor_localhost } from "./addresses/nounsDescriptor_localhost"; import { addresses as nounsSeeder_mumbai } from "./addresses/nounsSeeder_mumbai"; import { addresses as nounsSeeder_localhost } from "./addresses/nounsSeeder_localhost"; +import { addresses as nftDescriptor_mainnet } from "./addresses/nftDescriptor_mainnet"; import { addresses as nftDescriptor_mumbai } from "./addresses/nftDescriptor_mumbai"; import { addresses as nftDescriptor_localhost } from "./addresses/nftDescriptor_localhost"; import { addresses as localSeeder_mumbai } from "./addresses/localseeder_mumbai"; import { addresses as localSeeder_localhost } from "./addresses/localseeder_localhost"; +import { addresses as localNounsDescriptor_mainnet } from "./addresses/localNounsDescriptor_mainnet"; import { addresses as localNounsDescriptor_mumbai } from "./addresses/localNounsDescriptor_mumbai"; import { addresses as localNounsDescriptor_localhost } from "./addresses/localNounsDescriptor_localhost"; +import { addresses as localProvider_mainnet } from "./addresses/localNounsProvider_mainnet"; import { addresses as localProvider_mumbai } from "./addresses/localNounsProvider_mumbai"; import { addresses as localProvider_localhost } from "./addresses/localNounsProvider_localhost"; +import { addresses as localNounsToken_mainnet } from "./addresses/localNounsToken_mainnet"; import { addresses as localNounsToken_mumbai } from "./addresses/localNounsToken_mumbai"; import { addresses as localNounsToken_localhost } from "./addresses/localNounsToken_localhost"; +import { addresses as localNounsMinter_mainnet } from "./addresses/localNounsMinter_mainnet"; import { addresses as localNounsMinter_mumbai } from "./addresses/localNounsMinter_mumbai"; import { addresses as localNounsMinter_localhost } from "./addresses/localNounsMinter_localhost"; @@ -315,6 +321,7 @@ export const addresses: Addresses = { goerli: dynamic_goerli.tokenGate, }, nounsDescriptor: { + mainnet: nounsDescriptor_mainnet.nounsDescriptor, mumbai: nounsDescriptor_mumbai.nounsDescriptor, localhost: nounsDescriptor_localhost.nounsDescriptor, }, @@ -323,6 +330,7 @@ export const addresses: Addresses = { localhost: nounsSeeder_localhost.nounsSeeder, }, nftDescriptor: { + mainnet: nftDescriptor_mainnet.nftDescriptor, mumbai: nftDescriptor_mumbai.nftDescriptor, localhost: nftDescriptor_localhost.nftDescriptor, }, @@ -332,18 +340,22 @@ export const addresses: Addresses = { localhost: localSeeder_localhost.localseeder, }, localNounsDescriptor: { + mainnet: localNounsDescriptor_mainnet.localNounsDescriptor, mumbai: localNounsDescriptor_mumbai.localNounsDescriptor, localhost: localNounsDescriptor_localhost.localNounsDescriptor, }, localProvider: { + mainnet: localProvider_mainnet.localNounsProvider, mumbai: localProvider_mumbai.localNounsProvider, localhost: localProvider_localhost.localNounsProvider, }, localNounsToken: { + mainnet: localNounsToken_mainnet.localNounsToken, mumbai: localNounsToken_mumbai.localNounsToken, localhost: localNounsToken_localhost.localNounsToken, }, localNounsMinter: { + mainnet: localNounsMinter_mainnet.localNounsMinter, mumbai: localNounsMinter_mumbai.localNounsMinter, localhost: localNounsMinter_localhost.localNounsMinter, }, diff --git a/src/utils/addresses/localNounsDescriptor_mainnet.ts b/src/utils/addresses/localNounsDescriptor_mainnet.ts new file mode 100644 index 00000000..8f5e7fde --- /dev/null +++ b/src/utils/addresses/localNounsDescriptor_mainnet.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsDescriptor:"0x5524d4a7bCFF26e6545596A02cE957c498145FAc", +} diff --git a/src/utils/addresses/localNounsMinter_mainnet.ts b/src/utils/addresses/localNounsMinter_mainnet.ts new file mode 100644 index 00000000..9bff2f13 --- /dev/null +++ b/src/utils/addresses/localNounsMinter_mainnet.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsMinter:"0x47F109094bD5B926E5010668a3f364F0D59f898F", +} diff --git a/src/utils/addresses/localNounsProvider_mainnet.ts b/src/utils/addresses/localNounsProvider_mainnet.ts new file mode 100644 index 00000000..ef23fa5a --- /dev/null +++ b/src/utils/addresses/localNounsProvider_mainnet.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsProvider:"0xb1B709a43446cE2045125B4F1e7D2e9eC5317397", +} diff --git a/src/utils/addresses/localNounsToken_mainnet.ts b/src/utils/addresses/localNounsToken_mainnet.ts new file mode 100644 index 00000000..3db76521 --- /dev/null +++ b/src/utils/addresses/localNounsToken_mainnet.ts @@ -0,0 +1,3 @@ +export const addresses = { + localNounsToken:"0xc2671e1a7f8baa09F84e0c68A90ce5DF1D0dbC6B", +} diff --git a/src/utils/addresses/nftDescriptor_mainnet.ts b/src/utils/addresses/nftDescriptor_mainnet.ts new file mode 100644 index 00000000..05c46ae9 --- /dev/null +++ b/src/utils/addresses/nftDescriptor_mainnet.ts @@ -0,0 +1,3 @@ +export const addresses = { + nftDescriptor:"0x0BBAd8c947210ab6284699605ce2a61780958264", +} diff --git a/src/utils/addresses/nounsDescriptor_mainnet.ts b/src/utils/addresses/nounsDescriptor_mainnet.ts new file mode 100644 index 00000000..04203cfc --- /dev/null +++ b/src/utils/addresses/nounsDescriptor_mainnet.ts @@ -0,0 +1,3 @@ +export const addresses = { + nounsDescriptor:"0x0Cfdb3Ba1694c2bb2CFACB0339ad7b1Ae5932B63", +} From b8cf4d5ce4049ec7b6e793e56dcf3e88983b83ad Mon Sep 17 00:00:00 2001 From: Eiba Date: Fri, 19 Jan 2024 09:11:03 +0900 Subject: [PATCH 143/146] =?UTF-8?q?=E3=82=A2=E3=83=89=E3=83=AC=E3=82=B9?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/addresses/localNounsDescriptor_mumbai.ts | 2 +- src/utils/addresses/localNounsMinter_mumbai.ts | 2 +- src/utils/addresses/localNounsProvider_mumbai.ts | 2 +- src/utils/addresses/localNounsToken_mumbai.ts | 2 +- src/utils/addresses/sample_localhost.ts | 4 ++-- src/utils/addresses/tokenGate_mainnet.ts | 4 ++-- src/utils/addresses/tokenGate_mumbai.ts | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/utils/addresses/localNounsDescriptor_mumbai.ts b/src/utils/addresses/localNounsDescriptor_mumbai.ts index 216c9a4c..af26b8fc 100644 --- a/src/utils/addresses/localNounsDescriptor_mumbai.ts +++ b/src/utils/addresses/localNounsDescriptor_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsDescriptor:"0x54A4148220BFbcEB9D649a821B6a16b81392f912", + localNounsDescriptor:"0x1b487454bBd46E6284dF2C0dFAB59a1929b976D3", } diff --git a/src/utils/addresses/localNounsMinter_mumbai.ts b/src/utils/addresses/localNounsMinter_mumbai.ts index 2bec2a7b..a720bb65 100644 --- a/src/utils/addresses/localNounsMinter_mumbai.ts +++ b/src/utils/addresses/localNounsMinter_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsMinter:"0x141e200e60bDaEC81B2c482e173256a4B2bf63A6", + localNounsMinter:"0x6e5dDcD0945b7Fe6494F6d7bD543347384814ffd", } diff --git a/src/utils/addresses/localNounsProvider_mumbai.ts b/src/utils/addresses/localNounsProvider_mumbai.ts index c8d30bd8..840c4426 100644 --- a/src/utils/addresses/localNounsProvider_mumbai.ts +++ b/src/utils/addresses/localNounsProvider_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsProvider:"0x38F3D7C1E139f7b6F8E8b0909cF885aFD3Af52f5", + localNounsProvider:"0x3992767cF71D2731819fc7ea9c6f2a2Ed7099E8b", } diff --git a/src/utils/addresses/localNounsToken_mumbai.ts b/src/utils/addresses/localNounsToken_mumbai.ts index d67d9c6c..35f3b493 100644 --- a/src/utils/addresses/localNounsToken_mumbai.ts +++ b/src/utils/addresses/localNounsToken_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsToken:"0x3915C2246042d85b5cdD20AAe22D7Babe203AdFf", + localNounsToken:"0x2B56dC724b7790e73FD8e2536f7118260aA880BE", } diff --git a/src/utils/addresses/sample_localhost.ts b/src/utils/addresses/sample_localhost.ts index 4ed9ecca..fa1e2473 100644 --- a/src/utils/addresses/sample_localhost.ts +++ b/src/utils/addresses/sample_localhost.ts @@ -1,4 +1,4 @@ export const addresses = { - providerAddress:"0x5D42EBdBBa61412295D7b0302d6F50aC449Ddb4F", - sampleToken:"0xddE78e6202518FF4936b5302cC2891ec180E8bFf" + providerAddress:"0x70bDA08DBe07363968e9EE53d899dFE48560605B", + sampleToken:"0x26B862f640357268Bd2d9E95bc81553a2Aa81D7E" } diff --git a/src/utils/addresses/tokenGate_mainnet.ts b/src/utils/addresses/tokenGate_mainnet.ts index 8738a631..3b5f39ac 100644 --- a/src/utils/addresses/tokenGate_mainnet.ts +++ b/src/utils/addresses/tokenGate_mainnet.ts @@ -1,3 +1,3 @@ export const addresses = { - tokenGate: "0xEDE1a69DB77c4CBa8d15F9170568959a56Ce9c05", -}; + tokenGate:"0x3bc86b35eD7D617498Da6F8dc351D71749dc595a", +} diff --git a/src/utils/addresses/tokenGate_mumbai.ts b/src/utils/addresses/tokenGate_mumbai.ts index e9710325..2dff4ec6 100644 --- a/src/utils/addresses/tokenGate_mumbai.ts +++ b/src/utils/addresses/tokenGate_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - tokenGate:"0xf5C0D978403daec0a266608717D2965bbaCC090c", + tokenGate:"0xd7133465F44814133a8369566deac4e97C804876", } From f3481ca455757d193e7e91664967966b47b60c40 Mon Sep 17 00:00:00 2001 From: Eiba Date: Sat, 9 Mar 2024 16:05:13 +0900 Subject: [PATCH 144/146] =?UTF-8?q?Minter=E8=A8=AD=E5=AE=9A=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contract/scripts/setup_localNounsMinter.ts | 4 ++-- src/utils/addresses/localNounsMinter_mainnet.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contract/scripts/setup_localNounsMinter.ts b/contract/scripts/setup_localNounsMinter.ts index 053b4236..6becd784 100644 --- a/contract/scripts/setup_localNounsMinter.ts +++ b/contract/scripts/setup_localNounsMinter.ts @@ -44,8 +44,8 @@ async function main() { console.log("ロイヤリティ設定", tx.hash); // Minter設定 - // tx = await localToken.setMinter(localMinter.address); - // console.log("Minter設定", tx.hash); + tx = await localToken.setMinter(localMinter.address); + console.log("Minter設定", tx.hash); } diff --git a/src/utils/addresses/localNounsMinter_mainnet.ts b/src/utils/addresses/localNounsMinter_mainnet.ts index 9bff2f13..e829434d 100644 --- a/src/utils/addresses/localNounsMinter_mainnet.ts +++ b/src/utils/addresses/localNounsMinter_mainnet.ts @@ -1,3 +1,3 @@ export const addresses = { - localNounsMinter:"0x47F109094bD5B926E5010668a3f364F0D59f898F", + localNounsMinter:"0xABeA2710271E7294dffE6a02B90489309a9AfA8e", } From ea8ee559696173205657292eec4d317e29d099dc Mon Sep 17 00:00:00 2001 From: Eiba Date: Sat, 9 Mar 2024 16:06:16 +0900 Subject: [PATCH 145/146] =?UTF-8?q?=E3=83=88=E3=83=AC=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=81=B8=E3=83=AA=E3=82=B9=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scripts/localNouns/putTrade_localNouns.ts | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 contract/scripts/localNouns/putTrade_localNouns.ts diff --git a/contract/scripts/localNouns/putTrade_localNouns.ts b/contract/scripts/localNouns/putTrade_localNouns.ts new file mode 100644 index 00000000..6e88f6dd --- /dev/null +++ b/contract/scripts/localNouns/putTrade_localNouns.ts @@ -0,0 +1,55 @@ +/* +npx hardhat run scripts/localNouns/putTrade_localNouns.ts --network mainnet +*/ +// import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../../src/utils/addresses'; + +import { abi as localTokenABI } from "../../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; + +const localTokenAddress = addresses.localNounsToken[network.name]; + +async function main() { + + let wallet; + if (network.name == 'localhost') { + [wallet] = await ethers.getSigners(); // localhost + } else { + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + wallet = new ethers.Wallet(privateKey, ethers.provider); + + } + + // ethers.Contract オブジェクトのインスタンスを作成 + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + + let tx; + + // トレードへリスト + const tradeList = [ + [79,[],'0xA5cdC559386d8A5c89671628804234B8cb43bbb9'], +[85,[],'0xA5cdC559386d8A5c89671628804234B8cb43bbb9'], +[88,[],'0xA5cdC559386d8A5c89671628804234B8cb43bbb9'], +[111,[],'0xA5cdC559386d8A5c89671628804234B8cb43bbb9'], + ]; + + for (var i = 0; i < tradeList.length; i++) { + try { + tx = await localToken.functions['putTradeLocalNoun'](tradeList[i][0], tradeList[i][1], tradeList[i][2]); + console.log("trade:", tradeList[i], tx.hash); + } catch (error) { + console.log("trade error:", tradeList[i], error); + // console.error(error); + }; + await sleep(1000); // 1秒待機 + } +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); From 8d682a2c0cdcb392f45b319615cdef0d5994b337 Mon Sep 17 00:00:00 2001 From: Eiba Date: Sat, 9 Mar 2024 16:06:43 +0900 Subject: [PATCH 146/146] =?UTF-8?q?=E3=82=A8=E3=82=A2=E3=83=89=E3=83=AD?= =?UTF-8?q?=E3=83=83=E3=83=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scripts/localNouns/airdrop_localNouns.ts | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 contract/scripts/localNouns/airdrop_localNouns.ts diff --git a/contract/scripts/localNouns/airdrop_localNouns.ts b/contract/scripts/localNouns/airdrop_localNouns.ts new file mode 100644 index 00000000..d2f099b1 --- /dev/null +++ b/contract/scripts/localNouns/airdrop_localNouns.ts @@ -0,0 +1,57 @@ +// import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import { addresses } from '../../../src/utils/addresses'; + +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; + +const localTokenAddress = addresses.localNounsToken[network.name]; + +async function main() { + + let wallet; + if (network.name == 'localhost') { + [wallet] = await ethers.getSigners(); // localhost + } else { + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + wallet = new ethers.Wallet(privateKey, ethers.provider); + + } + + // ethers.Contract オブジェクトのインスタンスを作成 + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + + let tx; + + // 実行委員へミント + const mintNumForPrefecture = [ + // ['0x4eA84A06F011495B99Aa7202fDca60443107042F',0,3], 【済】 + // ['0x84296321A9Bb88Be24df53d6AbB308f94e44c13A',0,3], 【済】 + // ['0x3E1dc89ab1E3BB8A64bB0f65b65b404f1BF708c3',0,6], 【済】 + // ['0x7AB60415A6712d15DcA1E08E9B72a56b8cC97c77',0,3], 【済】 + // ['0x2072C081C77A476c28d4B2e0F86ED8A789BD8078',0,3], 【済】 + // ['0x4F4bD77781cEeE4914B6bC16633D5437eaBCa5D3',0,3],【済】 + // ['0x39a3e7812F7d5851fc557C550E08Fa75700941E1',0,3],【済】 + ['0x9Cc1d4AF4BD2F9123e66433313be82aFa802393f',0,3], + // ['0xBc7dC395762d1268d51F8480F9e7e892cAd9175b',0,3], 【済】 + ]; + + for (var i = 0; i < mintNumForPrefecture.length; i++) { + try { + tx = await localToken.functions['ownerMint']([mintNumForPrefecture[i][0]], [mintNumForPrefecture[i][1]], [mintNumForPrefecture[i][2]]); + console.log("mint:", mintNumForPrefecture[i], tx.hash); + } catch (error) { + console.log("mint error:", mintNumForPrefecture[i], tx.hash); + // console.error(error); + }; + await sleep(1000); // 1秒待機 + } +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +});