{
  "version": 2,
  "chainId": 4663,
  "sourceDigest": "fd62f14e2b38d83b004dd80ff9325a22a63d1bdc5babcd0766c98e879de527be",
  "network": {
    "chainId": 4663,
    "blockNumber": "107904320",
    "source": "https://developers.uniswap.org/docs/protocols/v4/deployments",
    "contracts": {
      "poolManager": {
        "address": "0x8366a39cc670b4001a1121b8f6a443a643e40951",
        "codeHash": "0xbd3881180b547f5fe817545743cfb4343e96b1bc6640dcd70c106b0066e95626"
      },
      "positionManager": {
        "address": "0x58daec3116aae6d93017baaea7749052e8a04fa7",
        "codeHash": "0xc873e135dc9aaec88489cfbad146b4cb49d6a32e0d80326377784b7ba17670b2"
      },
      "permit2": {
        "address": "0x000000000022d473030f116ddee9f6b43ac78ba3",
        "codeHash": "0x5208783f52488f7d3493e5e38311ab707c1d75457fe472a19b0b4d57d66a7fca"
      }
    }
  },
  "provenance": {
    "source": "https://sourcify.dev/server/v2/contract/4663/",
    "referenceContracts": [
      {
        "address": "0x7ed598bcef8bd9edd8c97a195c6d13f40801ec7e",
        "chainId": 4663,
        "matchId": "43289536",
        "runtimeMatch": "exact_match",
        "verifiedAt": "2026-08-04T17:40:43Z",
        "compiler": "0.8.35+commit.47b9dedd"
      },
      {
        "address": "0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e",
        "chainId": 4663,
        "matchId": "43642574",
        "runtimeMatch": "match",
        "verifiedAt": "2026-08-14T22:01:59Z",
        "compiler": "0.8.35+commit.47b9dedd"
      },
      {
        "address": "0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be044",
        "chainId": 4663,
        "matchId": "43313796",
        "runtimeMatch": "match",
        "sourceEqualsFactoryBundle": true
      }
    ],
    "snapshot": {
      "block": "107904320",
      "hash": "0x413c548a0cc4c9fa04f309ee37f2c5a5fdbc11ba63aa5d0e735e63aa51596167",
      "chainId": 4663,
      "snipeTaxStartBps": "9900",
      "snipeTaxSeconds": "3",
      "launchFee": "500000000000000",
      "maxCreatorTaxBps": "1000",
      "protocolFeeShareBps": "3000",
      "buybackBurnBps": "5000",
      "hookFeeBps": "100",
      "maxInternalPriceImpactBps": "300",
      "sourceMatchesRpc": true,
      "runtimeHash": "0x89a27da6f703e0a7cdd4f233e7cb57604ff75b164530962d3ff7cf8483a67d84"
    },
    "adaptation": [
      "First-party Pons/pons identifiers renamed Shillo/shillo; MIT attribution retained.",
      "Automatic phase-two pool creation attempt after the curve sweep; failures remain permissionlessly retryable.",
      "Launch economics digest additionally binds the protocol recipient and opening-tax terms.",
      "New wallet-scoped CREATE2 helper for browser deployment."
    ]
  },
  "artifacts": {
    "ShilloCreate2Deployer": {
      "abi": [
        {
          "type": "function",
          "name": "deploy",
          "inputs": [
            {
              "name": "salt",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "creationCode",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "deployed",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "event",
          "name": "Deployed",
          "inputs": [
            {
              "name": "account",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "deployed",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "salt",
              "type": "bytes32",
              "indexed": false,
              "internalType": "bytes32"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "DeploymentFailed",
          "inputs": []
        }
      ],
      "bytecode": "0x60808060405234601557610192908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63cdcb760a14610025575f80fd5b3461012257604036600319011261012257600435906024359067ffffffffffffffff8211610122573660238301121561012257816004013567ffffffffffffffff811161012657610080601f8201601f19166020018361013a565b8082526020820192366024838301011161012257815f926024602093018637830101526040519160208301338152846040850152604084526100c360608561013a565b925190922090516001600160a01b03925ff516801561011357806020926040519081527f8a667a762c6b11836243ef58bb98850c7a4210d0226eb030bb2e03e3b7cc01e3843392a3604051908152f35b633011642560e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176101265760405256fea26469706673582212207bc8e8f1c3f0b7f536684cf9cd7f576f499e73a0773646bc3edf56a59b48f26064736f6c63430008230033",
      "runtime": "0x6080806040526004361015610012575f80fd5b5f3560e01c63cdcb760a14610025575f80fd5b3461012257604036600319011261012257600435906024359067ffffffffffffffff8211610122573660238301121561012257816004013567ffffffffffffffff811161012657610080601f8201601f19166020018361013a565b8082526020820192366024838301011161012257815f926024602093018637830101526040519160208301338152846040850152604084526100c360608561013a565b925190922090516001600160a01b03925ff516801561011357806020926040519081527f8a667a762c6b11836243ef58bb98850c7a4210d0226eb030bb2e03e3b7cc01e3843392a3604051908152f35b633011642560e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176101265760405256fea26469706673582212207bc8e8f1c3f0b7f536684cf9cd7f576f499e73a0773646bc3edf56a59b48f26064736f6c63430008230033",
      "immutableReferences": {},
      "creationHash": "0x9f5b81929cc6a1f037239b670c140860fbb533ade51f452b71d894cd5f3196db",
      "runtimeBytes": 402,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/ShilloCreate2Deployer.sol": "ShilloCreate2Deployer"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloCreate2Deployer.sol": {
          "keccak256": "0x93c228ce8cfbe97d338f7aa1c29377fd2f546286303e4cf7e90d7567f75a6585",
          "urls": [
            "bzz-raw://02b4b796d1d32657c92df44e7b7dd23d0cd618216329a9dc84ee8e314dc89ec8",
            "dweb:/ipfs/Qmf8QyveBtV3EmV8bxQUwkwmKtQnmwK6Sk7f3zUHwcWMxL"
          ],
          "license": "MIT"
        }
      }
    },
    "ShilloV2FeeEscrow": {
      "abi": [
        {
          "type": "function",
          "name": "balanceOf",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "balanceOfToken",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "claim",
          "inputs": [
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "claim",
          "inputs": [],
          "outputs": [
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "claimToken",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "claimToken",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "credit",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "payable"
        },
        {
          "type": "function",
          "name": "creditToken",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "event",
          "name": "Claimed",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "ClaimedToken",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "Credited",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "depositor",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "CreditedToken",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "depositor",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "InsufficientBalance",
          "inputs": [
            {
              "name": "requested",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "available",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "NoBalance",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ReentrancyGuardReentrantCall",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SafeERC20FailedOperation",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "TransferFailed",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ZeroAddress",
          "inputs": []
        }
      ],
      "bytecode": "0x6080806040523460395760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005561078c908161003e8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806309ad4dd9146102015780631698755f146101d257806332f289cf14610187578063379607f5146101615780634e71d92d1461011a57806370a08231146100e3578063d5d44d80146100c55763f59e38b714610071575f80fd5b346100c15760403660031901126100c15761008a610249565b61009261025f565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b5f80fd5b60203660031901126100c1576100e16100dc610249565b6104bd565b005b346100c15760203660031901126100c1576001600160a01b03610104610249565b165f525f602052602060405f2054604051908152f35b346100c1575f3660031901126100c15761013261051c565b335f525f602052602061014860405f2054610669565b60015f5160206107375f395f51905f5255604051908152f35b346100c15760203660031901126100c15761017a61051c565b6020610148600435610669565b346100c15760203660031901126100c15760206101486101a5610249565b6101ad61051c565b335f9081526001845260408082206001600160a01b0384168352855290205490610554565b346100c15760403660031901126100c15760206101486101f0610249565b6101f861051c565b60243590610554565b346100c15760603660031901126100c15761023661021d610249565b61022561025f565b61022d61051c565b604435916102d9565b60015f5160206107375f395f51905f5255005b600435906001600160a01b03821682036100c157565b602435906001600160a01b03821682036100c157565b90601f8019910116810190811067ffffffffffffffff82111761029757604052565b634e487b7160e01b5f52604160045260245ffd5b919082039182116102b857565b634e487b7160e01b5f52601160045260245ffd5b919082018092116102b857565b6001600160a01b03169190821580156104ac575b61049d5781156103f5576040516370a0823160e01b81523060048201526001600160a01b03919091169190602081602481865afa90811561042e575f9161046b575b50604051916323b872dd60e01b5f52336004523060245260445260205f60648180875af160015f511481161561044c575b826040525f60605215610439576370a0823160e01b8252306004830152602082602481865afa801561042e575f906103fa575b61039d92506102ab565b9182156103f557805f52600160205260405f20825f5260205260405f206103c58482546102cc565b90556040519283527f5d104c62f50449fadfe6f4013c8f36588d32737f94b5ac9b83ddad33b3e1ffdf60203394a4565b505050565b506020823d602011610426575b8161041460209383610275565b810103126100c15761039d9151610393565b3d9150610407565b6040513d5f823e3d90fd5b82635274afe760e01b5f5260045260245ffd5b600181151661046257833b15153d151616610360565b823d5f823e3d90fd5b90506020813d602011610495575b8161048660209383610275565b810103126100c157515f61032f565b3d9150610479565b63d92e233d60e01b5f5260045ffd5b506001600160a01b038116156102ed565b6001600160a01b0316801561049d57341561051957805f525f60205260405f206104e83482546102cc565b9055604051903482527f4e45da441832cf53bdaa69235704fc0575e68210f459ee1562911024b12967d560203393a3565b50565b60025f5160206107375f395f51905f5254146105455760025f5160206107375f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b811561065a57335f52600160205260405f2060018060a01b0382165f5260205260405f2054808311610644578261058a916102ab565b335f52600160205260405f2060018060a01b0383165f5260205260405f205560018060a01b031660405163a9059cbb60e01b5f52336004528260245260205f60448180865af160015f5114811615610625575b8160405215610612578281527fdbc1ea3a8459e4c7e11fb385b52bbb5cc8c8ab85eec5d883ac9aa78c171f514160203392a390565b50635274afe760e01b5f5260045260245ffd5b600181151661063b57823b15153d1516166105dd565b503d5f823e3d90fd5b8263cf47918160e01b5f5260045260245260445ffd5b636165515360e11b5f5260045ffd5b801561065a57335f525f60205260405f2054808211610720578161068c916102ab565b335f525f60205260405f20555f80808084335af13d1561071b573d67ffffffffffffffff811161029757604051906106ce601f8201601f191660200183610275565b81525f60203d92013e5b1561070c576040518181527fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a60203392a290565b6312171d8360e31b5f5260045ffd5b6106d8565b9063cf47918160e01b5f5260045260245260445ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220149460e6623c1eeeeb9b1eb10f48a81683152085074e30e0cd2a75760de67b2a64736f6c63430008230033",
      "runtime": "0x60806040526004361015610011575f80fd5b5f3560e01c806309ad4dd9146102015780631698755f146101d257806332f289cf14610187578063379607f5146101615780634e71d92d1461011a57806370a08231146100e3578063d5d44d80146100c55763f59e38b714610071575f80fd5b346100c15760403660031901126100c15761008a610249565b61009261025f565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b5f80fd5b60203660031901126100c1576100e16100dc610249565b6104bd565b005b346100c15760203660031901126100c1576001600160a01b03610104610249565b165f525f602052602060405f2054604051908152f35b346100c1575f3660031901126100c15761013261051c565b335f525f602052602061014860405f2054610669565b60015f5160206107375f395f51905f5255604051908152f35b346100c15760203660031901126100c15761017a61051c565b6020610148600435610669565b346100c15760203660031901126100c15760206101486101a5610249565b6101ad61051c565b335f9081526001845260408082206001600160a01b0384168352855290205490610554565b346100c15760403660031901126100c15760206101486101f0610249565b6101f861051c565b60243590610554565b346100c15760603660031901126100c15761023661021d610249565b61022561025f565b61022d61051c565b604435916102d9565b60015f5160206107375f395f51905f5255005b600435906001600160a01b03821682036100c157565b602435906001600160a01b03821682036100c157565b90601f8019910116810190811067ffffffffffffffff82111761029757604052565b634e487b7160e01b5f52604160045260245ffd5b919082039182116102b857565b634e487b7160e01b5f52601160045260245ffd5b919082018092116102b857565b6001600160a01b03169190821580156104ac575b61049d5781156103f5576040516370a0823160e01b81523060048201526001600160a01b03919091169190602081602481865afa90811561042e575f9161046b575b50604051916323b872dd60e01b5f52336004523060245260445260205f60648180875af160015f511481161561044c575b826040525f60605215610439576370a0823160e01b8252306004830152602082602481865afa801561042e575f906103fa575b61039d92506102ab565b9182156103f557805f52600160205260405f20825f5260205260405f206103c58482546102cc565b90556040519283527f5d104c62f50449fadfe6f4013c8f36588d32737f94b5ac9b83ddad33b3e1ffdf60203394a4565b505050565b506020823d602011610426575b8161041460209383610275565b810103126100c15761039d9151610393565b3d9150610407565b6040513d5f823e3d90fd5b82635274afe760e01b5f5260045260245ffd5b600181151661046257833b15153d151616610360565b823d5f823e3d90fd5b90506020813d602011610495575b8161048660209383610275565b810103126100c157515f61032f565b3d9150610479565b63d92e233d60e01b5f5260045ffd5b506001600160a01b038116156102ed565b6001600160a01b0316801561049d57341561051957805f525f60205260405f206104e83482546102cc565b9055604051903482527f4e45da441832cf53bdaa69235704fc0575e68210f459ee1562911024b12967d560203393a3565b50565b60025f5160206107375f395f51905f5254146105455760025f5160206107375f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b811561065a57335f52600160205260405f2060018060a01b0382165f5260205260405f2054808311610644578261058a916102ab565b335f52600160205260405f2060018060a01b0383165f5260205260405f205560018060a01b031660405163a9059cbb60e01b5f52336004528260245260205f60448180865af160015f5114811615610625575b8160405215610612578281527fdbc1ea3a8459e4c7e11fb385b52bbb5cc8c8ab85eec5d883ac9aa78c171f514160203392a390565b50635274afe760e01b5f5260045260245ffd5b600181151661063b57823b15153d1516166105dd565b503d5f823e3d90fd5b8263cf47918160e01b5f5260045260245260445ffd5b636165515360e11b5f5260045ffd5b801561065a57335f525f60205260405f2054808211610720578161068c916102ab565b335f525f60205260405f20555f80808084335af13d1561071b573d67ffffffffffffffff811161029757604051906106ce601f8201601f191660200183610275565b81525f60203d92013e5b1561070c576040518181527fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a60203392a290565b6312171d8360e31b5f5260045ffd5b6106d8565b9063cf47918160e01b5f5260045260245260445ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220149460e6623c1eeeeb9b1eb10f48a81683152085074e30e0cd2a75760de67b2a64736f6c63430008230033",
      "immutableReferences": {},
      "creationHash": "0x5f3525bac1a1d6edb94e75ffc28b3312096fbb2c31602936b7c7b00c60aac59d",
      "runtimeBytes": 1932,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/ShilloV2FeeEscrow.sol": "ShilloV2FeeEscrow"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloV2FeeEscrow.sol": {
          "keccak256": "0xd9c11d8276d41137d7baa9d6c3c87ccff7357d1a393d89558e7810de4d48cc57",
          "urls": [
            "bzz-raw://7fcc1d37b3aaa4991a5ed0ea5bccc3811e70aafabebfbdf99495a99c6a573588",
            "dweb:/ipfs/QmXZNu8c4TPymAdVGbpX5LzWEEkKxxsn3MpGUtLmuaxgWk"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2.sol": {
          "keccak256": "0xa11234bcbb18e4b7ecc2a74ab571fac55c93be48e4e2940d56d8c365e7b58671",
          "urls": [
            "bzz-raw://05b58e8f851021be44e1523b78550ac00d5f043114fbd0a99199424401b7efc1",
            "dweb:/ipfs/QmPAViXH1FUydKFrLY9V1RaxQ7iZwF258Mx4PT76w6SvDn"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
          "keccak256": "0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d",
          "urls": [
            "bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100",
            "dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
          "keccak256": "0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc",
          "urls": [
            "bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037",
            "dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
          "keccak256": "0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44",
          "urls": [
            "bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d",
            "dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol": {
          "keccak256": "0xd735962e3d6660884153ba8a972b5f100dde4c482f2ff1c525ba7fdefb154cbd",
          "urls": [
            "bzz-raw://5a264d17b093f585844b0d977e9f60555b8c8d6513b304fde863cdf652a0d336",
            "dweb:/ipfs/QmWXfaJisjVnrjTUjZGryZpMob9wKivvtbodLS3PTc1ttq"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
          "keccak256": "0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2",
          "urls": [
            "bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303",
            "dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
          "keccak256": "0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f",
          "urls": [
            "bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e",
            "dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
          "keccak256": "0x377051c0c17a28038c32f58d76a42817eb3b24f2b4c6a2e788a9544e856d738d",
          "urls": [
            "bzz-raw://c5365fead4a20b84662284c97c07d707c67f5bc9e07b371980aba8c3c6e83661",
            "dweb:/ipfs/QmYrYoLPEADtXoCu9ZBnwkXdNB9D9FPHuhS9pWaQW4nYx5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol": {
          "keccak256": "0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53",
          "urls": [
            "bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99",
            "dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
          "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97",
          "urls": [
            "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b",
            "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
          "keccak256": "0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c",
          "urls": [
            "bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617",
            "dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"
          ],
          "license": "MIT"
        }
      }
    },
    "ShilloV2MemeHook": {
      "abi": [
        {
          "type": "constructor",
          "inputs": [
            {
              "name": "poolManager_",
              "type": "address",
              "internalType": "contract IPoolManager"
            },
            {
              "name": "feeEscrow_",
              "type": "address",
              "internalType": "contract IShilloV2FeeEscrow"
            },
            {
              "name": "protocolFeeRecipient_",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "initialOwner_",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "receive",
          "stateMutability": "payable"
        },
        {
          "type": "function",
          "name": "acceptOwnership",
          "inputs": [],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "afterAddLiquidity",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct ModifyLiquidityParams",
              "components": [
                {
                  "name": "tickLower",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "tickUpper",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "liquidityDelta",
                  "type": "int256",
                  "internalType": "int256"
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "internalType": "bytes32"
                }
              ]
            },
            {
              "name": "delta",
              "type": "int256",
              "internalType": "BalanceDelta"
            },
            {
              "name": "feesAccrued",
              "type": "int256",
              "internalType": "BalanceDelta"
            },
            {
              "name": "hookData",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            },
            {
              "name": "",
              "type": "int256",
              "internalType": "BalanceDelta"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "afterDonate",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "amount0",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "amount1",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "hookData",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "afterInitialize",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "sqrtPriceX96",
              "type": "uint160",
              "internalType": "uint160"
            },
            {
              "name": "tick",
              "type": "int24",
              "internalType": "int24"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "afterRemoveLiquidity",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct ModifyLiquidityParams",
              "components": [
                {
                  "name": "tickLower",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "tickUpper",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "liquidityDelta",
                  "type": "int256",
                  "internalType": "int256"
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "internalType": "bytes32"
                }
              ]
            },
            {
              "name": "delta",
              "type": "int256",
              "internalType": "BalanceDelta"
            },
            {
              "name": "feesAccrued",
              "type": "int256",
              "internalType": "BalanceDelta"
            },
            {
              "name": "hookData",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            },
            {
              "name": "",
              "type": "int256",
              "internalType": "BalanceDelta"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "afterSwap",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct SwapParams",
              "components": [
                {
                  "name": "zeroForOne",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "amountSpecified",
                  "type": "int256",
                  "internalType": "int256"
                },
                {
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160",
                  "internalType": "uint160"
                }
              ]
            },
            {
              "name": "delta",
              "type": "int256",
              "internalType": "BalanceDelta"
            },
            {
              "name": "hookData",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            },
            {
              "name": "",
              "type": "int128",
              "internalType": "int128"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "beforeAddLiquidity",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct ModifyLiquidityParams",
              "components": [
                {
                  "name": "tickLower",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "tickUpper",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "liquidityDelta",
                  "type": "int256",
                  "internalType": "int256"
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "internalType": "bytes32"
                }
              ]
            },
            {
              "name": "hookData",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "beforeDonate",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "amount0",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "amount1",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "hookData",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "beforeInitialize",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "sqrtPriceX96",
              "type": "uint160",
              "internalType": "uint160"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "beforeRemoveLiquidity",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct ModifyLiquidityParams",
              "components": [
                {
                  "name": "tickLower",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "tickUpper",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "liquidityDelta",
                  "type": "int256",
                  "internalType": "int256"
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "internalType": "bytes32"
                }
              ]
            },
            {
              "name": "hookData",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "beforeSwap",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct SwapParams",
              "components": [
                {
                  "name": "zeroForOne",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "amountSpecified",
                  "type": "int256",
                  "internalType": "int256"
                },
                {
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160",
                  "internalType": "uint160"
                }
              ]
            },
            {
              "name": "hookData",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            },
            {
              "name": "",
              "type": "int256",
              "internalType": "BeforeSwapDelta"
            },
            {
              "name": "",
              "type": "uint24",
              "internalType": "uint24"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "buybackBurnBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "buybackVault",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract ShilloV2BuybackVault"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "currentFeePolicy",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "tuple",
              "internalType": "struct FeePolicySnapshot",
              "components": [
                {
                  "name": "protocolFeeRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "protocolFeeShareBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "buybackBurnBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "hookFeeBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "maxInternalPriceImpactBps",
                  "type": "uint16",
                  "internalType": "uint16"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "factory",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "feeEscrow",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IShilloV2FeeEscrow"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "feeSweepOperator",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "getHookPermissions",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "tuple",
              "internalType": "struct Hooks.Permissions",
              "components": [
                {
                  "name": "beforeInitialize",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "afterInitialize",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "beforeAddLiquidity",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "afterAddLiquidity",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "beforeRemoveLiquidity",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "afterRemoveLiquidity",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "beforeSwap",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "afterSwap",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "beforeDonate",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "afterDonate",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "beforeSwapReturnDelta",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "afterSwapReturnDelta",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "afterAddLiquidityReturnDelta",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "afterRemoveLiquidityReturnDelta",
                  "type": "bool",
                  "internalType": "bool"
                }
              ]
            }
          ],
          "stateMutability": "pure"
        },
        {
          "type": "function",
          "name": "hookFeeBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launches",
          "inputs": [
            {
              "name": "",
              "type": "bytes32",
              "internalType": "PoolId"
            }
          ],
          "outputs": [
            {
              "name": "registered",
              "type": "bool",
              "internalType": "bool"
            },
            {
              "name": "memecoinIsCurrency0",
              "type": "bool",
              "internalType": "bool"
            },
            {
              "name": "memecoin",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "quoteToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "creator",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "buybackCreatorRecipient",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "protocolFeeRecipient",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "creatorTaxBps",
              "type": "uint16",
              "internalType": "uint16"
            },
            {
              "name": "protocolFeeShareBps",
              "type": "uint16",
              "internalType": "uint16"
            },
            {
              "name": "buybackBurnBps",
              "type": "uint16",
              "internalType": "uint16"
            },
            {
              "name": "hookFeeBps",
              "type": "uint16",
              "internalType": "uint16"
            },
            {
              "name": "maxInternalPriceImpactBps",
              "type": "uint16",
              "internalType": "uint16"
            },
            {
              "name": "buybackEnabled",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "maxInternalPriceImpactBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "owner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pendingBuyback",
          "inputs": [
            {
              "name": "",
              "type": "bytes32",
              "internalType": "PoolId"
            },
            {
              "name": "currency",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pendingCreatorTax",
          "inputs": [
            {
              "name": "",
              "type": "bytes32",
              "internalType": "PoolId"
            },
            {
              "name": "currency",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pendingFees",
          "inputs": [
            {
              "name": "",
              "type": "bytes32",
              "internalType": "PoolId"
            },
            {
              "name": "currency",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pendingOwner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "poolManager",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IPoolManager"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "protocolFeeRecipient",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "protocolFeeShareBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "registerPool",
          "inputs": [
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "memecoin",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "creator",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "buybackCreatorRecipient",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "creatorTaxBps",
              "type": "uint16",
              "internalType": "uint16"
            },
            {
              "name": "buybackEnabled",
              "type": "bool",
              "internalType": "bool"
            },
            {
              "name": "policy",
              "type": "tuple",
              "internalType": "struct FeePolicySnapshot",
              "components": [
                {
                  "name": "protocolFeeRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "protocolFeeShareBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "buybackBurnBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "hookFeeBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "maxInternalPriceImpactBps",
                  "type": "uint16",
                  "internalType": "uint16"
                }
              ]
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "renounceOwnership",
          "inputs": [],
          "outputs": [],
          "stateMutability": "pure"
        },
        {
          "type": "function",
          "name": "rescuePoolFees",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "internalType": "PoolId"
            }
          ],
          "outputs": [
            {
              "name": "protocolAmount",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "creatorAmount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setBuybackBurnBps",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setBuybackEnabled",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "internalType": "PoolId"
            },
            {
              "name": "enabled",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setBuybackVault",
          "inputs": [
            {
              "name": "buybackVault_",
              "type": "address",
              "internalType": "contract ShilloV2BuybackVault"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setCreatorFeeRecipient",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "internalType": "PoolId"
            },
            {
              "name": "newRecipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setFactory",
          "inputs": [
            {
              "name": "factory_",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setFeeSweepOperator",
          "inputs": [
            {
              "name": "operator",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setHookFeeBps",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setMaxInternalPriceImpactBps",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setProtocolFeeRecipient",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setProtocolFeeShareBps",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "sweepPoolFees",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "internalType": "PoolId"
            },
            {
              "name": "minConversionQuoteOut",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "minBuybackTokensOut",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "transferOwnership",
          "inputs": [
            {
              "name": "newOwner",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "unlockCallback",
          "inputs": [
            {
              "name": "data",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "event",
          "name": "BuybackBurnBpsUpdated",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "BuybackEnabledUpdated",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "indexed": true,
              "internalType": "PoolId"
            },
            {
              "name": "enabled",
              "type": "bool",
              "indexed": false,
              "internalType": "bool"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "BuybackVaultSet",
          "inputs": [
            {
              "name": "vault",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "CreatorFeeRecipientUpdated",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "indexed": true,
              "internalType": "PoolId"
            },
            {
              "name": "previousRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "FactorySet",
          "inputs": [
            {
              "name": "factory",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "FeeSweepOperatorUpdated",
          "inputs": [
            {
              "name": "operator",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "HookFeeBpsUpdated",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "HookFeeCollected",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "indexed": true,
              "internalType": "PoolId"
            },
            {
              "name": "currency",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            },
            {
              "name": "feeAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "taxAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "MaxInternalPriceImpactUpdated",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferStarted",
          "inputs": [
            {
              "name": "previousOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferred",
          "inputs": [
            {
              "name": "previousOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PoolBuybackSkipped",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "indexed": true,
              "internalType": "PoolId"
            },
            {
              "name": "foldedBackQuote",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PoolConversionSkipped",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "indexed": true,
              "internalType": "PoolId"
            },
            {
              "name": "retainedMemecoin",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PoolFeesRescued",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "indexed": true,
              "internalType": "PoolId"
            },
            {
              "name": "quoteToken",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "protocolAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "creatorAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PoolFeesSwept",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "indexed": true,
              "internalType": "PoolId"
            },
            {
              "name": "protocolAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "buybackAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "creatorAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tokensLocked",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PoolRegistered",
          "inputs": [
            {
              "name": "poolId",
              "type": "bytes32",
              "indexed": true,
              "internalType": "PoolId"
            },
            {
              "name": "memecoin",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            },
            {
              "name": "quoteToken",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            },
            {
              "name": "creator",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "ProtocolFeeRecipientUpdated",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "ProtocolFeeShareUpdated",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "AlreadyRegistered",
          "inputs": []
        },
        {
          "type": "error",
          "name": "AlreadySet",
          "inputs": []
        },
        {
          "type": "error",
          "name": "HookNotImplemented",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InexactQuoteTransfer",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "expected",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "received",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "InternalSwapRequiresOperator",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidBps",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidPoolKey",
          "inputs": []
        },
        {
          "type": "error",
          "name": "MinimumOutputRequired",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotFactory",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotFeeSweepOperator",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotPoolManager",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NothingToRescue",
          "inputs": []
        },
        {
          "type": "error",
          "name": "OwnableInvalidOwner",
          "inputs": [
            {
              "name": "owner",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "OwnableUnauthorizedAccount",
          "inputs": [
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "OwnershipCannotBeRenounced",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ReentrancyGuardReentrantCall",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SafeCastOverflowedIntToUint",
          "inputs": [
            {
              "name": "value",
              "type": "int256",
              "internalType": "int256"
            }
          ]
        },
        {
          "type": "error",
          "name": "SafeCastOverflowedUintToInt",
          "inputs": [
            {
              "name": "value",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "SafeERC20FailedOperation",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "SlippageExceeded",
          "inputs": [
            {
              "name": "actual",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "minimum",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "UnknownPool",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ZeroAddress",
          "inputs": []
        }
      ],
      "bytecode": "0x60c06040523461040c57604051601f613f9838819003918201601f19168301916001600160401b038311848410176104105780849260809460405283398101031261040c5780516001600160a01b0381169182820361040c5760208101516001600160a01b0381169290919083830361040c5761008a606061008360408501610444565b9301610444565b906080525f6101a061009a610424565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100f8610424565b600181528260208201528260408201528260608201528260808201528260a08201528260c0820152600160e08201528261010082015282610120820152826101408201526001610160820152826101808201520152612000301615156001148015906103ff575b80156103f2575b80156103e5575b80156103d8575b80156103cb575b80156103bf575b80156103af575b80156103a3575b8015610397575b801561038b575b801561037b575b801561036f575b8015610363575b610350576001600160a01b031692831561033d57600180546001600160a01b03199081169091555f805491821686178155604051969186916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005515908115610334575b50610325576001600160a01b03169081156103255760a05260018060a01b03196004541617600455610bb8600555611388600655606460075561012c60085560018060a01b03196009541617600955613b3f908161045982396080518181816104e201528181610563015281816105cd0152818161092701528181610a7e01528181610af3015281816111e2015281816114d701528181611d59015281816123500152818161289001528181612e6601528181612f5d015281816139780152613a6a015260a0518181816107bd015281816136cc01526137670152f35b63d92e233d60e01b5f5260045ffd5b9050155f610248565b631e4fbdf760e01b5f525f60045260245ffd5b630732d7b560e51b5f523060045260245ffd5b506001301615156101b3565b506002301615156101ac565b50600430161515600114156101a5565b5060083016151561019e565b50601030161515610197565b50602030161515610190565b5060403016151560011415610189565b50608030161515610182565b506101003016151561017b565b5061020030161515610174565b506104003016151561016d565b5061080030161515610166565b506110003016151561015f565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b0381118382101761041057604052565b51906001600160a01b038216820361040c5756fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806321d0ee7014611d46578063259982e514611d465780632ce8b02914611cac578063359b4f3014611c685780633d61055e14611c2b57806341541148146115f857806348332680146115a257806349127e2a1461158557806354faf9c314611514578063575e24b4146114805780635bb47808146114005780635cbe81171461124757806364df049e1461121f5780636c2bbe7e14610a6b5780636fe7e6eb146111a7578063715018a6146111885780637862505c146110f757806379ba50971461107757806389a69bd814610fdf5780638a36a6bb14610fb75780638da5cb5b14610f905780639040f86614610f7357806390addc1e14610f5657806391dd734614610ac15780639f063efc14610a6b578063ad0912301461097d578063b47b2fb1146108d0578063b6a8b0fa146104cf578063b89eddab1461086a578063bfe7af8314610814578063c45a0155146107ec578063c4b7de97146107a8578063c4e833ce14610640578063c8eaa792146105fc578063dc4c90d3146105b8578063dc98354e14610533578063e1b4af69146104cf578063e30c3978146104a7578063e356a18114610463578063e521cb92146103f2578063ea26abcf146103d5578063ed8ef7a31461030b578063f1f5c993146102e3578063f2fde38b146102765763fc75e4810361000e573461027257602036600319011261027257600435610229612bcb565b6113888111610263576020817f4d1fc9430e27afb14db15169fd1c79e8b51773302919ac8c049f1c41995e380b92600555604051908152a1005b63c6cc5d7f60e01b5f5260045ffd5b5f80fd5b346102725760203660031901126102725761028f611dc6565b610297612bcb565b60018060a01b0316806001600160601b0360a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b34610272575f366003190112610272576003546040516001600160a01b039091168152602090f35b3461027257604036600319011261027257600435610327611d9a565b6002546001600160a01b031633036103c657815f52600a60205260405f209060ff825416156103b7576001600160a01b03169081156103a8576002018054909282916001600160a01b0316907fb45e6b72a7de9a2077babe9717744436f3880e114099956ca85f91a77469a5325f80a481546001600160a01b031916179055005b63d92e233d60e01b5f5260045ffd5b63f7139e3360e01b5f5260045ffd5b631966391b60e11b5f5260045ffd5b34610272575f366003190112610272576020600754604051908152f35b346102725760203660031901126102725761040b611dc6565b610413612bcb565b6001600160a01b031680156103a8576020817fc1b5345cce283376356748dc57f2dfa7120431d016fc7ca9ba641bc65f91411d926001600160601b0360a01b6004541617600455604051908152a1005b346102725760403660031901126102725761047c611d9a565b6004355f52600e60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b34610272575f366003190112610272576001546040516001600160a01b039091168152602090f35b34610272576104dd36611f0f565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303925061052491505057630a85dc2960e01b5f5260045ffd5b63570c108560e11b5f5260045ffd5b346102725760e03660031901126102725761054c611dc6565b60a036602319011261027257610560611db0565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610524576002546001600160a01b039081169116036103c657604051636e4c1aa760e11b8152602090f35b34610272575f366003190112610272576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461027257604036600319011261027257610615611d9a565b6004355f52600d60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b34610272575f366003190112610272575f6101a060405161066081611f9d565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c060206040516106c381611f9d565b60018152818101905f8252604081015f8152606082015f8152608083015f815260a084015f815260c085015f815260e0860190600182526101008701925f84526101208801945f86526101408901965f88526101608a019860018a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b34610272575f366003190112610272576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610272575f366003190112610272576002546040516001600160a01b039091168152602090f35b3461027257602036600319011261027257600435610830612bcb565b6103e88111610263576020817faea8b8d37d8110dd00c418d9c1c268f0fbadacb802c284b71a1777e411cd965a92600755604051908152a1005b3461027257602036600319011261027257600435610886612bcb565b801580156108c4575b610263576020817f6968b68c1fb468c8b257b012290bf803a6a6d7e79468e0326050724f7573cf0192600855604051908152a1005b5061271081101561088f565b3461027257610160366003190112610272576108ea611dc6565b5060a03660231901126102725760603660c319011261027257610144356001600160401b03811161027257610923903690600401611ddc565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361052457604061096361012435613131565b82516001600160e01b03199092168252600f0b6020820152f35b34610272576020366003190112610272576004355f52600a6020526101a060405f2060ff81549160018060a01b036001820154169060018060a01b03600282015416600460018060a01b03600384015416920154926040519585811615158752858160081c161515602088015260018060a01b039060101c1660408701526060860152608085015260a084015260018060a01b03811660c084015261ffff8160a01c1660e084015261ffff8160b01c1661010084015261ffff8160c01c1661012084015261ffff8160d01c1661014084015261ffff8160e01c1661016084015260f01c161515610180820152f35b3461027257610a7936611e6c565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330393506105249250505057630a85dc2960e01b5f5260045ffd5b34610272576020366003190112610272576004356001600160401b03811161027257610af1903690600401611ddc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169033829003610524578260609181010312610272578135906020830135926002841015610272576040013590825f52600a60205260405f209060405194610b6186611f81565b600483549360ff851615158852602088019460ff8160081c161515865260018060a01b039060101c16604089015260018060a01b03600182015416606089015260018060a01b03600282015416608089015260018060a01b0360038201541660a089015201549560018060a01b03871660c082015261ffff8760a01c1660e082015261ffff8760b01c1661010082015261ffff8760c01c1661012082015261ffff8760d01c1661014082015261018060ff61016083019861ffff8160e01c168a5260f01c161515910152845f52600b60205260405f209060405196610c4588611f66565b60018060a01b038354168852600183015490602089019560018060a01b038316875260408a019462ffffff8460a01c16865260608b019360b81c60020b8452600260018060a01b03910154169360808b01948552155f14610f4e57511515975b604051602081019182526006604082015260408152610cc5606082611fb9565b51902060405190631e2eaeaf60e01b82526004820152602081602481895afa908115610ee55789905f92610f16575b5061ffff610d0c9351169160018060a01b0316612d44565b956001600160ff1b038111610f0457610d2490612690565b956040519460608601918683106001600160401b03841117610ef057604092835289151587526020878101998a526001600160a01b039182168489019081529351633cf3645360e21b81528c5183166004820152895183166024820152965162ffffff166044880152935160020b60648701529351841660848601529451151560a4850152955160c484015294511660e48201526101206101048201525f61012482018190529093918491610144918391905af1918215610ee5575f92610ead575b50610e1f610e8b9460018060a01b0390511691610e078460801d8094612e32565b51600f9390930b9283906001600160a01b0316612e32565b8215610ea65780925b15610e9e5750905b600f0b5f811215610e9657610e47610e4c91612690565b613115565b905b600f0b5f811315610e8f57610e6290613115565b604051916020830152604082015260408152610e7f606082611fb9565b60405191829182611ee5565b0390f35b505f610e62565b505f90610e4e565b905090610e30565b8192610e28565b9391506020843d602011610edd575b81610ec960209383611fb9565b810103126102725792519092610e1f610de6565b3d9150610ebc565b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b63123baf0360e11b5f5260045260245ffd5b929150506020823d602011610f46575b81610f3360209383611fb9565b810103126102725790518861ffff610cf4565b3d9150610f26565b511597610ca5565b34610272575f366003190112610272576020600854604051908152f35b34610272575f366003190112610272576020600554604051908152f35b34610272575f366003190112610272575f546040516001600160a01b039091168152602090f35b34610272575f366003190112610272576009546040516001600160a01b039091168152602090f35b34610272575f36600319011261027257610ff7612666565b50611000612666565b5060a0600180821b036004541661ffff80600554168180600654168180600754169181806008541695608060405161103781611f66565b8a81526020810192835260408101948552606081019687520196875260405198895251166020880152511660408601525116606084015251166080820152f35b34610272575f36600319011261027257600154336001600160a01b038216036110e4576001600160a01b03199081166001555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b63118cdaa760e01b5f523360045260245ffd5b34610272576020366003190112610272576004356001600160a01b0381169081900361027257611125612bcb565b6003546001600160a01b0381166111795781156103a8576001600160a01b03191681176003556040519081527f49e94f33a5714648c99c03d3c96612ffea74b1df6b5cefe68ed97448187ad07c90602090a1005b63a741a04560e01b5f5260045ffd5b34610272575f366003190112610272576317d5c96560e11b5f5260045ffd5b3461027257610100366003190112610272576111c1611dc6565b5060a0366023190112610272576111d6611db0565b506111df611ed5565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361052457630a85dc2960e01b5f5260045ffd5b34610272575f366003190112610272576004546040516001600160a01b039091168152602090f35b3461027257602036600319011261027257600435611263612bcb565b61126b6126a0565b5f5f90825f52600a60205260405f20926040519361128885611f81565b80549060ff8216158015875260ff8360081c1615156020880152604087019260018060a01b039060101c16835260ff600460018060a01b036001850154169360608a0194855260018060a01b0360028201541660808b015260018060a01b0360038201541660a08b0152015460018060a01b03811660c08a015261ffff8160a01c1660e08a015261ffff8160b01c166101008a015261ffff8160c01c166101208a015261ffff8160d01c166101408a015261ffff8160e01c166101608a015260f01c1615156101808801526103b757516001600160a01b0316806113e6575b505192939192611382926001600160a01b0390911691612bde565b821591826113dd575b826113d4575b50816113cb575b506113bd5760409160015f516020613aea5f395f51905f525582519182526020820152f35b620f6b2160e41b5f5260045ffd5b90501583611398565b15915084611391565b8415925061138b565b6113f891945061138293508583612bde565b939092611367565b3461027257602036600319011261027257611419611dc6565b611421612bcb565b600254906001600160a01b038216611179576001600160a01b03169081156103a8576001600160a01b03191681176002556040519081527f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b190602090a1005b34610272576101403660031901126102725761149a611dc6565b5060a03660231901126102725760603660c319011261027257610124356001600160401b038111610272576114d3903690600401611ddc565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361052457630a85dc2960e01b5f5260045ffd5b346102725760203660031901126102725761152d611dc6565b611535612bcb565b6001600160a01b031680156103a8576020817fae994ca926e252e299c3df7516cb609272a57bf80b0e0715297e55939f873420926001600160601b0360a01b6009541617600955604051908152a1005b34610272575f366003190112610272576020600654604051908152f35b34610272576020366003190112610272576004356115be612bcb565b6127108111610263576020817f19334947354816ac556f5ffa00c9e0adf0e86726151ae0892982d53797da69a592600655604051908152a1005b346102725736600319016101e081126102725760a0136102725760a4356001600160a01b038116908190036102725761162f611db0565b60e43591906001600160a01b038316830361027257610104359261ffff8416840361027257610124359081151582036102725760a036610143190112610272576002546001600160a01b031633036103c6576040519161168e83611f66565b610144356001600160a01b0381168103610272578352610164359061ffff821682036102725760208401918252610184359261ffff8416840361027257604085019384526101a4359061ffff8216820361027257606086019182526101c43561ffff8116810361027257608087019081526040519561170c87611f66565b6004356001600160a01b03811681036102725787526024356001600160a01b038116810361027257602088015262ffffff6044351660443503610272576044356040880152606435968760020b88036102725760608101889052608435906001600160a01b03821682036102725760a0916080820152209a8b5f52600a60205260ff60405f205416611c1c576001600160a01b038a16158015611c0b575b6103a85788516001600160a01b0316158015611bfb575b8015611beb575b8015611bdb575b8015611bce575b8015611bbd575b610263576107d06117f761ffff87511661ffff8416611fda565b11610263576001600160a01b0361180c612b89565b163003611b94578a6001600160a01b03611824612b9f565b161498891580611ba3575b611b94578c948b8d928c5f14611b7b576001600160a01b0361184f612bb5565b169c8d915b600160a01b600190039051169b5161ffff16965161ffff16995161ffff16975161ffff16986040519261188684611f81565b600184526020840192835260408401968752600160a01b600190031660608401526080830193600160a01b6001900316845260a0830194600160a01b6001900316855260c083019c8d5260e083019661ffff168752610100830197885261012083019a8b5261014083019889526101608301998a5261018083019b15158c525f52600a60205260405f2094825115159186549051151560081b61ff001691600160b01b620100009003905160101b169260ff169069ffffffffffffffffffff60b01b161717178455600160a01b600190039060600151166001840190600160a01b60019003166001600160601b0360a01b825416179055600160a01b600190039051166002830190600160a01b60019003166001600160601b0360a01b825416179055600160a01b600190039051166003820190600160a01b60019003166001600160601b0360a01b82541617905560040196600160a01b6001900390600160a01b60019003905116166001600160601b0360a01b885416178755519386549161ffff60b01b905160b01b169061ffff60c01b905160c01b169261ffff60d01b905160d01b169361ffff60e01b905160e01b169461ffff60e01b199261ffff60d01b199161ffff60a01b9060a01b169065ffffffffffff60a01b1916171617161717178255511515611a8f919081549060ff60f01b90151560f01b169060ff60f01b1916179055565b5f858152600b60205260409020906001600160a01b03611aad612b9f565b83546001600160a01b031916911617825560018201906001600160a01b03611ad3612bb5565b835460b89390931b62ffffff60b81b1662ffffff60a01b60443560a01b166001600160d01b03199094169190921665ffffffffffff60a01b19161791909117179055611b1d612b89565b600290910180546001600160a01b0319166001600160a01b0392831617905560408051948552918116602085015291909116908201527f01bf263a1db1652580721573296e1a1fa70b3d4c87f61d02a69c4e1109d2d57390606090a2005b6001600160a01b03611b8b612b9f565b169c8d91611854565b63c256622b60e01b5f5260045ffd5b508b6001600160a01b03611bb5612bb5565b16141561182f565b5061271061ffff84511610156117dd565b5061ffff835116156117d6565b506103e861ffff865116116117cf565b5061271061ffff835116116117c8565b5061138861ffff885116116117c1565b506001600160a01b038416156117aa565b630ea075bf60e21b5f5260045ffd5b3461027257606036600319011261027257611c446126a0565b611c55604435602435600435611ffb565b60015f516020613aea5f395f51905f5255005b3461027257604036600319011261027257611c81611d9a565b6004355f52600c60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b346102725760403660031901126102725760043560243580151590818103610272576002546001600160a01b031633036103c657825f52600a60205260405f209160ff835416156103b757600492909201805460ff60f01b191691151560f01b60ff60f01b169190911790557ffebf5d5a892f779904618832d01bf549d0c159d7d0bf88067a8bffbf9ef6e7d490602090604051908152a2005b3461027257611d5436611e09565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633039150610524905057630a85dc2960e01b5f5260045ffd5b602435906001600160a01b038216820361027257565b60c435906001600160a01b038216820361027257565b600435906001600160a01b038216820361027257565b9181601f84011215610272578235916001600160401b038311610272576020838186019501011161027257565b90610160600319830112610272576004356001600160a01b0381168103610272579160a060231982011261027257602491608060c3198301126102725760c49161014435906001600160401b03821161027257611e6891600401611ddc565b9091565b906101a0600319830112610272576004356001600160a01b0381168103610272579160a060231982011261027257602491608060c3198301126102725760c4916101443591610164359161018435906001600160401b03821161027257611e6891600401611ddc565b60e435908160020b820361027257565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b610120600319820112610272576004356001600160a01b0381168103610272579160a06023198301126102725760249160c4359160e4359161010435906001600160401b03821161027257611e6891600401611ddc565b60a081019081106001600160401b03821117610ef057604052565b6101a081019081106001600160401b03821117610ef057604052565b6101c081019081106001600160401b03821117610ef057604052565b90601f801991011681019081106001600160401b03821117610ef057604052565b91908201809211611fe757565b634e487b7160e01b5f52601160045260245ffd5b91905f91835f52600a60205260405f20916040519261201984611f81565b80549060ff821615908115865260ff8360081c1615156020870152604086019260018060a01b039060101c16835260018060a01b03600182015416926060870193845260018060a01b036002830154169160808801928352600460018060a01b036003830154169160a08a0192835201549760c081019460018060a01b038a16865261ffff8a60a01c1660e083015260ff61010083019a61ffff8160b01c168c5261ffff8160c01c1661012085015261ffff8160d01c1661014085015261ffff8160e01c1661016085015260f01c1615156101808301526103b7576009546001600160a01b03163314158080612652575b6126435780612633575b6126245786612123918c612779565b6121338385949e959b939b611fda565b908061261b575b6126065750505f8c8152600c602090815260408083208a516001600160a01b031684529091529020546121cb916121a0916121759190611fda565b5f8e8152600d602090815260408083208c516001600160a01b03168452909152902054909c90611fda565b5f8d8152600e602090815260408083208b516001600160a01b03168452909152902054909890611fda565b968a15806125fe575b6125f0575f8c8152600c602090815260408083208a516001600160a01b0390811685529083528184208490558f8452600d83528184208b518216855283528184208490558f8452600e83528184208b519091168452909152812055895161226d9190612254906127109061224c9061ffff168f612b76565b04809d61276c565b98898110156125e55761226890809a61276c565b611fda565b975f975f9a816122f7575b50505050505086859360809795936122ca7f2f3c43579b9064b6f28edcf41608f3815792d274a56afe024359703cb4ea9b309a986122df9560018060a01b0390511660018060a01b03855116906136b2565b5190516001600160a01b0390811691166136b2565b604051938452602084015260408301526060820152a2565b91939850919398995082156125d65761234b975f8d6040519060208201526001604082015284606082015260608152612331608082611fb9565b604051809b81926348c8949160e01b835260048301611ee5565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1988915610ee5575f9961254c575b506040898051810103126102725760409960208a01519a8b9a0151936123b9859d6123b38d8461276c565b90611fda565b9b85156124c457505080516003546123df9186916001600160a01b03908116911661357b565b60035490519151885193516001600160a01b039485169461ffff909116939181169281169116813b15610272575f60a4928195604051978896879563892823f760e01b875260048701528a60248701526044860152606485015260848401525af18015610ee5576124af575b508181106124995750505086859360809795936122ca7f2f3c43579b9064b6f28edcf41608f3815792d274a56afe024359703cb4ea9b309a986122df955b9584989a9c508397999b50612278565b6371c4efed60e01b835260045260245260449150fd5b6124bc9193505f90611fb9565b5f915f61244b565b94509550505050155f14612536575096859360809795936122ca83986122df958d7fbdb9140e5a6bcb57cebdbf44a42f8c0f6c96af972d8f88cc3ae2b974f193bc0d60207f2f3c43579b9064b6f28edcf41608f3815792d274a56afe024359703cb4ea9b309f604051908152a2612489565b6371c4efed60e01b5f525f60045260245260445ffd5b9098503d805f833e61255e8183611fb9565b810190602081830312610272578051906001600160401b038211610272570181601f82011215610272578051906001600160401b038211610ef057604051926125b1601f8401601f191660200185611fb9565b8284526020838301011161027257815f9260208093018386015e83010152975f612388565b633672d25f60e01b5f5260045ffd5b50612268898061276c565b505050505050505050505050565b5080156121d4565b6371c4efed60e01b5f5260045260245260445ffd5b5081811061213a565b630c736d4160e21b5f5260045ffd5b5061263e818c6126d8565b612114565b63235084c360e21b5f5260045ffd5b5084516001600160a01b031633141561210a565b6040519061267382611f66565b5f6080838281528260208201528260408201528260608201520152565b600160ff1b8114611fe7575f0390565b60025f516020613aea5f395f51905f5254146126c95760025f516020613aea5f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b5f818152600c6020908152604080832085820180516001600160a01b03168552925290912054158015919061273f575b50612738575f908152600e602090815260408083206060909401516001600160a01b031683529290522054151590565b5050600190565b5f838152600d6020908152604080832093516001600160a01b031683529290529081205415159150612708565b91908203918211611fe757565b5f818152600c6020908152604080832094810180516001600160a01b03908116855295835281842054858552600d8452828520825188168652845282852054868652600e8552838620835190981686529690935290832054919691959294929391926127e58189611fda565b948515612b6457156125d6575f838152600c6020908152604080832085516001600160a01b039081168552908352818420849055868452600d83528184208651821685528352818420849055868452600e8352818420865190911684528252808320839055805191820186905281018290526060808201889052815261288b9190612871608082611fb9565b604051809381926348c8949160e01b835260048301611ee5565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610ee5575f91612adc575b506040818051810103126102725760406020820151910151988115612a1257908992916129176129106128fe60019a84866134fb565b938461290a818361276c565b976134fb565b809c61276c565b998b81612999575b50506129669392916129309161276c565b5f868152600c6020908152604080832088516001600160a01b0316845290915290208054909161295f91611fda565b905561276c565b5f928352600d6020908152604080852093516001600160a01b0316855292905291208054909161299591611fda565b9055565b819a50916129c8612930936129b583876129669a9998966134fb565b90848281612a04575050505f5b9c61276c565b5f898152600e602090815260408083208b516001600160a01b031684529091529020805490916129f791611fda565b905591509192938b61291f565b612a0d926134fb565b6129c2565b5f858152600c6020908152604080832087516001600160a01b0316845282529091208054979b5095997feed2d18eb96f3c2cb8c7b6993512a506c170e17d29355f2d7a0d5961f338de09995090979690959250612a6f9190611fda565b90555f878152600d8652604080822084516001600160a01b031683528752902080549091612a9c91611fda565b90555f868152600e8552604080822092516001600160a01b031682529185522080549091612ac991611fda565b9055604051908152a25f905f905f905f90565b90503d805f833e612aed8183611fb9565b810190602081830312610272578051906001600160401b038211610272570181601f82011215610272578051906001600160401b038211610ef05760405192612b40601f8401601f191660200185611fb9565b8284526020838301011161027257815f9260208093018386015e830101525f6128c8565b505f9750879650869550859450505050565b81810292918115918404141715611fe757565b6084356001600160a01b03811681036102725790565b6004356001600160a01b03811681036102725790565b6024356001600160a01b03811681036102725790565b5f546001600160a01b031633036110e457565b5f818152600c602090815260408083206001600160a01b03871680855290835281842054858552600d8452828520918552925290912054909492939190851580612d3c575b612d31575f828152600c602090815260408083206001600160a01b038716808552908352818420849055858452600d83528184208185528352818420849055858452600e8352818420908452909152812055610100850151612c9e91906122689061271090612c969061ffff168a612b76565b04809861276c565b9385612d0e575b8480612ce9575b50507f0fbb28f9c335f55dcc5cc19e595ab55f9e6a0fd1b58ad77be3a98f99901daaff604080519387855286602086015260018060a01b031693a3565b608090910151612d0791906001600160a01b039081169085166138eb565b5f84612cac565b60c0810151612d2c9087906001600160a01b039081169086166138eb565b612ca5565b505f94508493505050565b508015612c23565b90918061271003926127108411611fe75715612d94575061271091612d71916001600160a01b0316612b76565b046401000276a38111612d8857506401000276a490565b6001600160a01b031690565b6127106001600160a01b03909216828102928115918404141715611fe75761271014612def570473fffd8963efd1fc6a506488495d951d5263988d268110612d88575073fffd8963efd1fc6a506488495d951d5263988d2590565b634e487b7160e01b5f52601260045260245ffd5b600f0b6f7fffffffffffffffffffffffffffffff198114611fe7575f0390565b90816020910312610272575190565b905f9080600f0b5f81125f146130e95750612e546001600160801b0391612e03565b16916001600160a01b031680612f4e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b15612f4a5760405190632961046560e21b82526004820152828160248183865af18015612f3f57908391612f26575b5050602090600460405180958193630476982d60e21b83525af1908115612f1a5750612eeb575b505b565b612f0c9060203d602011612f13575b612f048183611fb9565b810190612e23565b505f612ee7565b503d612efa565b604051903d90823e3d90fd5b81612f3091611fb9565b612f3b57815f612ec0565b5080fd5b6040513d85823e3d90fd5b8280fd5b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048201819052929390602081602481865afa908115610ee5575f916130b7575b50833b1561027257604051632961046560e21b8152600481018490525f8160248183895af18015610ee5576130a2575b50612fe28285856138eb565b6040516370a0823160e01b81526004810185905290602082602481875afa8015613097578690613063575b613017925061276c565b9181830361304a5750505060208291600460405180958193630476982d60e21b83525af1908115612f1a5750612eeb5750565b630cb800eb60e11b855260045260245260445250606490fd5b506020823d60201161308f575b8161307d60209383611fb9565b8101031261027257613017915161300d565b3d9150613070565b6040513d88823e3d90fd5b6130af9195505f90611fb9565b5f935f612fd6565b90506020813d6020116130e1575b816130d260209383611fb9565b8101031261027257515f612fa6565b3d91506130c5565b5f91939250136130f7575050565b612ee9916001600160801b0316906001600160a01b0381169061392a565b5f811261311f5790565b635467221960e11b5f5260045260245ffd5b9060a0366023190112610272576040519161314b83611f66565b602435906001600160a01b038216820361027257818452604435936001600160a01b03851685036102725784602082015260643562ffffff811681036102725760408201526084358060020b810361027257606082015260a435906001600160a01b03821682036102725760a09160808201522091825f52600a60205260405f2090604051916131da83611f81565b600481549160ff831615928315865260ff8160081c161515602087015260018060a01b039060101c16604086015260018060a01b03600182015416606086015260018060a01b03600282015416608086015260018060a01b0360038201541660a08601520154809760018060a01b03821660c086015261ffff8260a01c169360e086019480865261010087019661ffff8560b01c16885261012081019561ffff8660c01c16875260ff61018061ffff8860d01c169361ffff610140820199868b5260e01c16610160820152019d60f01c1615158d526134e2571590816134d9575b506134c25760c435801515809103610272575f60e43512036134a257506001600160a01b03811681036102725794600f0b5b805f81600f0b12613492575b5080600f0b1561347c576127109161ffff83613325826001600160801b0361332f961694511684612b76565b0495511690612b76565b049261333b8484611fda565b97881561347c57917fc532c43b3423e14ef72748f1c8291238829ca0af8ba9b67975ad1483485a4b4d9593916060959361337f8b60018060a01b038816809861392a565b836133e7575b505050816133b7575b60405192835260208301526040820152a263b47b2fb160e01b916001600160801b0316600f0b90565b855f52600d60205260405f2060018060a01b0384165f5260205260405f206133e0838254611fda565b905561338e565b885f52600c60205260405f2060018060a01b0387165f5260205260405f20613410858254611fda565b90555161341e575b80613385565b6127109161ffff613440846134398361344996511688612b76565b048661276c565b91511690612b76565b04865f52600e60205260405f2060018060a01b0385165f5260205261347360405f20918254611fda565b90555f80613418565b5063b47b2fb160e01b97505f9695505050505050565b61349c9150612e03565b5f6132f9565b6001600160a01b038116915081810361027257509460801d600f0b6132ed565b5063b47b2fb160e01b98505f979650505050505050565b9050155f6132bb565b5063b47b2fb160e01b9a505f9998505050505050505050565b91818302915f19818509938380861095039480860395868511156102725714613573579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b916040519163095ea7b360e01b5f5260018060a01b031691826004528160245260205f60448180885af19060015f51148216156136a3575b604052156135c057505050565b60405163095ea7b360e01b5f52826004525f60245260205f60448180885af19060015f511482161561368b575b6040521561366d576040519163095ea7b360e01b5f5260045260245260205f60448180865af19060015f511482161561364c575b6040521561362c5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b90600181151661366457823b15153d15161690613621565b503d5f823e3d90fd5b635274afe760e01b5f9081526001600160a01b038416600452602490fd5b90600181151661366457843b15153d151616906135ed565b90843b15153d151616906135b3565b5f929182156138e5576001600160a01b03168061375857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b15613754576040516301aba89b60e71b81526001600160a01b03909116600482015291839183916024918391905af1801561374957613734575050565b61373f828092611fb9565b6137465750565b80fd5b6040513d84823e3d90fd5b8380fd5b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048201819052919392602082602481885afa918215610ee5575f926138b1575b506137bc84848761357b565b823b15610272576040516309ad4dd960e01b81526001600160a01b03909116600482015260248101859052604481018490525f8160648183875af18015610ee55761389c575b50604051916370a0823160e01b83526004830152602082602481875afa801561389157859061385d575b613836925061276c565b918183036138445750505050565b630cb800eb60e11b845260045260245260445260649150fd5b506020823d602011613889575b8161387760209383611fb9565b8101031261027257613836915161382c565b3d915061386a565b6040513d87823e3d90fd5b6138a99195505f90611fb9565b5f935f613802565b9091506020813d6020116138dd575b816138cd60209383611fb9565b810103126102725751905f6137b0565b3d91506138c0565b50505050565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f511482161561364c576040521561362c5750565b91906001600160a01b03831615613a67576040516370a0823160e01b81523060048201525f936001600160a01b03929092169291602082602481875afa918215610ee5575f92613a33575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b1561027257604051630b0d9c0960e01b81526001600160a01b03929092166004830152306024830152604482018490525f908290606490829084905af18015610ee557613a1e575b506040516370a0823160e01b815230600482015290602082602481875afa801561389157859061385d57613836925061276c565b613a2b9194505f90611fb9565b5f925f6139ea565b9091506020813d602011613a5f575b81613a4f60209383611fb9565b810103126102725751905f613975565b3d9150613a42565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190823b1561027257604051630b0d9c0960e01b81526001600160a01b039290921660048301523060248301526044820152905f908290606490829084905af18015610ee557613adf5750565b5f612ee991611fb956fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220a08d9f7830e95648aa2f81f88ad9e4813e1b03a8584e36b985d850858638ae2d64736f6c63430008230033",
      "runtime": "0x6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806321d0ee7014611d46578063259982e514611d465780632ce8b02914611cac578063359b4f3014611c685780633d61055e14611c2b57806341541148146115f857806348332680146115a257806349127e2a1461158557806354faf9c314611514578063575e24b4146114805780635bb47808146114005780635cbe81171461124757806364df049e1461121f5780636c2bbe7e14610a6b5780636fe7e6eb146111a7578063715018a6146111885780637862505c146110f757806379ba50971461107757806389a69bd814610fdf5780638a36a6bb14610fb75780638da5cb5b14610f905780639040f86614610f7357806390addc1e14610f5657806391dd734614610ac15780639f063efc14610a6b578063ad0912301461097d578063b47b2fb1146108d0578063b6a8b0fa146104cf578063b89eddab1461086a578063bfe7af8314610814578063c45a0155146107ec578063c4b7de97146107a8578063c4e833ce14610640578063c8eaa792146105fc578063dc4c90d3146105b8578063dc98354e14610533578063e1b4af69146104cf578063e30c3978146104a7578063e356a18114610463578063e521cb92146103f2578063ea26abcf146103d5578063ed8ef7a31461030b578063f1f5c993146102e3578063f2fde38b146102765763fc75e4810361000e573461027257602036600319011261027257600435610229612bcb565b6113888111610263576020817f4d1fc9430e27afb14db15169fd1c79e8b51773302919ac8c049f1c41995e380b92600555604051908152a1005b63c6cc5d7f60e01b5f5260045ffd5b5f80fd5b346102725760203660031901126102725761028f611dc6565b610297612bcb565b60018060a01b0316806001600160601b0360a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b34610272575f366003190112610272576003546040516001600160a01b039091168152602090f35b3461027257604036600319011261027257600435610327611d9a565b6002546001600160a01b031633036103c657815f52600a60205260405f209060ff825416156103b7576001600160a01b03169081156103a8576002018054909282916001600160a01b0316907fb45e6b72a7de9a2077babe9717744436f3880e114099956ca85f91a77469a5325f80a481546001600160a01b031916179055005b63d92e233d60e01b5f5260045ffd5b63f7139e3360e01b5f5260045ffd5b631966391b60e11b5f5260045ffd5b34610272575f366003190112610272576020600754604051908152f35b346102725760203660031901126102725761040b611dc6565b610413612bcb565b6001600160a01b031680156103a8576020817fc1b5345cce283376356748dc57f2dfa7120431d016fc7ca9ba641bc65f91411d926001600160601b0360a01b6004541617600455604051908152a1005b346102725760403660031901126102725761047c611d9a565b6004355f52600e60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b34610272575f366003190112610272576001546040516001600160a01b039091168152602090f35b34610272576104dd36611f0f565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303925061052491505057630a85dc2960e01b5f5260045ffd5b63570c108560e11b5f5260045ffd5b346102725760e03660031901126102725761054c611dc6565b60a036602319011261027257610560611db0565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610524576002546001600160a01b039081169116036103c657604051636e4c1aa760e11b8152602090f35b34610272575f366003190112610272576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461027257604036600319011261027257610615611d9a565b6004355f52600d60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b34610272575f366003190112610272575f6101a060405161066081611f9d565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c060206040516106c381611f9d565b60018152818101905f8252604081015f8152606082015f8152608083015f815260a084015f815260c085015f815260e0860190600182526101008701925f84526101208801945f86526101408901965f88526101608a019860018a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b34610272575f366003190112610272576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610272575f366003190112610272576002546040516001600160a01b039091168152602090f35b3461027257602036600319011261027257600435610830612bcb565b6103e88111610263576020817faea8b8d37d8110dd00c418d9c1c268f0fbadacb802c284b71a1777e411cd965a92600755604051908152a1005b3461027257602036600319011261027257600435610886612bcb565b801580156108c4575b610263576020817f6968b68c1fb468c8b257b012290bf803a6a6d7e79468e0326050724f7573cf0192600855604051908152a1005b5061271081101561088f565b3461027257610160366003190112610272576108ea611dc6565b5060a03660231901126102725760603660c319011261027257610144356001600160401b03811161027257610923903690600401611ddc565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361052457604061096361012435613131565b82516001600160e01b03199092168252600f0b6020820152f35b34610272576020366003190112610272576004355f52600a6020526101a060405f2060ff81549160018060a01b036001820154169060018060a01b03600282015416600460018060a01b03600384015416920154926040519585811615158752858160081c161515602088015260018060a01b039060101c1660408701526060860152608085015260a084015260018060a01b03811660c084015261ffff8160a01c1660e084015261ffff8160b01c1661010084015261ffff8160c01c1661012084015261ffff8160d01c1661014084015261ffff8160e01c1661016084015260f01c161515610180820152f35b3461027257610a7936611e6c565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330393506105249250505057630a85dc2960e01b5f5260045ffd5b34610272576020366003190112610272576004356001600160401b03811161027257610af1903690600401611ddc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169033829003610524578260609181010312610272578135906020830135926002841015610272576040013590825f52600a60205260405f209060405194610b6186611f81565b600483549360ff851615158852602088019460ff8160081c161515865260018060a01b039060101c16604089015260018060a01b03600182015416606089015260018060a01b03600282015416608089015260018060a01b0360038201541660a089015201549560018060a01b03871660c082015261ffff8760a01c1660e082015261ffff8760b01c1661010082015261ffff8760c01c1661012082015261ffff8760d01c1661014082015261018060ff61016083019861ffff8160e01c168a5260f01c161515910152845f52600b60205260405f209060405196610c4588611f66565b60018060a01b038354168852600183015490602089019560018060a01b038316875260408a019462ffffff8460a01c16865260608b019360b81c60020b8452600260018060a01b03910154169360808b01948552155f14610f4e57511515975b604051602081019182526006604082015260408152610cc5606082611fb9565b51902060405190631e2eaeaf60e01b82526004820152602081602481895afa908115610ee55789905f92610f16575b5061ffff610d0c9351169160018060a01b0316612d44565b956001600160ff1b038111610f0457610d2490612690565b956040519460608601918683106001600160401b03841117610ef057604092835289151587526020878101998a526001600160a01b039182168489019081529351633cf3645360e21b81528c5183166004820152895183166024820152965162ffffff166044880152935160020b60648701529351841660848601529451151560a4850152955160c484015294511660e48201526101206101048201525f61012482018190529093918491610144918391905af1918215610ee5575f92610ead575b50610e1f610e8b9460018060a01b0390511691610e078460801d8094612e32565b51600f9390930b9283906001600160a01b0316612e32565b8215610ea65780925b15610e9e5750905b600f0b5f811215610e9657610e47610e4c91612690565b613115565b905b600f0b5f811315610e8f57610e6290613115565b604051916020830152604082015260408152610e7f606082611fb9565b60405191829182611ee5565b0390f35b505f610e62565b505f90610e4e565b905090610e30565b8192610e28565b9391506020843d602011610edd575b81610ec960209383611fb9565b810103126102725792519092610e1f610de6565b3d9150610ebc565b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b63123baf0360e11b5f5260045260245ffd5b929150506020823d602011610f46575b81610f3360209383611fb9565b810103126102725790518861ffff610cf4565b3d9150610f26565b511597610ca5565b34610272575f366003190112610272576020600854604051908152f35b34610272575f366003190112610272576020600554604051908152f35b34610272575f366003190112610272575f546040516001600160a01b039091168152602090f35b34610272575f366003190112610272576009546040516001600160a01b039091168152602090f35b34610272575f36600319011261027257610ff7612666565b50611000612666565b5060a0600180821b036004541661ffff80600554168180600654168180600754169181806008541695608060405161103781611f66565b8a81526020810192835260408101948552606081019687520196875260405198895251166020880152511660408601525116606084015251166080820152f35b34610272575f36600319011261027257600154336001600160a01b038216036110e4576001600160a01b03199081166001555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b63118cdaa760e01b5f523360045260245ffd5b34610272576020366003190112610272576004356001600160a01b0381169081900361027257611125612bcb565b6003546001600160a01b0381166111795781156103a8576001600160a01b03191681176003556040519081527f49e94f33a5714648c99c03d3c96612ffea74b1df6b5cefe68ed97448187ad07c90602090a1005b63a741a04560e01b5f5260045ffd5b34610272575f366003190112610272576317d5c96560e11b5f5260045ffd5b3461027257610100366003190112610272576111c1611dc6565b5060a0366023190112610272576111d6611db0565b506111df611ed5565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361052457630a85dc2960e01b5f5260045ffd5b34610272575f366003190112610272576004546040516001600160a01b039091168152602090f35b3461027257602036600319011261027257600435611263612bcb565b61126b6126a0565b5f5f90825f52600a60205260405f20926040519361128885611f81565b80549060ff8216158015875260ff8360081c1615156020880152604087019260018060a01b039060101c16835260ff600460018060a01b036001850154169360608a0194855260018060a01b0360028201541660808b015260018060a01b0360038201541660a08b0152015460018060a01b03811660c08a015261ffff8160a01c1660e08a015261ffff8160b01c166101008a015261ffff8160c01c166101208a015261ffff8160d01c166101408a015261ffff8160e01c166101608a015260f01c1615156101808801526103b757516001600160a01b0316806113e6575b505192939192611382926001600160a01b0390911691612bde565b821591826113dd575b826113d4575b50816113cb575b506113bd5760409160015f516020613aea5f395f51905f525582519182526020820152f35b620f6b2160e41b5f5260045ffd5b90501583611398565b15915084611391565b8415925061138b565b6113f891945061138293508583612bde565b939092611367565b3461027257602036600319011261027257611419611dc6565b611421612bcb565b600254906001600160a01b038216611179576001600160a01b03169081156103a8576001600160a01b03191681176002556040519081527f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b190602090a1005b34610272576101403660031901126102725761149a611dc6565b5060a03660231901126102725760603660c319011261027257610124356001600160401b038111610272576114d3903690600401611ddc565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361052457630a85dc2960e01b5f5260045ffd5b346102725760203660031901126102725761152d611dc6565b611535612bcb565b6001600160a01b031680156103a8576020817fae994ca926e252e299c3df7516cb609272a57bf80b0e0715297e55939f873420926001600160601b0360a01b6009541617600955604051908152a1005b34610272575f366003190112610272576020600654604051908152f35b34610272576020366003190112610272576004356115be612bcb565b6127108111610263576020817f19334947354816ac556f5ffa00c9e0adf0e86726151ae0892982d53797da69a592600655604051908152a1005b346102725736600319016101e081126102725760a0136102725760a4356001600160a01b038116908190036102725761162f611db0565b60e43591906001600160a01b038316830361027257610104359261ffff8416840361027257610124359081151582036102725760a036610143190112610272576002546001600160a01b031633036103c6576040519161168e83611f66565b610144356001600160a01b0381168103610272578352610164359061ffff821682036102725760208401918252610184359261ffff8416840361027257604085019384526101a4359061ffff8216820361027257606086019182526101c43561ffff8116810361027257608087019081526040519561170c87611f66565b6004356001600160a01b03811681036102725787526024356001600160a01b038116810361027257602088015262ffffff6044351660443503610272576044356040880152606435968760020b88036102725760608101889052608435906001600160a01b03821682036102725760a0916080820152209a8b5f52600a60205260ff60405f205416611c1c576001600160a01b038a16158015611c0b575b6103a85788516001600160a01b0316158015611bfb575b8015611beb575b8015611bdb575b8015611bce575b8015611bbd575b610263576107d06117f761ffff87511661ffff8416611fda565b11610263576001600160a01b0361180c612b89565b163003611b94578a6001600160a01b03611824612b9f565b161498891580611ba3575b611b94578c948b8d928c5f14611b7b576001600160a01b0361184f612bb5565b169c8d915b600160a01b600190039051169b5161ffff16965161ffff16995161ffff16975161ffff16986040519261188684611f81565b600184526020840192835260408401968752600160a01b600190031660608401526080830193600160a01b6001900316845260a0830194600160a01b6001900316855260c083019c8d5260e083019661ffff168752610100830197885261012083019a8b5261014083019889526101608301998a5261018083019b15158c525f52600a60205260405f2094825115159186549051151560081b61ff001691600160b01b620100009003905160101b169260ff169069ffffffffffffffffffff60b01b161717178455600160a01b600190039060600151166001840190600160a01b60019003166001600160601b0360a01b825416179055600160a01b600190039051166002830190600160a01b60019003166001600160601b0360a01b825416179055600160a01b600190039051166003820190600160a01b60019003166001600160601b0360a01b82541617905560040196600160a01b6001900390600160a01b60019003905116166001600160601b0360a01b885416178755519386549161ffff60b01b905160b01b169061ffff60c01b905160c01b169261ffff60d01b905160d01b169361ffff60e01b905160e01b169461ffff60e01b199261ffff60d01b199161ffff60a01b9060a01b169065ffffffffffff60a01b1916171617161717178255511515611a8f919081549060ff60f01b90151560f01b169060ff60f01b1916179055565b5f858152600b60205260409020906001600160a01b03611aad612b9f565b83546001600160a01b031916911617825560018201906001600160a01b03611ad3612bb5565b835460b89390931b62ffffff60b81b1662ffffff60a01b60443560a01b166001600160d01b03199094169190921665ffffffffffff60a01b19161791909117179055611b1d612b89565b600290910180546001600160a01b0319166001600160a01b0392831617905560408051948552918116602085015291909116908201527f01bf263a1db1652580721573296e1a1fa70b3d4c87f61d02a69c4e1109d2d57390606090a2005b6001600160a01b03611b8b612b9f565b169c8d91611854565b63c256622b60e01b5f5260045ffd5b508b6001600160a01b03611bb5612bb5565b16141561182f565b5061271061ffff84511610156117dd565b5061ffff835116156117d6565b506103e861ffff865116116117cf565b5061271061ffff835116116117c8565b5061138861ffff885116116117c1565b506001600160a01b038416156117aa565b630ea075bf60e21b5f5260045ffd5b3461027257606036600319011261027257611c446126a0565b611c55604435602435600435611ffb565b60015f516020613aea5f395f51905f5255005b3461027257604036600319011261027257611c81611d9a565b6004355f52600c60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b346102725760403660031901126102725760043560243580151590818103610272576002546001600160a01b031633036103c657825f52600a60205260405f209160ff835416156103b757600492909201805460ff60f01b191691151560f01b60ff60f01b169190911790557ffebf5d5a892f779904618832d01bf549d0c159d7d0bf88067a8bffbf9ef6e7d490602090604051908152a2005b3461027257611d5436611e09565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633039150610524905057630a85dc2960e01b5f5260045ffd5b602435906001600160a01b038216820361027257565b60c435906001600160a01b038216820361027257565b600435906001600160a01b038216820361027257565b9181601f84011215610272578235916001600160401b038311610272576020838186019501011161027257565b90610160600319830112610272576004356001600160a01b0381168103610272579160a060231982011261027257602491608060c3198301126102725760c49161014435906001600160401b03821161027257611e6891600401611ddc565b9091565b906101a0600319830112610272576004356001600160a01b0381168103610272579160a060231982011261027257602491608060c3198301126102725760c4916101443591610164359161018435906001600160401b03821161027257611e6891600401611ddc565b60e435908160020b820361027257565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b610120600319820112610272576004356001600160a01b0381168103610272579160a06023198301126102725760249160c4359160e4359161010435906001600160401b03821161027257611e6891600401611ddc565b60a081019081106001600160401b03821117610ef057604052565b6101a081019081106001600160401b03821117610ef057604052565b6101c081019081106001600160401b03821117610ef057604052565b90601f801991011681019081106001600160401b03821117610ef057604052565b91908201809211611fe757565b634e487b7160e01b5f52601160045260245ffd5b91905f91835f52600a60205260405f20916040519261201984611f81565b80549060ff821615908115865260ff8360081c1615156020870152604086019260018060a01b039060101c16835260018060a01b03600182015416926060870193845260018060a01b036002830154169160808801928352600460018060a01b036003830154169160a08a0192835201549760c081019460018060a01b038a16865261ffff8a60a01c1660e083015260ff61010083019a61ffff8160b01c168c5261ffff8160c01c1661012085015261ffff8160d01c1661014085015261ffff8160e01c1661016085015260f01c1615156101808301526103b7576009546001600160a01b03163314158080612652575b6126435780612633575b6126245786612123918c612779565b6121338385949e959b939b611fda565b908061261b575b6126065750505f8c8152600c602090815260408083208a516001600160a01b031684529091529020546121cb916121a0916121759190611fda565b5f8e8152600d602090815260408083208c516001600160a01b03168452909152902054909c90611fda565b5f8d8152600e602090815260408083208b516001600160a01b03168452909152902054909890611fda565b968a15806125fe575b6125f0575f8c8152600c602090815260408083208a516001600160a01b0390811685529083528184208490558f8452600d83528184208b518216855283528184208490558f8452600e83528184208b519091168452909152812055895161226d9190612254906127109061224c9061ffff168f612b76565b04809d61276c565b98898110156125e55761226890809a61276c565b611fda565b975f975f9a816122f7575b50505050505086859360809795936122ca7f2f3c43579b9064b6f28edcf41608f3815792d274a56afe024359703cb4ea9b309a986122df9560018060a01b0390511660018060a01b03855116906136b2565b5190516001600160a01b0390811691166136b2565b604051938452602084015260408301526060820152a2565b91939850919398995082156125d65761234b975f8d6040519060208201526001604082015284606082015260608152612331608082611fb9565b604051809b81926348c8949160e01b835260048301611ee5565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1988915610ee5575f9961254c575b506040898051810103126102725760409960208a01519a8b9a0151936123b9859d6123b38d8461276c565b90611fda565b9b85156124c457505080516003546123df9186916001600160a01b03908116911661357b565b60035490519151885193516001600160a01b039485169461ffff909116939181169281169116813b15610272575f60a4928195604051978896879563892823f760e01b875260048701528a60248701526044860152606485015260848401525af18015610ee5576124af575b508181106124995750505086859360809795936122ca7f2f3c43579b9064b6f28edcf41608f3815792d274a56afe024359703cb4ea9b309a986122df955b9584989a9c508397999b50612278565b6371c4efed60e01b835260045260245260449150fd5b6124bc9193505f90611fb9565b5f915f61244b565b94509550505050155f14612536575096859360809795936122ca83986122df958d7fbdb9140e5a6bcb57cebdbf44a42f8c0f6c96af972d8f88cc3ae2b974f193bc0d60207f2f3c43579b9064b6f28edcf41608f3815792d274a56afe024359703cb4ea9b309f604051908152a2612489565b6371c4efed60e01b5f525f60045260245260445ffd5b9098503d805f833e61255e8183611fb9565b810190602081830312610272578051906001600160401b038211610272570181601f82011215610272578051906001600160401b038211610ef057604051926125b1601f8401601f191660200185611fb9565b8284526020838301011161027257815f9260208093018386015e83010152975f612388565b633672d25f60e01b5f5260045ffd5b50612268898061276c565b505050505050505050505050565b5080156121d4565b6371c4efed60e01b5f5260045260245260445ffd5b5081811061213a565b630c736d4160e21b5f5260045ffd5b5061263e818c6126d8565b612114565b63235084c360e21b5f5260045ffd5b5084516001600160a01b031633141561210a565b6040519061267382611f66565b5f6080838281528260208201528260408201528260608201520152565b600160ff1b8114611fe7575f0390565b60025f516020613aea5f395f51905f5254146126c95760025f516020613aea5f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b5f818152600c6020908152604080832085820180516001600160a01b03168552925290912054158015919061273f575b50612738575f908152600e602090815260408083206060909401516001600160a01b031683529290522054151590565b5050600190565b5f838152600d6020908152604080832093516001600160a01b031683529290529081205415159150612708565b91908203918211611fe757565b5f818152600c6020908152604080832094810180516001600160a01b03908116855295835281842054858552600d8452828520825188168652845282852054868652600e8552838620835190981686529690935290832054919691959294929391926127e58189611fda565b948515612b6457156125d6575f838152600c6020908152604080832085516001600160a01b039081168552908352818420849055868452600d83528184208651821685528352818420849055868452600e8352818420865190911684528252808320839055805191820186905281018290526060808201889052815261288b9190612871608082611fb9565b604051809381926348c8949160e01b835260048301611ee5565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610ee5575f91612adc575b506040818051810103126102725760406020820151910151988115612a1257908992916129176129106128fe60019a84866134fb565b938461290a818361276c565b976134fb565b809c61276c565b998b81612999575b50506129669392916129309161276c565b5f868152600c6020908152604080832088516001600160a01b0316845290915290208054909161295f91611fda565b905561276c565b5f928352600d6020908152604080852093516001600160a01b0316855292905291208054909161299591611fda565b9055565b819a50916129c8612930936129b583876129669a9998966134fb565b90848281612a04575050505f5b9c61276c565b5f898152600e602090815260408083208b516001600160a01b031684529091529020805490916129f791611fda565b905591509192938b61291f565b612a0d926134fb565b6129c2565b5f858152600c6020908152604080832087516001600160a01b0316845282529091208054979b5095997feed2d18eb96f3c2cb8c7b6993512a506c170e17d29355f2d7a0d5961f338de09995090979690959250612a6f9190611fda565b90555f878152600d8652604080822084516001600160a01b031683528752902080549091612a9c91611fda565b90555f868152600e8552604080822092516001600160a01b031682529185522080549091612ac991611fda565b9055604051908152a25f905f905f905f90565b90503d805f833e612aed8183611fb9565b810190602081830312610272578051906001600160401b038211610272570181601f82011215610272578051906001600160401b038211610ef05760405192612b40601f8401601f191660200185611fb9565b8284526020838301011161027257815f9260208093018386015e830101525f6128c8565b505f9750879650869550859450505050565b81810292918115918404141715611fe757565b6084356001600160a01b03811681036102725790565b6004356001600160a01b03811681036102725790565b6024356001600160a01b03811681036102725790565b5f546001600160a01b031633036110e457565b5f818152600c602090815260408083206001600160a01b03871680855290835281842054858552600d8452828520918552925290912054909492939190851580612d3c575b612d31575f828152600c602090815260408083206001600160a01b038716808552908352818420849055858452600d83528184208185528352818420849055858452600e8352818420908452909152812055610100850151612c9e91906122689061271090612c969061ffff168a612b76565b04809861276c565b9385612d0e575b8480612ce9575b50507f0fbb28f9c335f55dcc5cc19e595ab55f9e6a0fd1b58ad77be3a98f99901daaff604080519387855286602086015260018060a01b031693a3565b608090910151612d0791906001600160a01b039081169085166138eb565b5f84612cac565b60c0810151612d2c9087906001600160a01b039081169086166138eb565b612ca5565b505f94508493505050565b508015612c23565b90918061271003926127108411611fe75715612d94575061271091612d71916001600160a01b0316612b76565b046401000276a38111612d8857506401000276a490565b6001600160a01b031690565b6127106001600160a01b03909216828102928115918404141715611fe75761271014612def570473fffd8963efd1fc6a506488495d951d5263988d268110612d88575073fffd8963efd1fc6a506488495d951d5263988d2590565b634e487b7160e01b5f52601260045260245ffd5b600f0b6f7fffffffffffffffffffffffffffffff198114611fe7575f0390565b90816020910312610272575190565b905f9080600f0b5f81125f146130e95750612e546001600160801b0391612e03565b16916001600160a01b031680612f4e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b15612f4a5760405190632961046560e21b82526004820152828160248183865af18015612f3f57908391612f26575b5050602090600460405180958193630476982d60e21b83525af1908115612f1a5750612eeb575b505b565b612f0c9060203d602011612f13575b612f048183611fb9565b810190612e23565b505f612ee7565b503d612efa565b604051903d90823e3d90fd5b81612f3091611fb9565b612f3b57815f612ec0565b5080fd5b6040513d85823e3d90fd5b8280fd5b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048201819052929390602081602481865afa908115610ee5575f916130b7575b50833b1561027257604051632961046560e21b8152600481018490525f8160248183895af18015610ee5576130a2575b50612fe28285856138eb565b6040516370a0823160e01b81526004810185905290602082602481875afa8015613097578690613063575b613017925061276c565b9181830361304a5750505060208291600460405180958193630476982d60e21b83525af1908115612f1a5750612eeb5750565b630cb800eb60e11b855260045260245260445250606490fd5b506020823d60201161308f575b8161307d60209383611fb9565b8101031261027257613017915161300d565b3d9150613070565b6040513d88823e3d90fd5b6130af9195505f90611fb9565b5f935f612fd6565b90506020813d6020116130e1575b816130d260209383611fb9565b8101031261027257515f612fa6565b3d91506130c5565b5f91939250136130f7575050565b612ee9916001600160801b0316906001600160a01b0381169061392a565b5f811261311f5790565b635467221960e11b5f5260045260245ffd5b9060a0366023190112610272576040519161314b83611f66565b602435906001600160a01b038216820361027257818452604435936001600160a01b03851685036102725784602082015260643562ffffff811681036102725760408201526084358060020b810361027257606082015260a435906001600160a01b03821682036102725760a09160808201522091825f52600a60205260405f2090604051916131da83611f81565b600481549160ff831615928315865260ff8160081c161515602087015260018060a01b039060101c16604086015260018060a01b03600182015416606086015260018060a01b03600282015416608086015260018060a01b0360038201541660a08601520154809760018060a01b03821660c086015261ffff8260a01c169360e086019480865261010087019661ffff8560b01c16885261012081019561ffff8660c01c16875260ff61018061ffff8860d01c169361ffff610140820199868b5260e01c16610160820152019d60f01c1615158d526134e2571590816134d9575b506134c25760c435801515809103610272575f60e43512036134a257506001600160a01b03811681036102725794600f0b5b805f81600f0b12613492575b5080600f0b1561347c576127109161ffff83613325826001600160801b0361332f961694511684612b76565b0495511690612b76565b049261333b8484611fda565b97881561347c57917fc532c43b3423e14ef72748f1c8291238829ca0af8ba9b67975ad1483485a4b4d9593916060959361337f8b60018060a01b038816809861392a565b836133e7575b505050816133b7575b60405192835260208301526040820152a263b47b2fb160e01b916001600160801b0316600f0b90565b855f52600d60205260405f2060018060a01b0384165f5260205260405f206133e0838254611fda565b905561338e565b885f52600c60205260405f2060018060a01b0387165f5260205260405f20613410858254611fda565b90555161341e575b80613385565b6127109161ffff613440846134398361344996511688612b76565b048661276c565b91511690612b76565b04865f52600e60205260405f2060018060a01b0385165f5260205261347360405f20918254611fda565b90555f80613418565b5063b47b2fb160e01b97505f9695505050505050565b61349c9150612e03565b5f6132f9565b6001600160a01b038116915081810361027257509460801d600f0b6132ed565b5063b47b2fb160e01b98505f979650505050505050565b9050155f6132bb565b5063b47b2fb160e01b9a505f9998505050505050505050565b91818302915f19818509938380861095039480860395868511156102725714613573579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b916040519163095ea7b360e01b5f5260018060a01b031691826004528160245260205f60448180885af19060015f51148216156136a3575b604052156135c057505050565b60405163095ea7b360e01b5f52826004525f60245260205f60448180885af19060015f511482161561368b575b6040521561366d576040519163095ea7b360e01b5f5260045260245260205f60448180865af19060015f511482161561364c575b6040521561362c5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b90600181151661366457823b15153d15161690613621565b503d5f823e3d90fd5b635274afe760e01b5f9081526001600160a01b038416600452602490fd5b90600181151661366457843b15153d151616906135ed565b90843b15153d151616906135b3565b5f929182156138e5576001600160a01b03168061375857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b15613754576040516301aba89b60e71b81526001600160a01b03909116600482015291839183916024918391905af1801561374957613734575050565b61373f828092611fb9565b6137465750565b80fd5b6040513d84823e3d90fd5b8380fd5b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048201819052919392602082602481885afa918215610ee5575f926138b1575b506137bc84848761357b565b823b15610272576040516309ad4dd960e01b81526001600160a01b03909116600482015260248101859052604481018490525f8160648183875af18015610ee55761389c575b50604051916370a0823160e01b83526004830152602082602481875afa801561389157859061385d575b613836925061276c565b918183036138445750505050565b630cb800eb60e11b845260045260245260445260649150fd5b506020823d602011613889575b8161387760209383611fb9565b8101031261027257613836915161382c565b3d915061386a565b6040513d87823e3d90fd5b6138a99195505f90611fb9565b5f935f613802565b9091506020813d6020116138dd575b816138cd60209383611fb9565b810103126102725751905f6137b0565b3d91506138c0565b50505050565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f511482161561364c576040521561362c5750565b91906001600160a01b03831615613a67576040516370a0823160e01b81523060048201525f936001600160a01b03929092169291602082602481875afa918215610ee5575f92613a33575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b1561027257604051630b0d9c0960e01b81526001600160a01b03929092166004830152306024830152604482018490525f908290606490829084905af18015610ee557613a1e575b506040516370a0823160e01b815230600482015290602082602481875afa801561389157859061385d57613836925061276c565b613a2b9194505f90611fb9565b5f925f6139ea565b9091506020813d602011613a5f575b81613a4f60209383611fb9565b810103126102725751905f613975565b3d9150613a42565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190823b1561027257604051630b0d9c0960e01b81526001600160a01b039290921660048301523060248301526044820152905f908290606490829084905af18015610ee557613adf5750565b5f612ee991611fb956fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220a08d9f7830e95648aa2f81f88ad9e4813e1b03a8584e36b985d850858638ae2d64736f6c63430008230033",
      "immutableReferences": {
        "9198": [
          {
            "start": 1981,
            "length": 32
          },
          {
            "start": 14028,
            "length": 32
          },
          {
            "start": 14183,
            "length": 32
          }
        ],
        "26383": [
          {
            "start": 1250,
            "length": 32
          },
          {
            "start": 1379,
            "length": 32
          },
          {
            "start": 1485,
            "length": 32
          },
          {
            "start": 2343,
            "length": 32
          },
          {
            "start": 2686,
            "length": 32
          },
          {
            "start": 2803,
            "length": 32
          },
          {
            "start": 4578,
            "length": 32
          },
          {
            "start": 5335,
            "length": 32
          },
          {
            "start": 7513,
            "length": 32
          },
          {
            "start": 9040,
            "length": 32
          },
          {
            "start": 10384,
            "length": 32
          },
          {
            "start": 11878,
            "length": 32
          },
          {
            "start": 12125,
            "length": 32
          },
          {
            "start": 14712,
            "length": 32
          },
          {
            "start": 14954,
            "length": 32
          }
        ]
      },
      "creationHash": "0xe35ebee6238bf188d6071d687e7abca84364c62dcac5763ef9e4c53efbebdd66",
      "runtimeBytes": 15167,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/hooks/ShilloV2MemeHook.sol": "ShilloV2MemeHook"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloV2BuybackVault.sol": {
          "keccak256": "0x241b48e899062f8f35b0bc3819863422405fc90573ecc01d0b427d6e2862be29",
          "urls": [
            "bzz-raw://3844ce8d72c6eabe595de4a9fbd8db9eb99cc7eb3eed93186b60c2765c158113",
            "dweb:/ipfs/QmdvT7ogvx87SMBPqHC6AZ7ymgvaxP9AqEwSZyddP7Y2bY"
          ],
          "license": "MIT"
        },
        "src/hooks/ShilloV2MemeHook.sol": {
          "keccak256": "0x962b2a340ff0d42fb0a477f38aa3396127678cc88af51c82b83e341a89b2563e",
          "urls": [
            "bzz-raw://c2ac3f5b8475444fa2fb95a5e5476bc47e4ac756575e96594ab858acb84ffc59",
            "dweb:/ipfs/QmeeQhgTGjfgUXSo3hzZb3H15aUVFGewYUxPWD43Wd2G59"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2.sol": {
          "keccak256": "0xa11234bcbb18e4b7ecc2a74ab571fac55c93be48e4e2940d56d8c365e7b58671",
          "urls": [
            "bzz-raw://05b58e8f851021be44e1523b78550ac00d5f043114fbd0a99199424401b7efc1",
            "dweb:/ipfs/QmPAViXH1FUydKFrLY9V1RaxQ7iZwF258Mx4PT76w6SvDn"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
          "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
          "urls": [
            "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
            "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
          "keccak256": "0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c",
          "urls": [
            "bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0",
            "dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
          "keccak256": "0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d",
          "urls": [
            "bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100",
            "dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
          "keccak256": "0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc",
          "urls": [
            "bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037",
            "dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
          "keccak256": "0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44",
          "urls": [
            "bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d",
            "dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol": {
          "keccak256": "0xd735962e3d6660884153ba8a972b5f100dde4c482f2ff1c525ba7fdefb154cbd",
          "urls": [
            "bzz-raw://5a264d17b093f585844b0d977e9f60555b8c8d6513b304fde863cdf652a0d336",
            "dweb:/ipfs/QmWXfaJisjVnrjTUjZGryZpMob9wKivvtbodLS3PTc1ttq"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
          "keccak256": "0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2",
          "urls": [
            "bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303",
            "dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
          "keccak256": "0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f",
          "urls": [
            "bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e",
            "dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
          "keccak256": "0x377051c0c17a28038c32f58d76a42817eb3b24f2b4c6a2e788a9544e856d738d",
          "urls": [
            "bzz-raw://c5365fead4a20b84662284c97c07d707c67f5bc9e07b371980aba8c3c6e83661",
            "dweb:/ipfs/QmYrYoLPEADtXoCu9ZBnwkXdNB9D9FPHuhS9pWaQW4nYx5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol": {
          "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
          "urls": [
            "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
            "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol": {
          "keccak256": "0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53",
          "urls": [
            "bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99",
            "dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
          "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97",
          "urls": [
            "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b",
            "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
          "keccak256": "0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c",
          "urls": [
            "bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617",
            "dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": {
          "keccak256": "0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083",
          "urls": [
            "bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9",
            "dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IExtsload.sol": {
          "keccak256": "0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43",
          "urls": [
            "bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1",
            "dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IExttload.sol": {
          "keccak256": "0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937",
          "urls": [
            "bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8",
            "dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IHooks.sol": {
          "keccak256": "0xc131ffa2d04c10a012fe715fe2c115811526b7ea34285cf0a04ce7ce8320da8d",
          "urls": [
            "bzz-raw://3b212358897db5d99c21244d88f97b2e788527552cb430629b472a8cc6289aec",
            "dweb:/ipfs/QmQtwV4dDe2RYk2ErLpaAX7U82jWh1L6Lw2HRuKDvBi84G"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IPoolManager.sol": {
          "keccak256": "0xbdab3544da3d32dfdf7457baa94e17d5a3012952428559e013ffac45d067038e",
          "urls": [
            "bzz-raw://ce95ff864468e37c76adf71df061d4f3d6f3a5ec1f9bc3aea090463bc72798f4",
            "dweb:/ipfs/QmSbWh1pLbz51yQF4HEu5NRhr8XVv9JYGEw1hq1HudAnCi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IProtocolFees.sol": {
          "keccak256": "0x32a666e588a2f66334430357bb1e2424fe7eebeb98a3364b1dd16eb6ccca9848",
          "urls": [
            "bzz-raw://85751d302125881f72e5f8af051c2d5d9b1f606ebaea8ca7d04fccdd27cc252d",
            "dweb:/ipfs/QmeRwomeh9NWm6A6fgNA4KZPQZHPpdKsPQyYsHSFmvud7J"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/callback/IUnlockCallback.sol": {
          "keccak256": "0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719",
          "urls": [
            "bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b",
            "dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/external/IERC20Minimal.sol": {
          "keccak256": "0xeccadf1bf69ba2eb51f2fe4fa511bc7bb05bbd6b9f9a3cb8e5d83d9582613e0f",
          "urls": [
            "bzz-raw://118757369892687b99ef46ce28d6861f62c098285bd7687a4f17f7e44e5f81de",
            "dweb:/ipfs/QmUxqbYqQtcEwwFbb9e6BBMePEaSgN8C45v6RKubD4ib8d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/external/IERC6909Claims.sol": {
          "keccak256": "0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48",
          "urls": [
            "bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f",
            "dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/BitMath.sol": {
          "keccak256": "0x51b9be4f5c4fd3e80cbc9631a65244a2eb2be250b6b7f128a2035080e18aee8d",
          "urls": [
            "bzz-raw://fe98bbd5498e912146b9319827fc63621eb66ff55d5baae0fa02a7a972ab8d1e",
            "dweb:/ipfs/QmY5hCuyrtgsJtk4AavrxcvBkRrChfr4N6ZnhdC8roPpNi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/CustomRevert.sol": {
          "keccak256": "0x111ed3031b6990c80a93ae35dde6b6ac0b7e6af471388fdd7461e91edda9b7de",
          "urls": [
            "bzz-raw://c9ea883c98d6ae1829160d0977bb5195761cfd5bc81692d0a941f45717f594cd",
            "dweb:/ipfs/QmZPwxzaeMNv536wzrAMrMswu7vMHuqPVpjcqL3YvCMoxt"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/FixedPoint128.sol": {
          "keccak256": "0xad236e10853f4b4b20a35a9bb52b857c4fc79874846b7e444e06ead7f2630542",
          "urls": [
            "bzz-raw://0de1f9a06520b1a689660943faa14fc0b8344ab41fab9e6012ea34bff4b9b3eb",
            "dweb:/ipfs/QmRNMPTyko7W6d6KxuTsnDBa9oZgDK4xiwRRq3H9ASTbwy"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/FullMath.sol": {
          "keccak256": "0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2",
          "urls": [
            "bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52",
            "dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/Hooks.sol": {
          "keccak256": "0xd679b4b2d429689bc44f136050ebc958fb2d7d0d3a3c7b3e48c08ab4fba09aaa",
          "urls": [
            "bzz-raw://287190cb72840e5eb63cc7a8a1d0b9150af17d8e4ea0323f47c7e7928f2033cb",
            "dweb:/ipfs/QmVfqWBnAQM2jUcuREDdvjcP21gNuLU35CoL3NG5CEhNcx"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/LPFeeLibrary.sol": {
          "keccak256": "0xbf6914e01014e7c1044111feb7df7a3d96bb503b3da827ad8464b1955580d13b",
          "urls": [
            "bzz-raw://33823c20a91882c9aacdcbb02f0558c05209f4d5954aa6dd4fa17c95664db475",
            "dweb:/ipfs/QmR7owkFgpfztpp1QUg3ut3nw9iPVQqLGP4hzgmZtRUQ2J"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/LiquidityMath.sol": {
          "keccak256": "0x000ef2eadcc1eb7b2c18a77655f94e76e0e860f605783484657ef65fd6eda353",
          "urls": [
            "bzz-raw://a766b620a7a22798b43c6c1f23b5c6cff0ebf588deb89842bad05208d448cd99",
            "dweb:/ipfs/QmVKjaFJdzkqA3ey2Byum8iTCMssWVD8MmVC8rw62Tj5WD"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/ParseBytes.sol": {
          "keccak256": "0x7533b13f53ee2c2c55500100b22ffd6e37e7523c27874edc98663d53a8672b15",
          "urls": [
            "bzz-raw://82449058634fde28a085f3c59a6a5f412550c02181590593fd84c3e8b329aa17",
            "dweb:/ipfs/Qmev4E9Au6SsE4wsArChCwfg94KhHc5gYsEsZUnjF5sRLa"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/Position.sol": {
          "keccak256": "0xddab2a831f1befb6abf5567e77c4582169ca8156cf69eb4f22d8e87f7226a3f9",
          "urls": [
            "bzz-raw://c79fe61b50f3b70cff503abfa6f5643fcbefb9b794855bee1019b1e6d9c083b2",
            "dweb:/ipfs/QmbKmYNQesaMz8bo1b7TMHQcAwaDd3eDPrE5pAdPPZTtk5"
          ],
          "license": "BUSL-1.1"
        },
        "vendor/contracts/lib/v4-core/src/libraries/SafeCast.sol": {
          "keccak256": "0x42c4a24f996a14d358be397b71f7ec9d7daf666aaec78002c63315a6ee67aa86",
          "urls": [
            "bzz-raw://c3db86e2ba3679105fc32edec656c70282e1fede6cab11217702443f6c26fa59",
            "dweb:/ipfs/QmX4yaaSPdKQzYNRsezjTvZKsubzS8JRTEGFD3fPpTTCcj"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/StateLibrary.sol": {
          "keccak256": "0x96db333ee126a841dd959e38e452cc59d73583cb0437a1d48b2052e33a74f952",
          "urls": [
            "bzz-raw://8672bba1eb69608299b0904f4ff305238eb18479d371c26518f278c9ee184cd0",
            "dweb:/ipfs/QmTLu3s6ECvsEDHStQv8HTVHYtvkviBbdjPrFJd4SpVRFY"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/TickMath.sol": {
          "keccak256": "0x4e1a11e154eb06106cb1c4598f06cca5f5ca16eaa33494ba2f0e74981123eca8",
          "urls": [
            "bzz-raw://a79a57f7b240783b045168d1c4f774ac1812caf8f9a83cb6959a86b0b07b6c70",
            "dweb:/ipfs/QmTb5kvxwDNW8jDuQaqdJ445cCFejNkUqEB17Bjo8UBiva"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/BalanceDelta.sol": {
          "keccak256": "0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f",
          "urls": [
            "bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9",
            "dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/BeforeSwapDelta.sol": {
          "keccak256": "0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78",
          "urls": [
            "bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782",
            "dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/Currency.sol": {
          "keccak256": "0x4a0b84b282577ff6f8acf13ec9f4d32dbb9348748b49611d00e68bee96609c93",
          "urls": [
            "bzz-raw://45f9d62ab3d51b52957279e353853ba1547c3182c9a1e3d1846ada4a90263b01",
            "dweb:/ipfs/QmS8NG84ccQS1yXVD8cv3eKX7J1UKxuJhbUfHTQR2opKF5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/PoolId.sol": {
          "keccak256": "0x308311916ea0f5c2fd878b6a2751eb223d170a69e33f601fae56dfe3c5d392af",
          "urls": [
            "bzz-raw://669c2cd7ac17690b5d8831e0bda72822376c3a04b36afed6d31df4d75fe60918",
            "dweb:/ipfs/QmT6EpkxqU8VF3WsgrZ66F3s1cCQRffR95z1HDYZz7ph6y"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/PoolKey.sol": {
          "keccak256": "0xf89856e0580d7a4856d3187a76858377ccee9d59702d230c338d84388221b786",
          "urls": [
            "bzz-raw://6f3118fa189025695c37fdf0bdd1190f085ad097484d3c88cf4c56d1db65f639",
            "dweb:/ipfs/QmamXpgtB8GV1CaFLvqefPWSoikLDhMk1yU4heBnVzU8gi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/PoolOperation.sol": {
          "keccak256": "0x7a1a107fc1f2208abb2c9364c8c54e56e98dca27673e9441bed2b949b6382162",
          "urls": [
            "bzz-raw://4ad2470383bc5595d5af17840c64971f457adac68895a4db41ba5c71a4478e07",
            "dweb:/ipfs/QmdwKhBHDZFuqXrR2BfDBD9r7rB2ULGQBznsajRTkTmL4c"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-hooks-public/src/base/BaseHook.sol": {
          "keccak256": "0x148c72be0b0ac82664090d23ead3dda27410845afa809273c4d6956bc87a0c2c",
          "urls": [
            "bzz-raw://c7c80c77d9abbf610070edebb55d7d107bb30e5d69efba8c4c26b85dba249e7a",
            "dweb:/ipfs/QmTZR77BMjguXEjxex9PmtPGNnViwHpn6KYTEsVTQ4iMDD"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/base/ImmutableState.sol": {
          "keccak256": "0x1867c9fa2f9b4fa73bab0fcdc9d19ccef4eeac552273d8b84a170cd1cc90350a",
          "urls": [
            "bzz-raw://af2d699b439e13b599632fddfe82718aebd41055fba7c075f186675c588d1337",
            "dweb:/ipfs/Qmc111gckSKb9aESn3wRFLeLiS4KGujaUcaYJgRnCRfwQU"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IImmutableState.sol": {
          "keccak256": "0x36ab3100e87457ecf04887f4f540e34fd7f21d8e3b83880cb679239e60b7b06b",
          "urls": [
            "bzz-raw://7f290c7ce8e4832608d637a51b13dff95abecf6549485448e647a11c8ed01341",
            "dweb:/ipfs/QmfD1R6mTp8j4EjQXmQZW3vCh11EYFjnvoaw8rXRP27mMq"
          ],
          "license": "MIT"
        }
      }
    },
    "ShilloV2BuybackVault": {
      "abi": [
        {
          "type": "constructor",
          "inputs": [
            {
              "name": "initialOwner",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "feePolicy_",
              "type": "address",
              "internalType": "contract IShilloV2FeePolicy"
            },
            {
              "name": "feeEscrow_",
              "type": "address",
              "internalType": "contract IShilloV2FeeEscrow"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "VESTING_DURATION",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "acceptOwnership",
          "inputs": [],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "factory",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "feeEscrow",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IShilloV2FeeEscrow"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "feePolicy",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IShilloV2FeePolicy"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "lock",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "creatorRecipient",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "protocolRecipient",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "protocolFeeShareBps",
              "type": "uint16",
              "internalType": "uint16"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "owner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pendingOwner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "releasable",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "release",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "released",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "renounceOwnership",
          "inputs": [],
          "outputs": [],
          "stateMutability": "pure"
        },
        {
          "type": "function",
          "name": "setFactory",
          "inputs": [
            {
              "name": "factory_",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "totalLocked",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "totalReleased",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "transferOwnership",
          "inputs": [
            {
              "name": "newOwner",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "updateCreatorRecipient",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "newRecipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "vestedAmount",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "vestingStart",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "vestingTerms",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "creatorRecipient",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "protocolRecipient",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "protocolFeeShareBps",
              "type": "uint16",
              "internalType": "uint16"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "event",
          "name": "CreatorRecipientUpdated",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "previousRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "FactorySet",
          "inputs": [
            {
              "name": "factory",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "Locked",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "depositor",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "newVestingStart",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferStarted",
          "inputs": [
            {
              "name": "previousOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferred",
          "inputs": [
            {
              "name": "previousOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "Released",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "creatorAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "protocolAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "VestingTermsSnapshotted",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "creatorRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "protocolRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "protocolFeeShareBps",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "AlreadyInitialized",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidVestingTerms",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotAuthorizedLocker",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotFactory",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotVestBeneficiary",
          "inputs": []
        },
        {
          "type": "error",
          "name": "OwnableInvalidOwner",
          "inputs": [
            {
              "name": "owner",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "OwnableUnauthorizedAccount",
          "inputs": [
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "OwnershipCannotBeRenounced",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ReentrancyGuardReentrantCall",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SafeERC20FailedOperation",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "VestingTermsMismatch",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ZeroAddress",
          "inputs": []
        }
      ],
      "bytecode": "0x60c03461016657601f61137938819003918201601f19168301916001600160401b0383118484101761016a578084926060946040528339810103126101665780516001600160a01b03811691908290036101665760208101516001600160a01b038116918282036101665760400151916001600160a01b0383169081840361016657841561015357600180546001600160a01b03199081169091555f80549182168717815560405196916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00551590811561014a575b5061013b5760805260a0526111fa908161017f82396080518181816103cf0152610e5d015260a05181818161021301526107aa0152f35b63d92e233d60e01b5f5260045ffd5b9050155f610104565b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c908163032bbf4f146106235750806319165587146105df578063384711cc1461058f5780634cfc4d30146105715780635ad7fc171461053a5780635bb478081461049d578063715018a61461047e57806379ba5097146103fe57806382589038146103ba578063892823f7146103445780638da5cb5b1461031d578063a3f8eace146102cd578063b224cf641461026a578063c45a015514610242578063c4b7de97146101fe578063d79779b2146101c3578063d8fb93371461018b578063e30c3978146101635763f2fde38b146100ed575f80fd5b3461015f57602036600319011261015f5761010661065a565b61010e610e1b565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b3461015f575f36600319011261015f576001546040516001600160a01b039091168152602090f35b3461015f57602036600319011261015f576001600160a01b036101ac61065a565b165f526003602052602060405f2054604051908152f35b3461015f57602036600319011261015f576001600160a01b036101e461065a565b165f5260036020526020600160405f200154604051908152f35b3461015f575f36600319011261015f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461015f575f36600319011261015f576002546040516001600160a01b039091168152602090f35b3461015f57602036600319011261015f576001600160a01b0361028b61065a565b165f526003602052606060405f2061ffff600860018060a01b0360078401541692015460405192835260018060a01b038116602084015260a01c166040820152f35b3461015f57602036600319011261015f576001600160a01b036102ee61065a565b165f526003602052602061031560405f2061030f600382015491429061114b565b90610670565b604051908152f35b3461015f575f36600319011261015f575f546040516001600160a01b039091168152602090f35b3461015f5760a036600319011261015f5761035d61065a565b6044356001600160a01b038116810361015f576064356001600160a01b038116810361015f576084359161ffff8316830361015f576103a79361039e610da6565b60243590610adc565b60015f5160206111a55f395f51905f5255005b3461015f575f36600319011261015f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461015f575f36600319011261015f57600154336001600160a01b0382160361046b576001600160a01b03199081166001555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b63118cdaa760e01b5f523360045260245ffd5b3461015f575f36600319011261015f576317d5c96560e11b5f5260045ffd5b3461015f57602036600319011261015f576104b661065a565b6104be610e1b565b600254906001600160a01b03821661052c576001600160a01b031690811561051d576001600160a01b03191681176002556040519081527f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b190602090a1005b63d92e233d60e01b5f5260045ffd5b62dc149f60e41b5f5260045ffd5b3461015f57604036600319011261015f5761055361065a565b6024356001600160a01b038116810361015f5761056f91610a3d565b005b3461015f575f36600319011261015f57602060405163096601808152f35b3461015f57602036600319011261015f576001600160a01b036105b061065a565b165f526003602052602061031560405f2061030f6105d76001830154600384015490610670565b91429061114b565b3461015f57602036600319011261015f57602061060a6105fd61065a565b610605610da6565b610705565b60015f5160206111a55f395f51905f5255604051908152f35b3461015f57602036600319011261015f576020906001600160a01b0361064761065a565b165f5260038252600260405f2001548152f35b600435906001600160a01b038216820361015f57565b9190820180921161067d57565b634e487b7160e01b5f52601160045260245ffd5b8181029291811591840414171561067d57565b81156106ae570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161067d57565b90601f8019910116810190811067ffffffffffffffff8211176106f157604052565b634e487b7160e01b5f52604160045260245ffd5b6002549091905f906001600160a01b031615610a2e576001600160a01b038381165f81815260036020526040902060078101805491969294909390911633141580610a17575b610a08576107594287610dde565b600386019586549687156109fd57905f600892556001810161077c898254610670565b90550161271061079461ffff835460a01c1689610691565b04926107a084896106c2565b9460018060a01b037f0000000000000000000000000000000000000000000000000000000000000000169260405163095ea7b360e01b5f52846004528a60245260205f604481808d5af19060015f51148216156109ee575b60405215610938575b856108c7575b5085610844575b505050507f82e416ba72d10e709b5de7ac16f5f49ff1d94f22d55bf582d353d3c313a1e8dd9160409182519182526020820152a2565b546001600160a01b0316823b156108c3576040516309ad4dd960e01b81526001600160a01b03918216600482015291166024820152604481018590529082908290606490829084905af180156108b8576108a0575b808061080e565b6108ab8280926106cf565b6108b55780610899565b80fd5b6040513d84823e3d90fd5b8380fd5b546001600160a01b0316833b1561015f576040516309ad4dd960e01b81526001600160a01b0391821660048201529083166024820152604481018690525f8160648183885af1801561092d5715610807576109259194505f906106cf565b5f925f610807565b6040513d5f823e3d90fd5b60405163095ea7b360e01b5f52846004525f60245260205f604481808d5af19060015f51148216156109d6575b604052156109a25760405163095ea7b360e01b5f52846004528a60245260205f604481808d5af19060015f51148216156109b5575b604052610801575b87635274afe760e01b5f5260045260245ffd5b9060018115166109cd57893b15153d1516169061099a565b503d5f823e3d90fd5b9060018115166109cd57893b15153d15161690610965565b90893b15153d151616906107f8565b505f96505050505050565b630da3333b60e01b5f5260045ffd5b5060088601546001600160a01b031633141561074b565b631966391b60e11b5f5260045ffd5b6002546001600160a01b03163303610a2e576001600160a01b03169081158015610acb575b61051d575f82815260036020526040902060070180546001600160a01b039283169392169190838314610ac55780546001600160a01b031916841790557f38f9c71383b6e3fe639172c6b3a3d4418fa722b4abf99bfd8e31f92bd5ea23f05f80a4565b50505050565b506001600160a01b03811615610a62565b92936001600160a01b038416939291841561051d576002546001600160a01b031615610a2e57610b0c3385610e4f565b15610d97578015610cc8576001600160a01b038316158015610d86575b8015610d77575b610d68576040516370a0823160e01b8152306004820152602081602481895afa90811561092d575f91610d36575b50604051916323b872dd60e01b5f52336004523060245260445260205f606481808a5af160015f5114811615610d17575b826040525f60605215610d04576370a0823160e01b8252306004830152602082602481895afa801561092d575f90610cd0575b610bcc92506106c2565b948515610cc857610bf492855f52600360205260405f2094610bee4287610dde565b8561103a565b600481018054610c14610c078683610670565b9180610cb4575f90610691565b6309660180860286810463096601800361067d57610c368391610c3b93610670565b6106a4565b9155426005830155610c4d8142610670565b60068301556309660180036309660180811161067d57610c6d90426106c2565b90816002820155610c7f848254610670565b905560405192835260208301527f967ad762aa9070ada8db64577288e214771e89667066ae38e8750cb8a86c542960403393a3565b610cc24260068701546106c2565b90610691565b505050505050565b506020823d602011610cfc575b81610cea602093836106cf565b8101031261015f57610bcc9151610bc2565b3d9150610cdd565b85635274afe760e01b5f5260045260245ffd5b6001811516610d2d57863b15153d151616610b8f565b823d5f823e3d90fd5b90506020813d602011610d60575b81610d51602093836106cf565b8101031261015f57515f610b5e565b3d9150610d44565b63a7d7d0c560e01b5f5260045ffd5b5061271061ffff831611610b30565b506001600160a01b03861615610b29565b63ba13c3d960e01b5f5260045ffd5b60025f5160206111a55f395f51905f525414610dcf5760025f5160206111a55f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b600590610deb838261114b565b80610df557500155565b60048201610e048282546106c2565b9055610e1560038301918254610670565b90550155565b5f546001600160a01b0316330361046b57565b51906001600160a01b038216820361015f57565b5190811515820361015f57565b6001600160a01b03918216917f0000000000000000000000000000000000000000000000000000000000000000168214611033576002546001600160a01b031690811561102c57604051631e7945ad60e11b81526001600160a01b039091166004820152906101e090829060249082905afa90811561092d575f91610ee1575b50602001516001600160a01b03161490565b90506101e0813d8211611024575b81610efd6101e093836106cf565b8101031261015f57604051906101e0820182811067ffffffffffffffff8211176106f157604052610f2d81610e2e565b8252610f3b60208201610e2e565b6020830152610f4c60408201610e2e565b6040830152610f5d60608201610e2e565b6060830152610f6e60808201610e2e565b608083015260a081015160a083015260c081015162ffffff8116810361015f5760c083015260e08101518060020b810361015f5760e083015261010081015161ffff8116810361015f57610100830152610fcb6101208201610e42565b610120830152610140810151600481101561015f57611018916101c0916101408501526101608101516101608501526101808101516101808501526101a08101516101a085015201610e42565b6101c08201525f610ecf565b3d9150610eef565b5050505f90565b5050600190565b916004830154158061113f575b611098575050600801546001600160a01b0380821692169190911480159290611082575b505061107357565b638a621fd960e01b5f5260045ffd5b61ffff91925081169160a01c1614155f8061106b565b6007830180549295937fa92f5227e67257769e49f294586ea055f8d5714595dfdcc2d8a0cac8a3e50fbe93602093600892916001600160a01b03161561111e575b500180546001600160b01b0319166001600160a01b0396871690811760a087901b61ffff60a01b1617909155905460405161ffff9590951685529095908516941692a4565b83546001600160a01b0319166001600160a01b03919091161783555f6110d9565b50600383015415611047565b9060048201549182158015611196575b61102c57600681015490818310156111905792610cc2610c3692611187600561118d97015480926106c2565b946106c2565b90565b50505090565b50600581015482111561115b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220586c9343477e66f8747bbc2a421f055443bf03d9d01a63ff9a9638de43a6caa164736f6c63430008230033",
      "runtime": "0x6080806040526004361015610012575f80fd5b5f3560e01c908163032bbf4f146106235750806319165587146105df578063384711cc1461058f5780634cfc4d30146105715780635ad7fc171461053a5780635bb478081461049d578063715018a61461047e57806379ba5097146103fe57806382589038146103ba578063892823f7146103445780638da5cb5b1461031d578063a3f8eace146102cd578063b224cf641461026a578063c45a015514610242578063c4b7de97146101fe578063d79779b2146101c3578063d8fb93371461018b578063e30c3978146101635763f2fde38b146100ed575f80fd5b3461015f57602036600319011261015f5761010661065a565b61010e610e1b565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b3461015f575f36600319011261015f576001546040516001600160a01b039091168152602090f35b3461015f57602036600319011261015f576001600160a01b036101ac61065a565b165f526003602052602060405f2054604051908152f35b3461015f57602036600319011261015f576001600160a01b036101e461065a565b165f5260036020526020600160405f200154604051908152f35b3461015f575f36600319011261015f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461015f575f36600319011261015f576002546040516001600160a01b039091168152602090f35b3461015f57602036600319011261015f576001600160a01b0361028b61065a565b165f526003602052606060405f2061ffff600860018060a01b0360078401541692015460405192835260018060a01b038116602084015260a01c166040820152f35b3461015f57602036600319011261015f576001600160a01b036102ee61065a565b165f526003602052602061031560405f2061030f600382015491429061114b565b90610670565b604051908152f35b3461015f575f36600319011261015f575f546040516001600160a01b039091168152602090f35b3461015f5760a036600319011261015f5761035d61065a565b6044356001600160a01b038116810361015f576064356001600160a01b038116810361015f576084359161ffff8316830361015f576103a79361039e610da6565b60243590610adc565b60015f5160206111a55f395f51905f5255005b3461015f575f36600319011261015f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461015f575f36600319011261015f57600154336001600160a01b0382160361046b576001600160a01b03199081166001555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b63118cdaa760e01b5f523360045260245ffd5b3461015f575f36600319011261015f576317d5c96560e11b5f5260045ffd5b3461015f57602036600319011261015f576104b661065a565b6104be610e1b565b600254906001600160a01b03821661052c576001600160a01b031690811561051d576001600160a01b03191681176002556040519081527f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b190602090a1005b63d92e233d60e01b5f5260045ffd5b62dc149f60e41b5f5260045ffd5b3461015f57604036600319011261015f5761055361065a565b6024356001600160a01b038116810361015f5761056f91610a3d565b005b3461015f575f36600319011261015f57602060405163096601808152f35b3461015f57602036600319011261015f576001600160a01b036105b061065a565b165f526003602052602061031560405f2061030f6105d76001830154600384015490610670565b91429061114b565b3461015f57602036600319011261015f57602061060a6105fd61065a565b610605610da6565b610705565b60015f5160206111a55f395f51905f5255604051908152f35b3461015f57602036600319011261015f576020906001600160a01b0361064761065a565b165f5260038252600260405f2001548152f35b600435906001600160a01b038216820361015f57565b9190820180921161067d57565b634e487b7160e01b5f52601160045260245ffd5b8181029291811591840414171561067d57565b81156106ae570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161067d57565b90601f8019910116810190811067ffffffffffffffff8211176106f157604052565b634e487b7160e01b5f52604160045260245ffd5b6002549091905f906001600160a01b031615610a2e576001600160a01b038381165f81815260036020526040902060078101805491969294909390911633141580610a17575b610a08576107594287610dde565b600386019586549687156109fd57905f600892556001810161077c898254610670565b90550161271061079461ffff835460a01c1689610691565b04926107a084896106c2565b9460018060a01b037f0000000000000000000000000000000000000000000000000000000000000000169260405163095ea7b360e01b5f52846004528a60245260205f604481808d5af19060015f51148216156109ee575b60405215610938575b856108c7575b5085610844575b505050507f82e416ba72d10e709b5de7ac16f5f49ff1d94f22d55bf582d353d3c313a1e8dd9160409182519182526020820152a2565b546001600160a01b0316823b156108c3576040516309ad4dd960e01b81526001600160a01b03918216600482015291166024820152604481018590529082908290606490829084905af180156108b8576108a0575b808061080e565b6108ab8280926106cf565b6108b55780610899565b80fd5b6040513d84823e3d90fd5b8380fd5b546001600160a01b0316833b1561015f576040516309ad4dd960e01b81526001600160a01b0391821660048201529083166024820152604481018690525f8160648183885af1801561092d5715610807576109259194505f906106cf565b5f925f610807565b6040513d5f823e3d90fd5b60405163095ea7b360e01b5f52846004525f60245260205f604481808d5af19060015f51148216156109d6575b604052156109a25760405163095ea7b360e01b5f52846004528a60245260205f604481808d5af19060015f51148216156109b5575b604052610801575b87635274afe760e01b5f5260045260245ffd5b9060018115166109cd57893b15153d1516169061099a565b503d5f823e3d90fd5b9060018115166109cd57893b15153d15161690610965565b90893b15153d151616906107f8565b505f96505050505050565b630da3333b60e01b5f5260045ffd5b5060088601546001600160a01b031633141561074b565b631966391b60e11b5f5260045ffd5b6002546001600160a01b03163303610a2e576001600160a01b03169081158015610acb575b61051d575f82815260036020526040902060070180546001600160a01b039283169392169190838314610ac55780546001600160a01b031916841790557f38f9c71383b6e3fe639172c6b3a3d4418fa722b4abf99bfd8e31f92bd5ea23f05f80a4565b50505050565b506001600160a01b03811615610a62565b92936001600160a01b038416939291841561051d576002546001600160a01b031615610a2e57610b0c3385610e4f565b15610d97578015610cc8576001600160a01b038316158015610d86575b8015610d77575b610d68576040516370a0823160e01b8152306004820152602081602481895afa90811561092d575f91610d36575b50604051916323b872dd60e01b5f52336004523060245260445260205f606481808a5af160015f5114811615610d17575b826040525f60605215610d04576370a0823160e01b8252306004830152602082602481895afa801561092d575f90610cd0575b610bcc92506106c2565b948515610cc857610bf492855f52600360205260405f2094610bee4287610dde565b8561103a565b600481018054610c14610c078683610670565b9180610cb4575f90610691565b6309660180860286810463096601800361067d57610c368391610c3b93610670565b6106a4565b9155426005830155610c4d8142610670565b60068301556309660180036309660180811161067d57610c6d90426106c2565b90816002820155610c7f848254610670565b905560405192835260208301527f967ad762aa9070ada8db64577288e214771e89667066ae38e8750cb8a86c542960403393a3565b610cc24260068701546106c2565b90610691565b505050505050565b506020823d602011610cfc575b81610cea602093836106cf565b8101031261015f57610bcc9151610bc2565b3d9150610cdd565b85635274afe760e01b5f5260045260245ffd5b6001811516610d2d57863b15153d151616610b8f565b823d5f823e3d90fd5b90506020813d602011610d60575b81610d51602093836106cf565b8101031261015f57515f610b5e565b3d9150610d44565b63a7d7d0c560e01b5f5260045ffd5b5061271061ffff831611610b30565b506001600160a01b03861615610b29565b63ba13c3d960e01b5f5260045ffd5b60025f5160206111a55f395f51905f525414610dcf5760025f5160206111a55f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b600590610deb838261114b565b80610df557500155565b60048201610e048282546106c2565b9055610e1560038301918254610670565b90550155565b5f546001600160a01b0316330361046b57565b51906001600160a01b038216820361015f57565b5190811515820361015f57565b6001600160a01b03918216917f0000000000000000000000000000000000000000000000000000000000000000168214611033576002546001600160a01b031690811561102c57604051631e7945ad60e11b81526001600160a01b039091166004820152906101e090829060249082905afa90811561092d575f91610ee1575b50602001516001600160a01b03161490565b90506101e0813d8211611024575b81610efd6101e093836106cf565b8101031261015f57604051906101e0820182811067ffffffffffffffff8211176106f157604052610f2d81610e2e565b8252610f3b60208201610e2e565b6020830152610f4c60408201610e2e565b6040830152610f5d60608201610e2e565b6060830152610f6e60808201610e2e565b608083015260a081015160a083015260c081015162ffffff8116810361015f5760c083015260e08101518060020b810361015f5760e083015261010081015161ffff8116810361015f57610100830152610fcb6101208201610e42565b610120830152610140810151600481101561015f57611018916101c0916101408501526101608101516101608501526101808101516101808501526101a08101516101a085015201610e42565b6101c08201525f610ecf565b3d9150610eef565b5050505f90565b5050600190565b916004830154158061113f575b611098575050600801546001600160a01b0380821692169190911480159290611082575b505061107357565b638a621fd960e01b5f5260045ffd5b61ffff91925081169160a01c1614155f8061106b565b6007830180549295937fa92f5227e67257769e49f294586ea055f8d5714595dfdcc2d8a0cac8a3e50fbe93602093600892916001600160a01b03161561111e575b500180546001600160b01b0319166001600160a01b0396871690811760a087901b61ffff60a01b1617909155905460405161ffff9590951685529095908516941692a4565b83546001600160a01b0319166001600160a01b03919091161783555f6110d9565b50600383015415611047565b9060048201549182158015611196575b61102c57600681015490818310156111905792610cc2610c3692611187600561118d97015480926106c2565b946106c2565b90565b50505090565b50600581015482111561115b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220586c9343477e66f8747bbc2a421f055443bf03d9d01a63ff9a9638de43a6caa164736f6c63430008230033",
      "immutableReferences": {
        "2039": [
          {
            "start": 975,
            "length": 32
          },
          {
            "start": 3677,
            "length": 32
          }
        ],
        "2042": [
          {
            "start": 531,
            "length": 32
          },
          {
            "start": 1962,
            "length": 32
          }
        ]
      },
      "creationHash": "0x60a35e377df9c19d1d51bc00064b017acff2d2c468950fe1b43355b7b2972771",
      "runtimeBytes": 4602,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/ShilloV2BuybackVault.sol": "ShilloV2BuybackVault"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloV2BuybackVault.sol": {
          "keccak256": "0x241b48e899062f8f35b0bc3819863422405fc90573ecc01d0b427d6e2862be29",
          "urls": [
            "bzz-raw://3844ce8d72c6eabe595de4a9fbd8db9eb99cc7eb3eed93186b60c2765c158113",
            "dweb:/ipfs/QmdvT7ogvx87SMBPqHC6AZ7ymgvaxP9AqEwSZyddP7Y2bY"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2.sol": {
          "keccak256": "0xa11234bcbb18e4b7ecc2a74ab571fac55c93be48e4e2940d56d8c365e7b58671",
          "urls": [
            "bzz-raw://05b58e8f851021be44e1523b78550ac00d5f043114fbd0a99199424401b7efc1",
            "dweb:/ipfs/QmPAViXH1FUydKFrLY9V1RaxQ7iZwF258Mx4PT76w6SvDn"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
          "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
          "urls": [
            "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
            "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
          "keccak256": "0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c",
          "urls": [
            "bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0",
            "dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
          "keccak256": "0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d",
          "urls": [
            "bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100",
            "dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
          "keccak256": "0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc",
          "urls": [
            "bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037",
            "dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
          "keccak256": "0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44",
          "urls": [
            "bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d",
            "dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol": {
          "keccak256": "0xd735962e3d6660884153ba8a972b5f100dde4c482f2ff1c525ba7fdefb154cbd",
          "urls": [
            "bzz-raw://5a264d17b093f585844b0d977e9f60555b8c8d6513b304fde863cdf652a0d336",
            "dweb:/ipfs/QmWXfaJisjVnrjTUjZGryZpMob9wKivvtbodLS3PTc1ttq"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
          "keccak256": "0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2",
          "urls": [
            "bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303",
            "dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
          "keccak256": "0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f",
          "urls": [
            "bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e",
            "dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
          "keccak256": "0x377051c0c17a28038c32f58d76a42817eb3b24f2b4c6a2e788a9544e856d738d",
          "urls": [
            "bzz-raw://c5365fead4a20b84662284c97c07d707c67f5bc9e07b371980aba8c3c6e83661",
            "dweb:/ipfs/QmYrYoLPEADtXoCu9ZBnwkXdNB9D9FPHuhS9pWaQW4nYx5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol": {
          "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
          "urls": [
            "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
            "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol": {
          "keccak256": "0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53",
          "urls": [
            "bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99",
            "dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
          "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97",
          "urls": [
            "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b",
            "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
          "keccak256": "0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c",
          "urls": [
            "bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617",
            "dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"
          ],
          "license": "MIT"
        }
      }
    },
    "ShilloV2LaunchLocker": {
      "abi": [
        {
          "type": "constructor",
          "inputs": [
            {
              "name": "initialOwner",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "positionManager_",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "acceptOwnership",
          "inputs": [],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "factory",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "isLocked",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "lockPosition",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "tokenId",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "lockTokenSupply",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "lockedPositions",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "tokenId",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "lockedTokenSupply",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "amount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "onERC721Received",
          "inputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "",
              "type": "bytes",
              "internalType": "bytes"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes4",
              "internalType": "bytes4"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "owner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pendingOwner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "positionManager",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "renounceOwnership",
          "inputs": [],
          "outputs": [],
          "stateMutability": "pure"
        },
        {
          "type": "function",
          "name": "setFactory",
          "inputs": [
            {
              "name": "factory_",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "transferOwnership",
          "inputs": [
            {
              "name": "newOwner",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "event",
          "name": "FactorySet",
          "inputs": [
            {
              "name": "factory",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferStarted",
          "inputs": [
            {
              "name": "previousOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferred",
          "inputs": [
            {
              "name": "previousOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PositionLocked",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "tokenId",
              "type": "uint256",
              "indexed": true,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "TokenSupplyLocked",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "AlreadyInitialized",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotFactory",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotPositionManager",
          "inputs": []
        },
        {
          "type": "error",
          "name": "OwnableInvalidOwner",
          "inputs": [
            {
              "name": "owner",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "OwnableUnauthorizedAccount",
          "inputs": [
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "OwnershipCannotBeRenounced",
          "inputs": []
        },
        {
          "type": "error",
          "name": "PositionAlreadyLocked",
          "inputs": []
        },
        {
          "type": "error",
          "name": "PositionNotHeld",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SafeERC20FailedOperation",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "ZeroAddress",
          "inputs": []
        }
      ],
      "bytecode": "0x60a03461010b57601f6108e938819003918201601f19168301916001600160401b0383118484101761010f57808492604094855283398101031261010b57610052602061004b83610123565b9201610123565b6001600160a01b039091169081156100f857600180546001600160a01b03199081169091555f80549182168417815560405193916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a01b038116156100e9576080526107b1908161013882396080518181816102b901528181610483015261060e0152f35b63d92e233d60e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361010b5756fe6080806040526004361015610012575f80fd5b5f3560e01c908163150b7a02146105ad57508063292d5732146104195780634a4fbeec146103dc5780635bb478081461033f578063715018a614610320578063732e78e4146102e8578063791b98bc146102a457806379ba5097146102245780638da5cb5b146101fd578063b8a0d7ab146101b4578063c45a01551461018c578063e30c397814610164578063f2fde38b146100f25763fa22143d146100b6575f80fd5b346100ee5760203660031901126100ee576001600160a01b036100d761065a565b165f526003602052602060405f2054604051908152f35b5f80fd5b346100ee5760203660031901126100ee5761010b61065a565b610113610768565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b346100ee575f3660031901126100ee576001546040516001600160a01b039091168152602090f35b346100ee575f3660031901126100ee576002546040516001600160a01b039091168152602090f35b346100ee5760403660031901126100ee576101cd61065a565b6002546001600160a01b031633036101ee576101ec9060243590610686565b005b631966391b60e11b5f5260045ffd5b346100ee575f3660031901126100ee575f546040516001600160a01b039091168152602090f35b346100ee575f3660031901126100ee57600154336001600160a01b03821603610291576001600160a01b03199081166001555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b63118cdaa760e01b5f523360045260245ffd5b346100ee575f3660031901126100ee576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100ee5760203660031901126100ee576001600160a01b0361030961065a565b165f526004602052602060405f2054604051908152f35b346100ee575f3660031901126100ee576317d5c96560e11b5f5260045ffd5b346100ee5760203660031901126100ee5761035861065a565b610360610768565b600254906001600160a01b0382166103ce576001600160a01b03169081156103bf576001600160a01b03191681176002556040519081527f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b190602090a1005b63d92e233d60e01b5f5260045ffd5b62dc149f60e41b5f5260045ffd5b346100ee5760203660031901126100ee576001600160a01b036103fd61065a565b165f526005602052602060ff60405f2054166040519015158152f35b346100ee5760403660031901126100ee5761043261065a565b60025460243591906001600160a01b031633036101ee576001600160a01b03165f8181526005602052604090205460ff1661059e576040516331a9108f60e11b8152600481018390526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610593575f91610527575b50306001600160a01b039091160361051857805f52600560205260405f20600160ff19825416179055805f5260036020528160405f20557f2cabb2a2973327d5863ceb4707e9441851243897e86d587ee35943599752eb545f80a3005b6335a4e4a560e11b5f5260045ffd5b905060203d60201161058c575b601f8101601f1916820167ffffffffffffffff811183821017610578576020918391604052810103126100ee57516001600160a01b03811681036100ee57836104bb565b634e487b7160e01b5f52604160045260245ffd5b503d610534565b6040513d5f823e3d90fd5b637f184cdb60e11b5f5260045ffd5b346100ee5760803660031901126100ee576105c661065a565b506105cf610670565b5060643567ffffffffffffffff81116100ee57366023820112156100ee57806004013567ffffffffffffffff81116100ee57369101602401116100ee577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361064b57630a85bd0160e11b8152602090f35b63041fb8cb60e31b5f5260045ffd5b600435906001600160a01b03821682036100ee57565b602435906001600160a01b03821682036100ee57565b6001600160a01b03169081156103bf578015610764576040516323b872dd60e01b5f5233600452306024528160445260205f60648180875af160015f5114811615610745575b816040525f6060521561073257825f52600460205260405f209081549280840180941161071e577faf33c4aba92959b3e7ddc83ab728938262da159a6c05ca836f6c46f9bcb2c74093602093558152a2565b634e487b7160e01b5f52601160045260245ffd5b82635274afe760e01b5f5260045260245ffd5b600181151661075b57833b15153d1516166106cc565b503d5f823e3d90fd5b5050565b5f546001600160a01b031633036102915756fea26469706673582212202b5447501d13fac0a670170b3b7932c5c79373e4067046d44ada77d99ffbefba64736f6c63430008230033",
      "runtime": "0x6080806040526004361015610012575f80fd5b5f3560e01c908163150b7a02146105ad57508063292d5732146104195780634a4fbeec146103dc5780635bb478081461033f578063715018a614610320578063732e78e4146102e8578063791b98bc146102a457806379ba5097146102245780638da5cb5b146101fd578063b8a0d7ab146101b4578063c45a01551461018c578063e30c397814610164578063f2fde38b146100f25763fa22143d146100b6575f80fd5b346100ee5760203660031901126100ee576001600160a01b036100d761065a565b165f526003602052602060405f2054604051908152f35b5f80fd5b346100ee5760203660031901126100ee5761010b61065a565b610113610768565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b346100ee575f3660031901126100ee576001546040516001600160a01b039091168152602090f35b346100ee575f3660031901126100ee576002546040516001600160a01b039091168152602090f35b346100ee5760403660031901126100ee576101cd61065a565b6002546001600160a01b031633036101ee576101ec9060243590610686565b005b631966391b60e11b5f5260045ffd5b346100ee575f3660031901126100ee575f546040516001600160a01b039091168152602090f35b346100ee575f3660031901126100ee57600154336001600160a01b03821603610291576001600160a01b03199081166001555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b63118cdaa760e01b5f523360045260245ffd5b346100ee575f3660031901126100ee576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100ee5760203660031901126100ee576001600160a01b0361030961065a565b165f526004602052602060405f2054604051908152f35b346100ee575f3660031901126100ee576317d5c96560e11b5f5260045ffd5b346100ee5760203660031901126100ee5761035861065a565b610360610768565b600254906001600160a01b0382166103ce576001600160a01b03169081156103bf576001600160a01b03191681176002556040519081527f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b190602090a1005b63d92e233d60e01b5f5260045ffd5b62dc149f60e41b5f5260045ffd5b346100ee5760203660031901126100ee576001600160a01b036103fd61065a565b165f526005602052602060ff60405f2054166040519015158152f35b346100ee5760403660031901126100ee5761043261065a565b60025460243591906001600160a01b031633036101ee576001600160a01b03165f8181526005602052604090205460ff1661059e576040516331a9108f60e11b8152600481018390526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610593575f91610527575b50306001600160a01b039091160361051857805f52600560205260405f20600160ff19825416179055805f5260036020528160405f20557f2cabb2a2973327d5863ceb4707e9441851243897e86d587ee35943599752eb545f80a3005b6335a4e4a560e11b5f5260045ffd5b905060203d60201161058c575b601f8101601f1916820167ffffffffffffffff811183821017610578576020918391604052810103126100ee57516001600160a01b03811681036100ee57836104bb565b634e487b7160e01b5f52604160045260245ffd5b503d610534565b6040513d5f823e3d90fd5b637f184cdb60e11b5f5260045ffd5b346100ee5760803660031901126100ee576105c661065a565b506105cf610670565b5060643567ffffffffffffffff81116100ee57366023820112156100ee57806004013567ffffffffffffffff81116100ee57369101602401116100ee577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361064b57630a85bd0160e11b8152602090f35b63041fb8cb60e31b5f5260045ffd5b600435906001600160a01b03821682036100ee57565b602435906001600160a01b03821682036100ee57565b6001600160a01b03169081156103bf578015610764576040516323b872dd60e01b5f5233600452306024528160445260205f60648180875af160015f5114811615610745575b816040525f6060521561073257825f52600460205260405f209081549280840180941161071e577faf33c4aba92959b3e7ddc83ab728938262da159a6c05ca836f6c46f9bcb2c74093602093558152a2565b634e487b7160e01b5f52601160045260245ffd5b82635274afe760e01b5f5260045260245ffd5b600181151661075b57833b15153d1516166106cc565b503d5f823e3d90fd5b5050565b5f546001600160a01b031633036102915756fea26469706673582212202b5447501d13fac0a670170b3b7932c5c79373e4067046d44ada77d99ffbefba64736f6c63430008230033",
      "immutableReferences": {
        "8535": [
          {
            "start": 697,
            "length": 32
          },
          {
            "start": 1155,
            "length": 32
          },
          {
            "start": 1550,
            "length": 32
          }
        ]
      },
      "creationHash": "0x76915788fd491b45720936bcf259165c8ec80efb02934bf761114ba59efed5a1",
      "runtimeBytes": 1969,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/ShilloV2LaunchLocker.sol": "ShilloV2LaunchLocker"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloV2LaunchLocker.sol": {
          "keccak256": "0x327c133adfa3eda4766eae2c025d4697f02568158b913b434b048b680a2babd5",
          "urls": [
            "bzz-raw://bf19c962f59d7de3332213e79ccc172b2d8c50d01b5369ca3b7ae53355a4e907",
            "dweb:/ipfs/QmbSoteV1gC4f6up94fuvZXntvNL4wZvUDUk9kECAn9819"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2.sol": {
          "keccak256": "0xa11234bcbb18e4b7ecc2a74ab571fac55c93be48e4e2940d56d8c365e7b58671",
          "urls": [
            "bzz-raw://05b58e8f851021be44e1523b78550ac00d5f043114fbd0a99199424401b7efc1",
            "dweb:/ipfs/QmPAViXH1FUydKFrLY9V1RaxQ7iZwF258Mx4PT76w6SvDn"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
          "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
          "urls": [
            "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
            "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
          "keccak256": "0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c",
          "urls": [
            "bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0",
            "dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
          "keccak256": "0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d",
          "urls": [
            "bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100",
            "dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
          "keccak256": "0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc",
          "urls": [
            "bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037",
            "dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
          "keccak256": "0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44",
          "urls": [
            "bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d",
            "dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol": {
          "keccak256": "0xd735962e3d6660884153ba8a972b5f100dde4c482f2ff1c525ba7fdefb154cbd",
          "urls": [
            "bzz-raw://5a264d17b093f585844b0d977e9f60555b8c8d6513b304fde863cdf652a0d336",
            "dweb:/ipfs/QmWXfaJisjVnrjTUjZGryZpMob9wKivvtbodLS3PTc1ttq"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
          "keccak256": "0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2",
          "urls": [
            "bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303",
            "dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
          "keccak256": "0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f",
          "urls": [
            "bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e",
            "dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
          "keccak256": "0x377051c0c17a28038c32f58d76a42817eb3b24f2b4c6a2e788a9544e856d738d",
          "urls": [
            "bzz-raw://c5365fead4a20b84662284c97c07d707c67f5bc9e07b371980aba8c3c6e83661",
            "dweb:/ipfs/QmYrYoLPEADtXoCu9ZBnwkXdNB9D9FPHuhS9pWaQW4nYx5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol": {
          "keccak256": "0xf78f05f3b8c9f75570e85300d7b4600d7f6f6a198449273f31d44c1641adb46f",
          "urls": [
            "bzz-raw://e28b872613b45e0e801d4995aa4380be2531147bfe2d85c1d6275f1de514fba3",
            "dweb:/ipfs/QmeeFcfShHYaS3BdgVj78nxR28ZaVUwbvr66ud8bT6kzw9"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol": {
          "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
          "urls": [
            "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
            "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
          "keccak256": "0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c",
          "urls": [
            "bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617",
            "dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"
          ],
          "license": "MIT"
        }
      }
    },
    "ShilloV2LaunchFactory": {
      "abi": [
        {
          "type": "constructor",
          "inputs": [
            {
              "name": "initialOwner",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "poolManager_",
              "type": "address",
              "internalType": "contract IPoolManager"
            },
            {
              "name": "positionManager_",
              "type": "address",
              "internalType": "contract IPositionManager"
            },
            {
              "name": "permit2_",
              "type": "address",
              "internalType": "contract IAllowanceTransfer"
            },
            {
              "name": "locker_",
              "type": "address",
              "internalType": "contract ShilloV2LaunchLocker"
            },
            {
              "name": "memeHook_",
              "type": "address",
              "internalType": "contract ShilloV2MemeHook"
            },
            {
              "name": "feeEscrow_",
              "type": "address",
              "internalType": "contract IShilloV2FeeEscrow"
            },
            {
              "name": "buybackVault_",
              "type": "address",
              "internalType": "contract ShilloV2BuybackVault"
            },
            {
              "name": "initialLaunchFee",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "receive",
          "stateMutability": "payable"
        },
        {
          "type": "function",
          "name": "CREATOR_FEE_RECIPIENT_EXECUTION_WINDOW",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "CREATOR_FEE_RECIPIENT_TIMELOCK",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "GRADUATION_RESCUE_DELAY",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "acceptOwnership",
          "inputs": [],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "addLaunchConfig",
          "inputs": [
            {
              "name": "config",
              "type": "tuple",
              "internalType": "struct ShilloV2LaunchFactory.LaunchConfig",
              "components": [
                {
                  "name": "supply",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "curveFeeBps",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "phantomQuote",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "graduationThreshold",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "poolFee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "enabled",
                  "type": "bool",
                  "internalType": "bool"
                }
              ]
            }
          ],
          "outputs": [
            {
              "name": "id",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "approvedPairTokens",
          "inputs": [
            {
              "name": "pairToken",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "approved",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "buybackVault",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract ShilloV2BuybackVault"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "canLaunch",
          "inputs": [
            {
              "name": "launcher",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "cancelCreatorFeeRecipientChange",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "createGraduatedPool",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "positionId",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "executeCreatorFeeRecipientChange",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "feeEscrow",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IShilloV2FeeEscrow"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "forceSweptGraduation",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "getLaunchConfig",
          "inputs": [
            {
              "name": "id",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "tuple",
              "internalType": "struct ShilloV2LaunchFactory.LaunchConfig",
              "components": [
                {
                  "name": "supply",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "curveFeeBps",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "phantomQuote",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "graduationThreshold",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "poolFee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "enabled",
                  "type": "bool",
                  "internalType": "bool"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "getLaunchFeePolicy",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "tuple",
              "internalType": "struct FeePolicySnapshot",
              "components": [
                {
                  "name": "protocolFeeRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "protocolFeeShareBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "buybackBurnBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "hookFeeBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "maxInternalPriceImpactBps",
                  "type": "uint16",
                  "internalType": "uint16"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "getLaunchedToken",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "tuple",
              "internalType": "struct IShilloV2LaunchFactory.LaunchedToken",
              "components": [
                {
                  "name": "token",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "curve",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "deployer",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "creatorFeeRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "pairToken",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "graduationThreshold",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "poolFee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "creatorTaxBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "buybackEnabled",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "phase",
                  "type": "uint8",
                  "internalType": "enum GraduationPhase"
                },
                {
                  "name": "sweptQuote",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "sweptTokens",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "sweptAt",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "exists",
                  "type": "bool",
                  "internalType": "bool"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "graduate",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "graduationExecutor",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract ShilloV2GraduationExecutor"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "graduationGuard",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract ShilloV2GraduationGuard"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchConfigCount",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchDeployer",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract ShilloV2LaunchDeployer"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchEnabled",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchFee",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchForwarder",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchToken",
          "inputs": [
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct ShilloV2LaunchFactory.TokenParams",
              "components": [
                {
                  "name": "name",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "symbol",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "logo",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "description",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "socials",
                  "type": "tuple",
                  "internalType": "struct ShilloV2LauncherToken.Socials",
                  "components": [
                    {
                      "name": "twitter",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "telegram",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "discord",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "website",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "farcaster",
                      "type": "string",
                      "internalType": "string"
                    }
                  ]
                },
                {
                  "name": "creatorFeeRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "creatorTaxBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "buybackEnabled",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "expectedEconomics",
                  "type": "bytes32",
                  "internalType": "bytes32"
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "internalType": "bytes32"
                }
              ]
            },
            {
              "name": "launchConfigId",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "pairToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "snipeTaxExemptions",
              "type": "address[]",
              "internalType": "address[]"
            }
          ],
          "outputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "curve",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "payable"
        },
        {
          "type": "function",
          "name": "launchToken",
          "inputs": [
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct ShilloV2LaunchFactory.TokenParams",
              "components": [
                {
                  "name": "name",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "symbol",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "logo",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "description",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "socials",
                  "type": "tuple",
                  "internalType": "struct ShilloV2LauncherToken.Socials",
                  "components": [
                    {
                      "name": "twitter",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "telegram",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "discord",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "website",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "farcaster",
                      "type": "string",
                      "internalType": "string"
                    }
                  ]
                },
                {
                  "name": "creatorFeeRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "creatorTaxBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "buybackEnabled",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "expectedEconomics",
                  "type": "bytes32",
                  "internalType": "bytes32"
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "internalType": "bytes32"
                }
              ]
            },
            {
              "name": "launchConfigId",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "pairToken",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "curve",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "payable"
        },
        {
          "type": "function",
          "name": "launchTokenFor",
          "inputs": [
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct ShilloV2LaunchFactory.TokenParams",
              "components": [
                {
                  "name": "name",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "symbol",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "logo",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "description",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "socials",
                  "type": "tuple",
                  "internalType": "struct ShilloV2LauncherToken.Socials",
                  "components": [
                    {
                      "name": "twitter",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "telegram",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "discord",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "website",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "farcaster",
                      "type": "string",
                      "internalType": "string"
                    }
                  ]
                },
                {
                  "name": "creatorFeeRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "creatorTaxBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "buybackEnabled",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "expectedEconomics",
                  "type": "bytes32",
                  "internalType": "bytes32"
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "internalType": "bytes32"
                }
              ]
            },
            {
              "name": "launchConfigId",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "pairToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "originalDeployer",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "snipeTaxExemptions",
              "type": "address[]",
              "internalType": "address[]"
            }
          ],
          "outputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "curve",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "payable"
        },
        {
          "type": "function",
          "name": "locker",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract ShilloV2LaunchLocker"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "maxCreatorTaxBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "memeHook",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract ShilloV2MemeHook"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "owner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pairTokenEconomics",
          "inputs": [
            {
              "name": "pairToken",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "phantomQuote",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "graduationThreshold",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "decimals",
              "type": "uint8",
              "internalType": "uint8"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pendingCreatorFeeRecipient",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "newRecipient",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "effectiveAt",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "expiresAt",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pendingOwner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "permit2",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IAllowanceTransfer"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "poolManager",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IPoolManager"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "positionManager",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IPositionManager"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "previewLaunchEconomics",
          "inputs": [
            {
              "name": "launchConfigId",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "pairToken",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes32",
              "internalType": "bytes32"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "renounceOwnership",
          "inputs": [],
          "outputs": [],
          "stateMutability": "pure"
        },
        {
          "type": "function",
          "name": "rescueCurveFees",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "rescueSweptGraduation",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "recipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setBuybackEnabled",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "enabled",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setCreatorFeeRecipient",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "newRecipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setGraduationExecutor",
          "inputs": [
            {
              "name": "executor",
              "type": "address",
              "internalType": "contract ShilloV2GraduationExecutor"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setLaunchDeployer",
          "inputs": [
            {
              "name": "deployer",
              "type": "address",
              "internalType": "contract ShilloV2LaunchDeployer"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setLaunchEnabled",
          "inputs": [
            {
              "name": "enabled",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setLaunchFee",
          "inputs": [
            {
              "name": "newLaunchFee",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setLaunchForwarder",
          "inputs": [
            {
              "name": "forwarder",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setMaxCreatorTaxBps",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setPairTokenApproved",
          "inputs": [
            {
              "name": "pairToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "approved",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setPairTokenEconomics",
          "inputs": [
            {
              "name": "pairToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "phantomQuote",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "graduationThreshold",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "expectedDecimals",
              "type": "uint8",
              "internalType": "uint8"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setSnipeTaxSeconds",
          "inputs": [
            {
              "name": "secondsWindow",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setSnipeTaxStartBps",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setWhitelistedLauncher",
          "inputs": [
            {
              "name": "launcher",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "enabled",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "snipeTaxSeconds",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "snipeTaxStartBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "transferCreatorFeeRecipient",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "newRecipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "transferOwnership",
          "inputs": [
            {
              "name": "newOwner",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "updateLaunchConfig",
          "inputs": [
            {
              "name": "id",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "config",
              "type": "tuple",
              "internalType": "struct ShilloV2LaunchFactory.LaunchConfig",
              "components": [
                {
                  "name": "supply",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "curveFeeBps",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "phantomQuote",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "graduationThreshold",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "poolFee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "enabled",
                  "type": "bool",
                  "internalType": "bool"
                }
              ]
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "whitelistedLaunchers",
          "inputs": [
            {
              "name": "launcher",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "enabled",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "event",
          "name": "BuybackEnabledUpdated",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "enabled",
              "type": "bool",
              "indexed": false,
              "internalType": "bool"
            },
            {
              "name": "controller",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "CreatorFeeRecipientChangeCancelled",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "proposedRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "CreatorFeeRecipientChangeProposed",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "currentRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "proposedRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "effectiveAt",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "expiresAt",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "CreatorFeeRecipientUpdated",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "previousRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "GraduationExecutorSet",
          "inputs": [
            {
              "name": "executor",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "GraduationTokensPermanentlyLocked",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchConfigAdded",
          "inputs": [
            {
              "name": "id",
              "type": "uint256",
              "indexed": true,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchConfigUpdated",
          "inputs": [
            {
              "name": "id",
              "type": "uint256",
              "indexed": true,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchDeployerSet",
          "inputs": [
            {
              "name": "deployer",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchEnabledUpdated",
          "inputs": [
            {
              "name": "enabled",
              "type": "bool",
              "indexed": false,
              "internalType": "bool"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchFeeUpdated",
          "inputs": [
            {
              "name": "launchFee",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchForceSwept",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchForwarderSet",
          "inputs": [
            {
              "name": "forwarder",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchGraduationRescued",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "recipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "quoteAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tokenAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchSwept",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "quoteOut",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tokenOut",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "MaxCreatorTaxUpdated",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferStarted",
          "inputs": [
            {
              "name": "previousOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferred",
          "inputs": [
            {
              "name": "previousOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PairTokenApprovalUpdated",
          "inputs": [
            {
              "name": "pairToken",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "approved",
              "type": "bool",
              "indexed": false,
              "internalType": "bool"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PairTokenEconomicsUpdated",
          "inputs": [
            {
              "name": "pairToken",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "phantomQuote",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "graduationThreshold",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "decimals",
              "type": "uint8",
              "indexed": false,
              "internalType": "uint8"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PoolGraduated",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "positionId",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tokenAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "pairTokenAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "SnipeTaxSecondsUpdated",
          "inputs": [
            {
              "name": "secondsWindow",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "SnipeTaxStartBpsUpdated",
          "inputs": [
            {
              "name": "bps",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "TokenLaunched",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "curve",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "deployer",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "pairToken",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            },
            {
              "name": "launchConfigId",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "graduationThreshold",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "WhitelistedLauncherUpdated",
          "inputs": [
            {
              "name": "launcher",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "enabled",
              "type": "bool",
              "indexed": false,
              "internalType": "bool"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "AlreadySet",
          "inputs": []
        },
        {
          "type": "error",
          "name": "CombinedFeeTooHigh",
          "inputs": []
        },
        {
          "type": "error",
          "name": "CoreLpFeeMustBeZero",
          "inputs": []
        },
        {
          "type": "error",
          "name": "CreatorTaxTooHigh",
          "inputs": []
        },
        {
          "type": "error",
          "name": "CurveFeeTooHigh",
          "inputs": []
        },
        {
          "type": "error",
          "name": "CurveNotQuotable",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ExemptionListTooLong",
          "inputs": []
        },
        {
          "type": "error",
          "name": "FeeTransferFailed",
          "inputs": []
        },
        {
          "type": "error",
          "name": "GraduationExecutorNotSet",
          "inputs": []
        },
        {
          "type": "error",
          "name": "GraduationRescueTooEarly",
          "inputs": [
            {
              "name": "availableAt",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "GraduationSeedNotViable",
          "inputs": []
        },
        {
          "type": "error",
          "name": "GraduationStillViable",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InexactTransfer",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "expected",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "received",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "InvalidBasisPoints",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidGraduationThreshold",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidLaunchConfigId",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidPhantomQuote",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidSnipeTaxWindow",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidTickSpacing",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidTokenParams",
          "inputs": []
        },
        {
          "type": "error",
          "name": "LaunchConfigDisabled",
          "inputs": []
        },
        {
          "type": "error",
          "name": "LaunchDependenciesNotWired",
          "inputs": []
        },
        {
          "type": "error",
          "name": "LaunchDeployerNotSet",
          "inputs": []
        },
        {
          "type": "error",
          "name": "LaunchEconomicsMismatch",
          "inputs": [
            {
              "name": "expected",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "actual",
              "type": "bytes32",
              "internalType": "bytes32"
            }
          ]
        },
        {
          "type": "error",
          "name": "LaunchFeeNotPaid",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NoPendingChange",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotBuybackController",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotCreatorFeeRecipient",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotLaunchForwarder",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotReadyToGraduate",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotWhitelisted",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NothingToGraduate",
          "inputs": []
        },
        {
          "type": "error",
          "name": "OwnableInvalidOwner",
          "inputs": [
            {
              "name": "owner",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "OwnableUnauthorizedAccount",
          "inputs": [
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "OwnershipCannotBeRenounced",
          "inputs": []
        },
        {
          "type": "error",
          "name": "PairTokenDecimalsMismatch",
          "inputs": [
            {
              "name": "expected",
              "type": "uint8",
              "internalType": "uint8"
            },
            {
              "name": "actual",
              "type": "uint8",
              "internalType": "uint8"
            }
          ]
        },
        {
          "type": "error",
          "name": "PairTokenDecimalsUnavailable",
          "inputs": []
        },
        {
          "type": "error",
          "name": "PairTokenEconomicsInvalid",
          "inputs": []
        },
        {
          "type": "error",
          "name": "PairTokenNotApproved",
          "inputs": []
        },
        {
          "type": "error",
          "name": "PairTokenValidationFailed",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ReentrancyGuardReentrantCall",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SafeERC20FailedOperation",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "SqrtPriceOutOfBounds",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SupplyTooHigh",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SupplyTooLow",
          "inputs": []
        },
        {
          "type": "error",
          "name": "TimelockExpired",
          "inputs": [
            {
              "name": "expiresAt",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "TimelockNotElapsed",
          "inputs": [
            {
              "name": "effectiveAt",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "TokenNotFound",
          "inputs": []
        },
        {
          "type": "error",
          "name": "UnsupportedPrice",
          "inputs": []
        },
        {
          "type": "error",
          "name": "WrongGraduationPhase",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ZeroAddress",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ZeroAmount",
          "inputs": []
        }
      ],
      "bytecode": "0x61018080604052346103cd5761012081616e4f80380380916100218285610415565b8339810103126103cd5780516001600160a01b03811691908290036103cd5761004c60208201610438565b6040820151926001600160a01b03841692918385036103cd5760608301516001600160a01b038116958682036103cd5760808501516001600160a01b038116979093908885036103cd5760a08701516001600160a01b038116989096908988036103cd5760c0890151986001600160a01b038a16808b036103cd5760e08201519b6001600160a01b038d1692838e036103cd5761010001519d851561040257600180546001600160a01b03199081169091555f80549182168817815560405197916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556103e86005556126ac600655600f6007556001600160a01b03881696871580156103fa575b6103d957159081156103f1575b506103d957159081156103e8575b506103d957156103d9578160048160209363dc4c90d360e01b82525afa90811561036d575f9161039b575b506001600160a01b03160361038c5760805260a05260c05260e052610100526101205261014052604051610b6a8082016001600160401b038111838210176103785782916162e5833903905ff0801561036d5761016052600855604051615e98908161044d8239608051818181610bd5015281816122740152613d75015260a0518181816118cd015281816124100152613e91015260c051818181612c500152614f29015260e051818181610e85015281816124f20152818161278001528181613e46015261520b0152610100518181816105ce0152818161127c01528181611a13015281816121990152818161352901528181613c7001528181613d3a01528181613dfe01528181613fa50152818161429a01528181615126015281816152df0152818161557d0152615b1201526101205181818161106c015281816142d70152818161506c01526151610152610140518181816108090152818161359b01528181613cd501528181613dc30152818161430801528181615031015261531a015261016051818181611af7015281816136f2015281816138fe01526140e00152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631de25df360e01b5f5260045ffd5b90506020813d6020116103d1575b816103b660209383610415565b810103126103cd576103c790610438565b5f6101ca565b5f80fd5b3d91506103a9565b63d92e233d60e01b5f5260045ffd5b9050155f61019f565b9050155f610191565b508515610184565b631e4fbdf760e01b5f525f60045260245ffd5b601f909101601f19168101906001600160401b0382119082101761037857604052565b51906001600160a01b03821682036103cd5756fe6102a0604052600436101561001b575b3615610019575f80fd5b005b5f5f3560e01c806302d4753d14612fc5578063092c08bd14612e7e5780630e5b0aae14612c7f57806312261ee714612c3b578063189eb0f514612b7c5780631cad862d14612ac05780632260aead14612a5b578063236a4afb14612a395780632931861b146129c85780632d1250b8146129ab5780632f53ef2f146120a85780633108213414612046578063366f0f3e14611fc75780633a9391e814611f435780633cf28b5a14611cbf5780633d3d2d5814611bcb578063470ef5fc14611b26578063496aa10014611ae157806350e25ac214611ac35780635313be2c14611a7557806358373f0414611a475780635a83b00a14611a425780636651812c146119fd5780636783774b146119df5780636e47a1881461199e578063715018a61461197e578063767b7c16146118fc578063791b98bc146118b757806379ba5097146118375780637aed273e14611620578063858f5964146115f75780638763e3dc146114b75780638da5cb5b146114905780639831705e146114515780639b924452146114285780639beacf4a146113c8578063a72101af1461135f578063ae72d87114611341578063b18f1db11461111d578063b20e51af1461109b578063c4b7de9714611056578063cc6d7a391461102d578063cf3cf5731461100f578063d1ec471a14610f9a578063d6a0eef514610eb4578063d7b96d4e14610e6f578063da3eda6514610e30578063dbcb9c7614610c04578063dc4c90d314610bbf578063e102c9aa14610a69578063e30c397814610a40578063e73e334a14610838578063f1f5c993146107f3578063f2fde38b14610786578063f325a5fb14610768578063f35abbcf146106e5578063f56f05b214610681578063f718b78c14610562578063fbec2d8b146104bc5763ff6d8d05146102ba575061000f565b346104b95760203660031901126104b9576102d3612fe2565b6102db61349c565b6001600160a01b0381168252600e60205260408220600a81015460ff16156104aa5760ff600682015460481c1660048110156104965761048757600181015460405163c68360a560e01b81526001600160a01b039091169190602081600481865afa90811561043b578591610458575b501561044657604051634f1f58fd60e01b815292602084600481865afa93841561043b578594610407575b5060405163cbcb317160e01b8152602081600481875afa9081156103fc5786916103c4575b506103ab906103b09584846136db565b6139e7565b60015f516020615e435f395f51905f525580f35b90506020813d6020116103f4575b816103df6020938361310f565b810103126103f057516103b061039b565b5f80fd5b3d91506103d2565b6040513d88823e3d90fd5b9093506020813d602011610433575b816104236020938361310f565b810103126103f05751925f610376565b3d9150610416565b6040513d87823e3d90fd5b6001620b9b5560e31b03198452600484fd5b61047a915060203d602011610480575b610472818361310f565b81019061320e565b5f61034b565b503d610468565b63251976f560e21b8352600483fd5b634e487b7160e01b84526021600452602484fd5b630cbdb7b360e41b8352600483fd5b80fd5b50346104b95760203660031901126104b9576004356001600160a01b0381169081900361055e576104eb61331d565b6002546001600160a01b03811661054f578115610540576001600160a01b03191681176002556040519081527fac04674474e93058fae25e6df5dd94f57cdcacfe560a182a2eefc8c6006fbf6f90602090a180f35b63d92e233d60e01b8352600483fd5b63a741a04560e01b8352600483fd5b5080fd5b50346104b95760403660031901126104b95760043561057f612ff8565b906010548110156106725761059661059c91613130565b50613183565b906001600160a01b03168061064f575060408101516060820151915b604051631134d37b60e31b81529060a0826004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa91821561043b5790610616949392916020969261061e575b5061561e565b604051908152f35b61064191925060a03d60a011610648575b610639818361310f565b8101906132b4565b905f610610565b503d61062f565b808352600c6020526040832054908352600c6020526001604084200154916105b8565b6368b42c5960e01b8352600483fd5b50346104b95760203660031901126104b95760043580151580910361055e5760207f4f1ea5016c51c2f82324e00e9b8a4a95ee5aeaa10c653dabaec5f1bc9047ba0b916106cc61331d565b60ff196009541660ff821617600955604051908152a180f35b5060603660031901126104b9576004356001600160401b03811161055e57610140600319823603011261055e576107349061071e61300e565b61072661349c565b339160243590600401613bd1565b60015f516020615e435f395f51905f5255604080516001600160a01b039384168152929091166020830152819081015b0390f35b50346104b957806003193601126104b9576020600554604051908152f35b50346104b95760203660031901126104b9576107a0612fe2565b6107a861331d565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346104b9576101003660031901126104b95760043560e036602319011261055e5761086261331d565b601054811015610a31576044356103e88111610a2257602435670de0b6b3a76400008110610a135760016001607f1b038111610a04576064359182156109f5576084359081156109e65760c435928360020b928385141593846109e257888113908115916109d3575b506109c45760a4359562ffffff8716938488036109c057846109b1576108f2818584613361565b6108fb89613130565b94909461099d578455600184015560028301556003820155600401805462ffffff1916919091178155925061099957815460189190911b65ffffff0000001665ffffff0000001990911617815560e43580151590818103610995575060ff60301b82549160301b169060ff60301b19161790557f2f8ba78ae68cfd0c82c7756c540eaf4eead3341aef9ccebcb91d546bff10d62b8280a280f35b8480fd5b8380fd5b634e487b7160e01b8b5260048b905260248bfd5b634292c38960e11b8a5260048afd5b8980fd5b63013840ad60e51b8852600488fd5b945050617fff5f94135f6108cb565b8880fd5b6315dc5eeb60e11b8652600486fd5b63056f5a9f60e31b8552600485fd5b63acb9fa2b60e01b8452600484fd5b63c0b4e37360e01b8452600484fd5b6313888a8960e21b8352600483fd5b6368b42c5960e01b8252600482fd5b50346104b957806003193601126104b9576001546040516001600160a01b039091168152602090f35b50346104b95760403660031901126104b957610a83612fe2565b610a8b612ff8565b90610a9461331d565b6001600160a01b0316808352600e60205260408320600a8101549192909160ff1615610bb0576001600160a01b0316918215610ba1576203f4804201804211610b8d576207e900420192838211610b79577f7f119e44c84a715429bee60d30ad2e14afdef6c60bb1a7eaa01290ecf6d1b2e5916040918251610b15816130a2565b8781526020808201848152858301898152888c52600f8352868c20935184546001600160a01b0319166001600160a01b039182161785559151600185015551600293909301929092556003929092015484519384529183019690965290941693a480f35b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b85526011600452602485fd5b63d92e233d60e01b8452600484fd5b630cbdb7b360e41b8452600484fd5b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346104b95760403660031901126104b957610c1e612fe2565b610c26612ff8565b90610c2f61331d565b610c3761349c565b6001600160a01b0316808352600e60205260408320600a81015460ff1615610bb057600681019060ff825460481c166004811015610e1c57600103610e0d576001600160a01b038416938415610dfe576009820192835462093a808101809111610dea57804210610dd85750600783018054600885018054600490960154928a905589905594889055815460ff60481b19166903000000000000000000179091556001600160a01b031683610d47575b5091817f7017304fdd491394686dce984eac721f0be1a22228346210f16694772bde44ca9381604094610d36575b505082519182526020820152a360015f516020615e435f395f51905f525580f35b610d4091876155a6565b5f81610d15565b80610da257508580808086895af1610d5d613262565b5015610d9357916040917f7017304fdd491394686dce984eac721f0be1a22228346210f16694772bde44ca935b91935091610ce7565b634033e4e360e01b8652600486fd5b9181610dd3857f7017304fdd491394686dce984eac721f0be1a22228346210f16694772bde44ca96946040966155a6565b610d8a565b63bdcd75af60e01b8852600452602487fd5b634e487b7160e01b88526011600452602488fd5b63d92e233d60e01b8652600486fd5b63251976f560e21b8552600485fd5b634e487b7160e01b86526021600452602486fd5b50346104b95760203660031901126104b95760209060ff906040906001600160a01b03610e5b612fe2565b168152600a84522054166040519015158152f35b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5060a03660031901126104b957600435906001600160401b0382116104b95761014060031983360301126104b957610eea61300e565b606435906001600160a01b0382168203610f96576084356001600160401b03811161099957610f1d903690600401613072565b949093610f2861349c565b6004546001600160a01b03163303610f87575091610f5091610f599360243590600401613bd1565b93909284615483565b60015f516020615e435f395f51905f5255604080516001600160a01b03928316815292909116602083015290f35b63754f554b60e11b8152600490fd5b8280fd5b50346104b95760203660031901126104b957600435610fb761331d565b80158015611005575b610ff6576020817f2b1bf8cf5a401a6dd314ae29520988783e31f0e50ec734aa9ef26b8b7ff24a1f92600755604051908152a180f35b63d9521a8560e01b8252600482fd5b50603c8111610fc0565b50346104b957806003193601126104b9576020600854604051908152f35b50346104b957806003193601126104b9576002546040516001600160a01b039091168152602090f35b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346104b95760203660031901126104b9576004356110b861331d565b80151580611106575b6110f7576020817f82d0fc041b26338f6e9cc240adde9cbe5b20064b4cb39ab96c953d5643687b1e92600655604051908152a180f35b63800c7e9160e01b8252600482fd5b506107d0811115806110c157506126ac81116110c1565b50346104b95760403660031901126104b957611137612fe2565b61113f613024565b6001600160a01b038216808452600e60205260408420600a8101549293919260ff16156113325760038101548554336001600160a01b03928316811415928392161481611329575b5061131a57849081611312575b506113035760068101805468ff0000000000000000191685151560401b60ff60401b1617815560ff905460481c166004811015610e1c57859291908061126a5750600101546001600160a01b03169050803b1561055e57818091602460405180948193639a9b567d60e01b835289151560048401525af1801561125f5761124a575b50505b60405191151582527fbd886f85b7731f66269f57707414d435bf8df930d3357a10becc48a69377f6d560203393a380f35b816112549161310f565b610f9657825f611216565b6040513d84823e3d90fd5b60021461127a575b505050611219565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916112af919061551f565b813b15610f96578291604483926040519485938492632ce8b02960e01b8452600484015289151560248401525af1801561125f576112ee575b80611272565b816112f89161310f565b610f9657825f6112e8565b631bbefe4d60e11b8552600485fd5b90505f611194565b631bbefe4d60e11b8652600486fd5b9050155f611187565b630cbdb7b360e41b8552600485fd5b50346104b957806003193601126104b9576020601054604051908152f35b5060803660031901126104b957600435906001600160401b0382116104b95761014060031983360301126104b95761139561300e565b90606435906001600160401b0382116104b95750610f506113bd610f59923690600401613072565b94909361072661349c565b50346104b95760203660031901126104b9576040906001600160a01b036113ed612fe2565b168152600f602090815291902080546001820154600290920154604080516001600160a01b0390931683529382019290925291820152606090f35b50346104b957806003193601126104b9576004546040516001600160a01b039091168152602090f35b50346104b95760203660031901126104b95760209060ff906040906001600160a01b0361147c612fe2565b168152600b84522054166040519015158152f35b50346104b957806003193601126104b957546040516001600160a01b039091168152602090f35b50346104b95760403660031901126104b9576114d1612fe2565b6114d9613024565b6114e161331d565b6001600160a01b0382169182156115e85781611549575b5060207f060d1992d069dc524985f328329aae36102a017c59733c5c91fc0691ee0703b691838552600b825261153d81604087209060ff801983541691151516179055565b6040519015158152a280f35b803b156115e857828452600c6020526040842060405190611569826130a2565b8054808352604060ff60026001850154948560208801520154169301928352159081156115df575b506115d057916115c960209260ff7f060d1992d069dc524985f328329aae36102a017c59733c5c91fc0691ee0703b69551169061341e565b91506114f8565b630ec98c7960e31b8552600485fd5b9050155f611591565b630137dfd360e51b8452600484fd5b50346104b957806003193601126104b9576003546040516001600160a01b039091168152602090f35b50346104b95760203660031901126104b95761163a612fe2565b61164261331d565b61164a61349c565b6001600160a01b038116808352600e60205260408320600a81015491929160ff1615610bb05760ff600682015460481c1660048110156118235761181457600181015460405163c68360a560e01b81526001600160a01b039091169290602081600481875afa9081156103fc5786916117f5575b50156117e357604051634f1f58fd60e01b8152602081600481875afa9081156103fc5786916117b1575b5060405163cbcb317160e01b815290602082600481885afa9081156117a6578791611770575b61171a9250848461387f565b611761579061172992916139e7565b7f52c1a28345695afc7f6b7629133124dec5d61ee745affd65e4fd2a776bc058408280a260015f516020615e435f395f51905f525580f35b636d3bcfe560e01b8552600485fd5b90506020823d60201161179e575b8161178b6020938361310f565b810103126103f05761171a91519061170e565b3d915061177e565b6040513d89823e3d90fd5b90506020813d6020116117db575b816117cc6020938361310f565b810103126103f057515f6116e8565b3d91506117bf565b6001620b9b5560e31b03198552600485fd5b61180e915060203d60201161048057610472818361310f565b5f6116be565b63251976f560e21b8452600484fd5b634e487b7160e01b85526021600452602485fd5b50346104b957806003193601126104b957600154336001600160a01b038216036118a4576001600160a01b0319908116600155815433918116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b63118cdaa760e01b825233600452602482fd5b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346104b95760203660031901126104b957611916612fe2565b61191e61331d565b6001600160a01b0316801561196f576020817f56b32d3633fed72f97c4df44a78b5fa04f1d662d4bddebcd8a9b216d26d093ad926001600160601b0360a01b6004541617600455604051908152a180f35b63d92e233d60e01b8252600482fd5b50346104b957806003193601126104b9576317d5c96560e11b8152600490fd5b50346104b95760203660031901126104b9576119c86119bb612fe2565b6119c361331d565b6137df565b156119d05780f35b63147fde5f60e31b8152600490fd5b50346104b957806003193601126104b9576020600754604051908152f35b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b612fc5565b50346104b95760203660031901126104b9576020611a6b611a66612fe2565b6131de565b6040519015158152f35b50346104b95760203660031901126104b9577fc799be5eb19a1a6d6ba7368d21e2bc367c8a335e4a07cd3d954482e6f714d3c56020600435611ab561331d565b80600855604051908152a180f35b50346104b957806003193601126104b9576020600654604051908152f35b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346104b95760203660031901126104b957604060a091611b45612fe2565b8160808451611b53816130d8565b82815282602082015282868201528260608201520152600180851b03168152600d6020522061ffff60405191611b88836130d8565b54600180851b03811683528181851c166020840152818160b01c166040840152818160c01c16606084015260d01c166080820152611bc96040518092613033565bf35b50346104b95760203660031901126104b957611be5612fe2565b6001600160a01b038116808352600f6020526040808420905193929190611c0b856130a2565b80546001600160a01b031680865260018201546020870190815260029092015460408701908152919015611cb05751804210611c9e57505193844211611c8a5783945081611c879452600e60205260408520918552600f6020525f600260408720828155826001820155015560018060a01b03905116916134d4565b80f35b6316f3a81d60e31b84526004859052602484fd5b634086279560e11b8552600452602484fd5b63147fde5f60e31b8552600485fd5b50346104b95760203660031901126104b957611cd9612fe2565b816101c0604051611ce9816130f3565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a0820152015260018060a01b03168152600e60205260408120604051611d61816130f3565b60018060a01b03825416815260018060a01b03600183015416916020820192835260018060a01b03600282015416916040810192835260018060a01b036003830154166060820190815260018060a01b0360048401541660808301908152600584015460a0840190815260068501549060c0850162ffffff8316815260e08601908360181c60020b825261010087019261ffff8560301c16845260ff610120890195818160401c161515875260481c16956101408901966004811015611f2f57875260078a0154976101608a0198895260088b01549961018081019a8b5260098c01549b6101a082019c8d52600a015460ff169c6101c08201809e151590526040519e8f92600160a01b600190039051168352600160a01b600190039051166020830152600160a01b600190039051169060400152600160a01b6001900390511660608d0152600160a01b6001900390511660808c01525160a08b01525162ffffff1660c08a01525160020b60e08901525161ffff16610100880152511515610120870152516004811015611f1b576101e096506101408601525161016085015251610180840152516101a08301525115156101c0820152f35b634e487b7160e01b87526021600452602487fd5b634e487b7160e01b8e52602160045260248efd5b50346104b95760203660031901126104b9576004356001600160a01b0381169081900361055e57611f7261331d565b6003546001600160a01b03811661054f578115610540576001600160a01b03191681176003556040519081527fd5ea7aa3e328a0594dcf6914cd9e5369779efaa194ee4dd4c5afcad4f4ebbb0c90602090a180f35b50346104b95760403660031901126104b957611fe1612fe2565b611fe9613024565b90611ff261331d565b6001600160a01b03169081156105405760207fef2b562a67f01ed4b7c4265ec09b539039c6d5dd7e752191d3940508c3dc006891838552600a825261153d81604087209060ff801983541691151516179055565b50346104b95760203660031901126104b9576040906001600160a01b0361206b612fe2565b168152600c60205220805461076460ff60026001850154940154166040519384938491604091949360ff9160608501968552602085015216910152565b50346103f05760203660031901126103f0576120c2612fe2565b6120ca61349c565b6002546001600160a01b03161561299c576001600160a01b0381165f818152600e60205260409020600a81015460ff161561298d57600681019360ff855460481c1660048110156129795760010361296a5760078201938454928260088201805497612138898886886136db565b61214d6121468a8987615768565b809a61378f565b8061276f575b508290555560098101839055865460ff60481b19166902000000000000000000178755600481015461218e906001600160a01b031683615804565b8954604051929492937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692906121cc866130d8565b6001600160a01b0390811680875296166020860181905262ffffff8316604087015260189290921c60020b60608601526080850183905215612766578990889b5b6001600160801b0383118015612756575b612747576001600160a01b036122348e85615825565b16936401000276a38511801590612729575b61271a5760405163313b65df60e11b815260208160c4818e61226b600483018e61379c565b60a482018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015612658576126e0575b508b8a52600d60205260408a209561ffff604051976122c7896130d8565b5460018060a01b0381168952818160a01c1660208a0152818160b01c1660408a0152818160c01c1660608a015260d01c1660808801526004602060018060a01b03600384015416926001808060a01b039101541660405192838092633cd1fb8f60e01b82525afa9081156126d5578c91612697575b50835491833b156125e857898f948e949060ff8692612375966101e4966040519a8b998a9863082a822960e31b8a5260048a019061379c565b60a488015260c48701526001600160a01b031660e4860152603081901c61ffff1661010486015260401c1615156101248401526123b661014484018d613033565b5af1801561268c57908a91612677575b50505460181c60020b9586156126635760209b9c6123f96123ed8980620d89e719056158c0565b9880620d89e8056158c0565b604051631d5e528f60e21b81529d9094908e6004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9d8e15612658578b9e612624575b508a836126075750805b846125ec575081955b60025497516001600160a01b03988916981695883b156125e857918c9998979593918f9795936040519c8d9b8c9a630cbba19160e41b8c5260048c015260248b016124a59161379c565b60020b60c48a015260020b60e48901526101048801526101248701526101448601526101648501526101848401526101a48301525a926101c493f180156125dd579083916125c8575b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b15610f9657604051631496ab9960e11b81526001600160a01b03919091166004820152602481018690529082908290604490829084905af1801561125f576125b3575b505060606020947f0a44ef75df69c534f43cd6c1aa3ef8983065fe5fe79ef9e79f6494e6f258c2599260405191868352878301526040820152a260015f516020615e435f395f51905f5255604051908152f35b6125be82809261310f565b6104b95780612560565b816125d29161310f565b61055e57815f6124ee565b6040513d85823e3d90fd5b8c80fd5b956126028360018060a01b036002541687615d24565b61245b565b60025461261f9083906001600160a01b031686615d24565b612452565b909d506020813d602011612650575b816126406020938361310f565b810103126103f057519c5f612448565b3d9150612633565b6040513d8d823e3d90fd5b634e487b7160e01b89526012600452602489fd5b816126819161310f565b6109e257885f6123c6565b6040513d8c823e3d90fd5b90506020813d6020116126cd575b816126b26020938361310f565b810103126126c9576126c390613291565b5f61233c565b8b80fd5b3d91506126a5565b6040513d8e823e3d90fd5b6020813d602011612712575b816126f96020938361310f565b8101031261270e57518060020b8103156122a9575b8a80fd5b3d91506126ec565b63582157bb60e01b8a5260048afd5b5073fffd8963efd1fc6a506488495d951d5263988d26851015612246565b632c37d0eb60e01b8952600489fd5b506001600160801b038d1161221e565b87908a9b61220d565b60405163095ea7b360e01b5f9081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048190526024849052949550929392602090604481808e5af19060015f511482161561295b575b604052156128a3575b813b156103f05760405163b8a0d7ab60e01b81526001600160a01b038716600482015260248101829052915f908390604490829084905af1918215612898578992612857575b5091869392917fa0a18f5bf205becee8b268d7cf69addab8548ae8ef361791464cf0e0e17c136160208694604051908152a290612153565b7fa0a18f5bf205becee8b268d7cf69addab8548ae8ef361791464cf0e0e17c13619750602094939192505f61288b9161310f565b885f97509190929361281f565b6040513d5f823e3d90fd5b8860205f604481806040519563095ea7b360e01b825288600452816024525af19060015f5114821615612943575b6040521561290f578860205f604481806040519563095ea7b360e01b825288600452876024525af19060015f5114821615612922575b6040526127d9575b88635274afe760e01b5f5260045260245ffd5b90600181151661293a578a3b15153d15161690612907565b503d5f823e3d90fd5b90600181151661293a578a3b15153d151616906128d1565b908a3b15153d151616906127d0565b63251976f560e21b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b630cbdb7b360e41b5f5260045ffd5b63d43cabc360e01b5f5260045ffd5b346103f0575f3660031901126103f057602060405162093a808152f35b346103f05760403660031901126103f0576129e1612fe2565b6129e9612ff8565b6001600160a01b0382165f908152600e60205260409020600a81015460ff161561298d5760038101546001600160a01b03163303612a2a57610019926134d4565b632e7e4e5160e21b5f5260045ffd5b346103f0575f3660031901126103f057602060ff600954166040519015158152f35b346103f05760203660031901126103f057600435612a7761331d565b6103e88111612ab1576020817f3e99ceb3e222d2214d53dacca902810db845f156f78152fdc076be628c4e9a4092600555604051908152a1005b63800c7e9160e01b5f5260045ffd5b346103f05760203660031901126103f0576004355f60c0604051612ae3816130bd565b8281528260208201528260408201528260608201528260808201528260a08201520152601054811015612b6d57612b1e61059660e092613130565b60c0604051918051835260208101516020840152604081015160408401526060810151606084015262ffffff608082015116608084015260a081015160020b60a08401520151151560c0820152f35b6368b42c5960e01b5f5260045ffd5b346103f05760203660031901126103f057612b95612fe2565b612b9d61331d565b612ba561349c565b6001600160a01b03165f908152600e60205260409020600a81015460ff161561298d576001015460408051635292058760e01b815291829060049082905f906001600160a01b03165af1801561289857612c0d575b60015f516020615e435f395f51905f5255005b612c2e9060403d604011612c34575b612c26818361310f565b81019061316d565b50612bfa565b503d612c1c565b346103f0575f3660031901126103f0576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346103f05760e03660031901126103f057612c9861331d565b6024356103e88111612e6f57600435670de0b6b3a76400008110612e605760016001607f1b038111612e5157604435908115612e4257606435908115612e335760a435918260020b918284141592836103f0575f811390811591612e24575b50612e15576084359562ffffff8716928388036103f05783612e0657612d1e828489613361565b60105496600160401b881015612df25760018801601055612d3e88613130565b939093612ddf57600494845560018401556002830155600382015501945062ffffff198554161784556103f057825460189190911b65ffffff0000001665ffffff0000001990911617825560c435918215158084036103f0576020935060ff60301b82549160301b169060ff60301b191617905560405190807fedd96c570c6e5ef9add0378e59df53579a283889dc5dab6440ef6eca2ee6c8ce5f80a28152f35b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b634292c38960e11b5f5260045ffd5b63013840ad60e51b5f5260045ffd5b935050617fff5f931387612cf7565b6315dc5eeb60e11b5f5260045ffd5b63056f5a9f60e31b5f5260045ffd5b63acb9fa2b60e01b5f5260045ffd5b63c0b4e37360e01b5f5260045ffd5b6313888a8960e21b5f5260045ffd5b346103f05760803660031901126103f057612e97612fe2565b602435906044356064359260ff8416928385036103f057612eb661331d565b6001600160a01b0381169485158015612fbd575b8015612fb5575b612fa65760068510612fa657612ef86103e8670de0b6b3a764000085620f424081046156db565b15612f97577f67d517ee0e305d608b8410ddef27bbd2ed964d843d9b936e84ea2ad1bd65e5d194612f2c82612f9294613379565b60ff6002604051612f3c816130a2565b86815260208101888152604082019485528a5f52600c60205260405f20915182555160018201550191511660ff198254161790556040519384938491604091949360ff9160608501968552602085015216910152565b0390a2005b6395e32dab60e01b5f5260045ffd5b630ec98c7960e31b5f5260045ffd5b508315612ed1565b508215612eca565b346103f0575f3660031901126103f05760206040516203f4808152f35b600435906001600160a01b03821682036103f057565b602435906001600160a01b03821682036103f057565b604435906001600160a01b03821682036103f057565b6024359081151582036103f057565b61ffff6080809260018060a01b038151168552826020820151166020860152826040820151166040860152826060820151166060860152015116910152565b9181601f840112156103f0578235916001600160401b0383116103f0576020808501948460051b0101116103f057565b606081019081106001600160401b03821117612df257604052565b60e081019081106001600160401b03821117612df257604052565b60a081019081106001600160401b03821117612df257604052565b6101e081019081106001600160401b03821117612df257604052565b90601f801991011681019081106001600160401b03821117612df257604052565b60105481101561314c5760105f52600560205f20910201905f90565b634e487b7160e01b5f52603260045260245ffd5b3580151581036103f05790565b91908260409103126103f0576020825192015190565b90604051613190816130bd565b60c060ff6004839580548552600181015460208601526002810154604086015260038101546060860152015462ffffff811660808501528060181c60020b60a085015260301c161515910152565b60ff600954169081156131ef575090565b6001600160a01b03165f908152600a602052604090205460ff16919050565b908160209103126103f0575180151581036103f05790565b9190820180921161323357565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038111612df257601f01601f191660200190565b3d1561328c573d9061327382613247565b91613281604051938461310f565b82523d5f602084013e565b606090565b51906001600160a01b03821682036103f057565b519061ffff821682036103f057565b908160a09103126103f0576133156080604051926132d1846130d8565b6132da81613291565b84526132e8602082016132a5565b60208501526132f9604082016132a5565b604085015261330a606082016132a5565b6060850152016132a5565b608082015290565b5f546001600160a01b0316330361333057565b63118cdaa760e01b5f523360045260245ffd5b811561334d570490565b634e487b7160e01b5f52601260045260245ffd5b906133729291620f424081046156db565b15612f9757565b90813b1561341a5760405163313ce56760e01b815291602090839060049082906001600160a01b03165afa5f92816133dc575b506133b5575050565b60ff91821691168082036133c7575050565b634e3de34f60e01b5f5260045260245260445ffd5b9092506020813d602011613412575b816133f86020938361310f565b810103126103f0575160ff811681036103f057915f6133ac565b3d91506133eb565b5050565b60405163313ce56760e01b81529190602090839060049082906001600160a01b03165afa5f928161345e575b506133b55763721e0a6560e11b5f5260045ffd5b9092506020813d602011613494575b8161347a6020938361310f565b810103126103f0575160ff811681036103f057915f61344a565b3d915061346d565b60025f516020615e435f395f51905f5254146134c55760025f516020615e435f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b6001600160a01b038316925f919084156136cc576003840180546001600160a01b03198116871790915560068501546001600160a01b0391909116949060481c60ff16600481101561297957600203613674577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169061355c908461551f565b813b1561099557849160448392604051948593849263ed8ef7a360e01b845260048401528b60248401525af1801561366957908491613654575b50505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b1561099957604051635ad7fc1760e01b81526001600160a01b0384811660048301529190911660248201529083908290604490829084905af180156125dd5790839161363f575b50506001600160a01b0316907f308c390ed1ab5873392818e036cabdf408bc8ad042fbaead3108954ff75ba9809080a4565b816136499161310f565b61055e57815f61360d565b8161365e9161310f565b610f9657825f613596565b6040513d86823e3d90fd5b600101546001600160a01b0316803b156103f0575f8091602460405180948193633d82753160e11b83528b60048401525af18015612898576136b7575b50613599565b6136c49193505f9061310f565b5f915f6136b1565b63d92e233d60e01b5f5260045ffd5b91926136e8908483615768565b9160018060a01b037f000000000000000000000000000000000000000000000000000000000000000016906006600484015493015460181c60020b92823b156103f05760405163bcebea9f60e01b81526001600160a01b0392831660048201529116602482015260029290920b604483015260648201939093526084810191909152905f90829060a49082905afa8015612898576137835750565b5f61378d9161310f565b565b9190820391821161323357565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b6001600160a01b03165f818152600f602052604090819020905190613803826130a2565b80546001600160a01b03168083526001820154602084015260029091015460408301521561387957815f52600f6020525f600260408220828155826001820155015560018060a01b03905116907fbe2de91c1cbef653c760573fff8355c0c851d35ed2a898342b4db556301cccf45f80a3600190565b50505f90565b5f93831580156139df575b61399e57600183015460405163315fab7f60e21b81529190602090839060049082906001600160a01b03165afa9182156128985785905f936139a7575b506138d56138db9382613226565b916159e4565b91821561399e57600481015460069091015460181c60020b916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116921690823b156103f05760405163bcebea9f60e01b81526001600160a01b0391821660048201529116602482015260029290920b604483015260648201939093526084810191909152905f90829060a49082905afa9081613989575b506139835790565b50600190565b6139969192505f9061310f565b5f905f61397b565b50505050505f90565b9250506020823d6020116139d7575b816139c36020938361310f565b810103126103f057905190846138d56138c7565b3d91506139b6565b50801561388a565b91905f91600482016040613a0360018060a01b03835416615a64565b81516001629272fb60e01b0319815230600482015295909386916024918391906001600160a01b03165af1938415612898575f94613ad7575b5054613a5a9190613a55906001600160a01b0316615a64565b61378f565b928315613ac8577fcdb72f157fd3666758a6ce201387ffb52038c7562e4fff352828da1096c4b6b492600683866007604096015582600882015542600982015501690100000000000000000060ff60481b198254161790558251948552602085015260018060a01b031692a2565b636103a62360e11b5f5260045ffd5b613a5a92919450613af9613a559160403d604011612c3457612c26818361310f565b905094919250613a3c565b903590601e19813603018212156103f057018035906001600160401b0382116103f0576020019181360383136103f057565b3561ffff811681036103f05790565b356001600160a01b03811681036103f05790565b929192613b6582613247565b91613b73604051938461310f565b8294818452818301116103f0578281602093845f960137010152565b9080601f830112156103f057816020613baa93359101613b59565b90565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b610280526101e052610200526101c0526003546101608190525f610220526001600160a01b031615615474576002546001600160a01b03168015614e715760405163c45a015560e01b815261016051602090829060049082906001600160a01b03165afa908115612898575f9161543a575b506001600160a01b031630148015906153c9575b614e715760405163c45a015560e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f9161538f575b506001600160a01b031630148015906152c9575b614e715760405163c45a015560e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f9161528f575b506001600160a01b031630148015906151f5575b614e715760405163dc4c90d360e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f916151b3575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116911614801590615110575b614e715760405163104b120760e31b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f916150ce575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161480159061501b575b614e7157604051631e46e62f60e21b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa908115612898575f91614fe1575b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116819003614e7157604051631e46e62f60e21b8152602081600481875afa908115612898575f91614f9f575b506001600160a01b03161480159290614eff575b8215614e80575b5050614e7157613f0c6101c0516131de565b15614e62576008543403614e53576010546101e0511015612b6d57613f376102805161028051613b04565b9050158015614e37575b614e2857613f5460c06102805101613b36565b61ffff600554911611614e1957610200516001600160a01b0316158015908180614df4575b614de557613f8c6105966101e051613130565b61024052604051631134d37b60e31b815260a0816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015612898575f61018052614dc3575b505f6101a05215614d975760406102405101519060606102405101516101a0525b614d68575b61401a6101a05182610180516102405161561e565b61010061028051013580151580614d5e575b614d4957505060c061024051015115614d3a576107d0614066602061024051015161ffff61405f60c06102805101613b36565b1690613226565b11614d2b5761ffff60606101805101511661ffff61408960c06102805101613b36565b160161ffff81116132335761ffff6107d0911611614d2b5761024051516140d760a061024051015160020b916140c26101a05185613226565b906140d282866101a051936159e4565b6159e4565b908115614d1c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691823b156103f05760645f926040519485938492636de06dc960e01b845260048401526101a051602484015260448301525afa801561289857614d07575b506102805160a0016001600160a01b0361415f82613b45565b610220516102605216614cf557506101c051610260525b60206102405101519061418e60c06102805101613b36565b9161419e60e06102805101613160565b61024051516141b36102805161028051613b04565b9190926141c96020610280510161028051613b04565b9060a052956141e16040610280510161028051613b04565b60c0526080526141fa6060610280510161028051613b04565b60e05261010052608061028051013561012052609e1961028051360301610120511215614c47576040516101408190526001600160401b036102608201908111911117614cdb57614396976143839661ffff92610260610140510160405260018060a01b036102005116610140515260018060a01b036102605116602061014051015260018060a01b036101c05116604061014051015260018060a01b037f000000000000000000000000000000000000000000000000000000000000000016606061014051015261018051608061014051015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660a061014051015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660c061014051015260e0610140510152610100610140510152166101206101405101521515610140805101526101a0516101606101405101526101806101405101526101206102805101356101a06101405101523691613b59565b6101c0610140510152369060a051613b59565b6101e06101405101526143ae3660c051608051613b59565b6102006101405101526143c73660e05161010051613b59565b61022061014051015260a0610120516102805101360312614c47576040516143ee816130d8565b6001600160401b036101205161028051013511614c4757610120516102805161441c91369101803501613b8f565b81526001600160401b036020610120516102805101013511614c4757610120516102805161445291369101602081013501613b8f565b60208201526001600160401b036040610120516102805101013511614c4757610120516102805161448b91369101604081013501613b8f565b60408201526001600160401b036060610120516102805101013511614c475761012051610280516144c491369101606081013501613b8f565b60608201526001600160401b036080610120516102805101013511614c475761012051610280516144fd91369101608081013501613b8f565b6080820152610240610140510152604051906378b9895560e01b82526020600483015260018060a01b03610140515116602483015260018060a01b03602061014051015116604483015260018060a01b03604061014051015116606483015260018060a01b036060610140510151166084830152614586608061014051015160a4840190613033565b60018060a01b0360a06101405101511661014483015260018060a01b0360c06101405101511661016483015260e06101405101516101848301526101006101405101516101a48301526101206101405101516101c48301526101408051015115156101e48301526101606101405101516102048301526101806101405101516102248301526101a06101405101516102448301526040828061471561469b61468061466561464a6101c06101405101516102e0610264880152610304870190613bad565b610140516101e0015186820360231901610284880152613bad565b610140516102000151858203602319016102a4870152613bad565b610140516102200151848203602319016102c4860152613bad565b61024061014051015190602319848203016102e485015260806147046146f26146e26146d0865160a0875260a0870190613bad565b60208701518682036020880152613bad565b898601518582038b870152613bad565b60608501518482036060860152613bad565b920151906080818403910152613bad565b03816102205160018060a01b0361016051165af1908115614c4e5761022051928392614c92575b5081836001600160a01b0382163b15614c475760405163189acdbd60e31b81526001600160a01b038281166004830152610220519082906024908290849088165af18015614c4e57614c77575b506001600160a01b0382163b15614c47576040516318ffbf9160e11b81526101c0516001600160a01b039081166004830152610220519082906024908290849088165af18015614c4e57614c5c575b506101c051610260516001600160a01b03918216911603614bd8575b610240516080015162ffffff166102405160a0015160020b6102805160c00161481c90613b36565b836102805160e00161482d90613160565b6040519061483a826130f3565b600160a01b60019003831682526020820194600160a01b60019003891686526040830191600160a01b600190036101c0511683526060840195600160a01b60019003610260511687526080850192600160a01b600190036102005116845260a086016101a051815260c087019a8b5260e0870191825261010087019261ffff16835261012087019315158452610140870194610220518652610160880199610220518b526101808901976102205189526101a08a0199610220518b526101c081019b60018d52600160a01b60019003166102205152600e60205261022051604090209d8e91600160a01b6001900390600160a01b60019003905116166001600160601b0360a01b835416178255600160a01b600190039051169060010190600160a01b60019003166001600160601b0360a01b825416179055600160a01b6001900390511660028d0190600160a01b60019003166001600160601b0360a01b825416179055600160a01b6001900390511660038c0190600160a01b60019003166001600160601b0360a01b825416179055600160a01b6001900390511660048b0190600160a01b60019003166001600160601b0360a01b8254161790555160058a015560068901995162ffffff1662ffffff1662ffffff198b5416178a555160020b614a3f908a9081549060181b65ffffff000000169065ffffff0000001916179055565b518854915168ffffff0000000000001990921667ffff00000000000060309290921b919091161790151560401b60ff60401b1617875551936004851015614bbe57614ac696600a9560ff60481b82549160481b169060ff60481b191617905551600786015551600885015551600984015551151591019060ff801983541691151516179055565b61022080516001600160a01b03838116909152600d602090815291516040908190206101805180518254958201519382015160608301516080909301516001600160e01b0319909716919095161760a09390931b61ffff60a01b169290921760b09390931b61ffff60b01b169290921760c09190911b61ffff60c01b161760d09290921b61ffff60d01b16919091179055614b5f615af4565b604080516101c0516101a0516101e051610200516001600160a01b039081168552602085019190915293830152821693821692909116907f8d4aad4953d0ca700d468f3753aa14432d1b35b43ec6409f051fb6aa43a8960790606090a4565b634e487b7160e01b61022051526021600452602461022051fd5b6001600160a01b0382163b15614c47576040516318ffbf9160e11b8152610260516001600160a01b039081166004830152610220519082906024908290849088165af18015614c4e57614c2c575b506147f4565b61022051614c399161310f565b61022051614c47575f614c26565b6102205180fd5b6040513d61022051823e3d90fd5b61022051614c699161310f565b61022051614c47575f6147d8565b61022051614c849161310f565b61022051614c47575f614789565b925090506040823d604011614cd3575b81614caf6040938361310f565b81010312614c4757614ccc6020614cc584613291565b9301613291565b905f61473c565b3d9150614ca2565b634e487b7160e01b61022051526041600452602461022051fd5b614cfe90613b45565b61026052614176565b5f614d119161310f565b5f610220525f614146565b632c37d0eb60e01b5f5260045ffd5b6349e55bcb60e01b5f5260045ffd5b63545b183b60e11b5f5260045ffd5b63ecb2731960e01b5f5260045260245260445ffd5b508181141561402c565b60018060a01b0361020051165f52600c602052614d9260ff600260405f200154166102005161341e565b614005565b610200516001600160a01b03165f908152600c6020526040902080546001909101546101a05290614000565b614ddb9060a03d60a01161064857610639818361310f565b610180525f613fdf565b6349285dfb60e01b5f5260045ffd5b50610200516001600160a01b03165f908152600b602052604090205460ff1615613f79565b6326b5197760e21b5f5260045ffd5b631ba4296560e11b5f5260045ffd5b50614e4b6020610280510161028051613b04565b905015613f41565b637e6d78a560e01b5f5260045ffd5b630b094f2760e31b5f5260045ffd5b631de25df360e01b5f5260045ffd5b604051636bdcb6a760e11b8152919250602090829060049082905afa908115612898575f91614ebd575b506001600160a01b031614155f80613efa565b90506020813d602011614ef7575b81614ed86020938361310f565b810103126103f057516001600160a01b03811681036103f0575f614eaa565b3d9150614ecb565b6040516312261ee760e01b8152909250602081600481865afa908115612898575f91614f5d575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116141591613ef3565b90506020813d602011614f97575b81614f786020938361310f565b810103126103f057516001600160a01b03811681036103f0575f614f26565b3d9150614f6b565b90506020813d602011614fd9575b81614fba6020938361310f565b810103126103f057516001600160a01b03811681036103f0575f613edf565b3d9150614fad565b90506020813d602011615013575b81614ffc6020938361310f565b810103126103f05761500d90613291565b5f613e86565b3d9150614fef565b5060405163c4b7de9760e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f9161509f575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415613e33565b6150c1915060203d6020116150c7575b6150b9818361310f565b810190615ad5565b5f615069565b503d6150af565b90506020813d602011615108575b816150e96020938361310f565b810103126103f057516001600160a01b03811681036103f0575f613dfb565b3d91506150dc565b5060405163c4b7de9760e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f91615194575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415613daa565b6151ad915060203d6020116150c7576150b9818361310f565b5f61515e565b90506020813d6020116151ed575b816151ce6020938361310f565b810103126103f057516001600160a01b03811681036103f0575f613d72565b3d91506151c1565b5060405163c45a015560e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f91615255575b506001600160a01b0316301415613d21565b90506020813d602011615287575b816152706020938361310f565b810103126103f05761528190613291565b5f615243565b3d9150615263565b90506020813d6020116152c1575b816152aa6020938361310f565b810103126103f0576152bb90613291565b5f613d0d565b3d915061529d565b5060405163f1f5c99360e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f9161534d575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415613cbc565b90506020813d602011615387575b816153686020938361310f565b810103126103f057516001600160a01b03811681036103f0575f615317565b3d915061535b565b90506020813d6020116153c1575b816153aa6020938361310f565b810103126103f0576153bb90613291565b5f613ca8565b3d915061539d565b5060405163c45a015560e01b8152602081600481855afa908115612898575f91615400575b506001600160a01b0316301415613c57565b90506020813d602011615432575b8161541b6020938361310f565b810103126103f05761542c90613291565b5f6153ee565b3d915061540e565b90506020813d60201161546c575b816154556020938361310f565b810103126103f05761546690613291565b5f613c43565b3d9150615448565b6357332dcf60e01b5f5260045ffd5b909260208311615510575f5b83811015615509576001600160a01b038316906154b1600582901b8701613b45565b823b156103f0576040516318ffbf9160e11b81526001600160a01b039091166004820152915f908390602490829084905af1918215612898576001926154f9575b500161548f565b5f6155039161310f565b5f6154f2565b5092505050565b63021c0d4360e01b5f5260045ffd5b90600661553a60a093600180861b0360048501541690615804565b509190920154906040519261554e846130d8565b5f196001861b019081168452908116602084015262ffffff8216604084015260189190911c60020b60608301527f00000000000000000000000000000000000000000000000000000000000000001660808201522090565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f5114821615615606575b604052156155e65750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b90600181151661293a57823b15153d151616906155db565b9092919281519160208101519160a062ffffff60808401511692015160020b61ffff60208301511661ffff6040840151169061ffff6060850151169261ffff6080860151169460018060a01b039051169560065497600754996040519b60208d019d8e5260408d015260608c015260808b015260a08a015260c089015260e08801526101008701526101208601526101408501526101608401526101808301526101a08201526101a081526156d56101c08261310f565b51902090565b90919281158015615760575b8015615758575b801561574c575b61574457612710039061271082116132335761571b9161571491615bbe565b9283615bbe565b90612710810290808204612710149015171561323357613baa9261573e91613226565b90613343565b505050505f90565b506127108110156156f5565b5083156156ee565b5082156156e7565b9190801580156157fc575b613ac85760019092015460405163315fab7f60e21b81529290602090849060049082906001600160a01b03165afa928315612898575f936157c6575b506138d56157bd9382613226565b908115613ac857565b92506020833d6020116157f4575b816157e16020938361310f565b810103126103f0579151916138d56157af565b3d91506157d4565b508115615773565b6001600160a01b03918216929116808310615820579190600190565b905f90565b90811580156158b8575b6158a95761583d8183615bd1565b61588e5761584b8183615d0f565b1561587f576158629161585d91615961565b615bed565b6001600160801b03811161587f5760201b6001600160a01b031690565b63375cdf9f60e21b5f5260045ffd5b6001600160a01b03916158a59161585d91906158d7565b1690565b631f2a200560e01b5f5260045ffd5b50801561582f565b9060020b9060020b02908160020b91820361323357565b9060c082901b905f19600160c01b8409928280851094039380850394858411156103f0571461595a578190600160c01b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b90608082901b905f19600160801b8409928280851094039380850394858411156103f0571461595a578190600160801b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b91818302915f19818509938380861095039480860395868511156103f05714615a5c579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b6001600160a01b031680615a7757504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115612898575f91615aa6575090565b90506020813d602011615acd575b81615ac16020938361310f565b810103126103f0575190565b3d9150615ab4565b908160209103126103f057516001600160a01b03811681036103f05790565b6008548015615bbb5760405163326f824f60e11b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f91615b81575b506001600160a01b031680156136cc575f80809381935af1615b6a613262565b5015615b7257565b634033e4e360e01b5f5260045ffd5b90506020813d602011615bb3575b81615b9c6020938361310f565b810103126103f057615bad90613291565b5f615b4a565b3d9150615b8f565b50565b8181029291811591840414171561323357565b6001600160c01b038111615be65760401b1190565b5050600190565b6001811115613baa57806001600160801b821015615cfe575b600482600160401b615cb0941015615cf1575b640100000000811015615ce4575b62010000811015615cd7575b610100811015615ccb575b6010811015615cbf575b1015615cb7575b60030260011c615c5f8184613343565b0160011c615c6d8184613343565b0160011c615c7b8184613343565b0160011c615c898184613343565b0160011c615c978184613343565b0160011c615ca58184613343565b0160011c8092613343565b8111900390565b60011b615c4f565b811c9160021b91615c48565b60081c91811b91615c3e565b60101c9160081b91615c33565b60201c9160101b91615c27565b60401c9160201b91615c19565b5050608081901c600160401b615c06565b6001600160801b038111615be65760801b1190565b6040516370a0823160e01b81526001600160a01b03808416600483018190529216939290602081602481885afa9081156128985784905f92615e0c575b50615d6d9192866155a6565b604051916370a0823160e01b83526004830152602082602481875afa918215612898575f92615dd8575b5080821115615dcf57615da99161378f565b915b818303615db757505050565b6324ad4cb160e11b5f5260045260245260445260645ffd5b50505f91615dab565b9091506020813d602011615e04575b81615df46020938361310f565b810103126103f05751905f615d97565b3d9150615de7565b9150506020813d602011615e3a575b81615e286020938361310f565b810103126103f0575183615d6d615d61565b3d9150615e1b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212209dd348acd856c2bdb1ce457d4b49082bc7d64687a431288b628994622beb511764736f6c6343000823003360808060405234601557610b50908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80636de06dc9146100e05763bcebea9f1461002f575f80fd5b346100dc5760a03660031901126100dc576004356001600160a01b038116908190036100dc576024356001600160a01b03811691908290036100dc57604435908160020b82036100dc5760643560843591801580156100cc575b80156100bc575b6100ad576100a59410156100a757909161013d565b005b9161013d565b632c37d0eb60e01b5f5260045ffd5b5060016001607f1b038311610090565b5060016001607f1b038211610089565b5f80fd5b346100dc5760603660031901126100dc576004358060020b81036100dc5760243560443560016001607f1b038211801561012d575b6100ad578261012882846100a59661013d565b61013d565b5060016001607f1b038111610115565b91909161014a82846102c4565b6001600160a01b0381166401000276a381118015906102a6575b610297578260020b948515610283576001600160801b039286620d89e719059561018e868861035f565b906101b16101ab6101a58b620d89e805998a61035f565b9361038a565b9261038a565b9283836001600160a01b0380831690821611610278575b50506001600160a01b03831686116102255750506101e69350610aaa565b169081159283156101fd575b50505090506100ad57565b6001600160801b0393505f60019395620d89e7190712900390030181041610805f80806101f2565b919490939192906001600160a01b038216111561026c57829161024c916102529594610aaa565b93610a70565b808316828416101561026557505b6101e6565b90506101e6565b91505061026092610a70565b945092505f806101c8565b634e487b7160e01b5f52601260045260245ffd5b63582157bb60e01b5f5260045ffd5b5073fffd8963efd1fc6a506488495d951d5263988d26811015610164565b9081158015610357575b610348576102dc81836106b7565b61032d576102ea8183610a5b565b1561031e57610301916102fc9161075d565b610936565b6001600160801b03811161031e5760201b6001600160a01b031690565b63375cdf9f60e21b5f5260045ffd5b6001600160a01b0391610344916102fc91906106d3565b1690565b631f2a200560e01b5f5260045ffd5b5080156102ce565b9060020b9060020b02908160020b91820361037657565b634e487b7160e01b5f52601160045260245ffd5b60020b908160ff1d82810118620d89e881116106a45763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116610688575b6004811661066c575b60088116610650575b60108116610634575b60208116610618575b604081166105fc575b608081166105e0575b61010081166105c4575b61020081166105a8575b610400811661058c575b6108008116610570575b6110008116610554575b6120008116610538575b614000811661051c575b6180008116610500575b6201000081166104e4575b6202000081166104c9575b6204000081166104ae575b6208000016610495575b5f1261048d575b0160201c90565b5f1904610486565b6b048a170391f7dc42444e8fa290910260801c9061047f565b6d2216e584f5fa1ea926041bedfe9890920260801c91610475565b916e5d6af8dedb81196699c329225ee6040260801c9161046a565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161045f565b916f31be135f97d08fd981231505542fcfa60260801c91610454565b916f70d869a156d2a1b890bb3df62baf32f70260801c9161044a565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91610440565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91610436565b916fe7159475a2c29b7443b29c7fa6e889d90260801c9161042c565b916ff3392b0822b70005940c7a398e4b70f30260801c91610422565b916ff987a7253ac413176f2b074cf7815e540260801c91610418565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161040e565b916ffe5dee046a99a2a811c461f1969c30530260801c91610404565b916fff2ea16466c96a3843ec78b326b528610260801c916103fb565b916fff973b41fa98c081472e6896dfb254c00260801c916103f2565b916fffcb9843d60f6159c9db58835c9266440260801c916103e9565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916103e0565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916103d7565b916ffff97272373d413259a46990580e213a0260801c916103ce565b826345c3193d60e11b5f5260045260245ffd5b6001600160c01b0381116106cc5760401b1190565b5050600190565b9060c082901b905f19600160c01b8409928280851094039380850394858411156100dc5714610756578190600160c01b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b90608082901b905f19600160801b8409928280851094039380850394858411156100dc5714610756578190600160801b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b90606082901b905f19600160601b8409928280851094039380850394858411156100dc5714610756578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b81810291905f1982820991838084109303928084039384600160601b11156100dc57146108a357600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f19818509938380861095039480860395868511156100dc5714610924579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b8115610283570490565b6001811115610a5857806001600160801b821015610a47575b600482600160401b6109f9941015610a3a575b640100000000811015610a2d575b62010000811015610a20575b610100811015610a14575b6010811015610a08575b1015610a00575b60030260011c6109a8818461092c565b0160011c6109b6818461092c565b0160011c6109c4818461092c565b0160011c6109d2818461092c565b0160011c6109e0818461092c565b0160011c6109ee818461092c565b0160011c809261092c565b8111900390565b60011b610998565b811c9160021b91610991565b60081c91811b91610987565b60101c9160081b9161097c565b60201c9160101b91610970565b60401c9160201b91610962565b5050608081901c600160401b61094f565b90565b6001600160801b0381116106cc5760801b1190565b610a5892610a9f9290916001600160a01b0380831690821611610aa4575b90036001600160a01b0316906107e0565b610af7565b90610a8e565b610a5892610a9f929091906001600160a01b0380821690831611610af1575b610adf6001600160a01b03828116908416610863565b9190036001600160a01b0316916108ac565b90610ac9565b906001600160801b038216809203610b0b57565b6393dafdf160e01b5f5260045ffdfea264697066735822122081e2231b13e1746a95e27b586bbd17bffe4b8ca7542ef9809af596a98c84f4ee64736f6c63430008230033",
      "runtime": "0x6102a0604052600436101561001b575b3615610019575f80fd5b005b5f5f3560e01c806302d4753d14612fc5578063092c08bd14612e7e5780630e5b0aae14612c7f57806312261ee714612c3b578063189eb0f514612b7c5780631cad862d14612ac05780632260aead14612a5b578063236a4afb14612a395780632931861b146129c85780632d1250b8146129ab5780632f53ef2f146120a85780633108213414612046578063366f0f3e14611fc75780633a9391e814611f435780633cf28b5a14611cbf5780633d3d2d5814611bcb578063470ef5fc14611b26578063496aa10014611ae157806350e25ac214611ac35780635313be2c14611a7557806358373f0414611a475780635a83b00a14611a425780636651812c146119fd5780636783774b146119df5780636e47a1881461199e578063715018a61461197e578063767b7c16146118fc578063791b98bc146118b757806379ba5097146118375780637aed273e14611620578063858f5964146115f75780638763e3dc146114b75780638da5cb5b146114905780639831705e146114515780639b924452146114285780639beacf4a146113c8578063a72101af1461135f578063ae72d87114611341578063b18f1db11461111d578063b20e51af1461109b578063c4b7de9714611056578063cc6d7a391461102d578063cf3cf5731461100f578063d1ec471a14610f9a578063d6a0eef514610eb4578063d7b96d4e14610e6f578063da3eda6514610e30578063dbcb9c7614610c04578063dc4c90d314610bbf578063e102c9aa14610a69578063e30c397814610a40578063e73e334a14610838578063f1f5c993146107f3578063f2fde38b14610786578063f325a5fb14610768578063f35abbcf146106e5578063f56f05b214610681578063f718b78c14610562578063fbec2d8b146104bc5763ff6d8d05146102ba575061000f565b346104b95760203660031901126104b9576102d3612fe2565b6102db61349c565b6001600160a01b0381168252600e60205260408220600a81015460ff16156104aa5760ff600682015460481c1660048110156104965761048757600181015460405163c68360a560e01b81526001600160a01b039091169190602081600481865afa90811561043b578591610458575b501561044657604051634f1f58fd60e01b815292602084600481865afa93841561043b578594610407575b5060405163cbcb317160e01b8152602081600481875afa9081156103fc5786916103c4575b506103ab906103b09584846136db565b6139e7565b60015f516020615e435f395f51905f525580f35b90506020813d6020116103f4575b816103df6020938361310f565b810103126103f057516103b061039b565b5f80fd5b3d91506103d2565b6040513d88823e3d90fd5b9093506020813d602011610433575b816104236020938361310f565b810103126103f05751925f610376565b3d9150610416565b6040513d87823e3d90fd5b6001620b9b5560e31b03198452600484fd5b61047a915060203d602011610480575b610472818361310f565b81019061320e565b5f61034b565b503d610468565b63251976f560e21b8352600483fd5b634e487b7160e01b84526021600452602484fd5b630cbdb7b360e41b8352600483fd5b80fd5b50346104b95760203660031901126104b9576004356001600160a01b0381169081900361055e576104eb61331d565b6002546001600160a01b03811661054f578115610540576001600160a01b03191681176002556040519081527fac04674474e93058fae25e6df5dd94f57cdcacfe560a182a2eefc8c6006fbf6f90602090a180f35b63d92e233d60e01b8352600483fd5b63a741a04560e01b8352600483fd5b5080fd5b50346104b95760403660031901126104b95760043561057f612ff8565b906010548110156106725761059661059c91613130565b50613183565b906001600160a01b03168061064f575060408101516060820151915b604051631134d37b60e31b81529060a0826004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa91821561043b5790610616949392916020969261061e575b5061561e565b604051908152f35b61064191925060a03d60a011610648575b610639818361310f565b8101906132b4565b905f610610565b503d61062f565b808352600c6020526040832054908352600c6020526001604084200154916105b8565b6368b42c5960e01b8352600483fd5b50346104b95760203660031901126104b95760043580151580910361055e5760207f4f1ea5016c51c2f82324e00e9b8a4a95ee5aeaa10c653dabaec5f1bc9047ba0b916106cc61331d565b60ff196009541660ff821617600955604051908152a180f35b5060603660031901126104b9576004356001600160401b03811161055e57610140600319823603011261055e576107349061071e61300e565b61072661349c565b339160243590600401613bd1565b60015f516020615e435f395f51905f5255604080516001600160a01b039384168152929091166020830152819081015b0390f35b50346104b957806003193601126104b9576020600554604051908152f35b50346104b95760203660031901126104b9576107a0612fe2565b6107a861331d565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346104b9576101003660031901126104b95760043560e036602319011261055e5761086261331d565b601054811015610a31576044356103e88111610a2257602435670de0b6b3a76400008110610a135760016001607f1b038111610a04576064359182156109f5576084359081156109e65760c435928360020b928385141593846109e257888113908115916109d3575b506109c45760a4359562ffffff8716938488036109c057846109b1576108f2818584613361565b6108fb89613130565b94909461099d578455600184015560028301556003820155600401805462ffffff1916919091178155925061099957815460189190911b65ffffff0000001665ffffff0000001990911617815560e43580151590818103610995575060ff60301b82549160301b169060ff60301b19161790557f2f8ba78ae68cfd0c82c7756c540eaf4eead3341aef9ccebcb91d546bff10d62b8280a280f35b8480fd5b8380fd5b634e487b7160e01b8b5260048b905260248bfd5b634292c38960e11b8a5260048afd5b8980fd5b63013840ad60e51b8852600488fd5b945050617fff5f94135f6108cb565b8880fd5b6315dc5eeb60e11b8652600486fd5b63056f5a9f60e31b8552600485fd5b63acb9fa2b60e01b8452600484fd5b63c0b4e37360e01b8452600484fd5b6313888a8960e21b8352600483fd5b6368b42c5960e01b8252600482fd5b50346104b957806003193601126104b9576001546040516001600160a01b039091168152602090f35b50346104b95760403660031901126104b957610a83612fe2565b610a8b612ff8565b90610a9461331d565b6001600160a01b0316808352600e60205260408320600a8101549192909160ff1615610bb0576001600160a01b0316918215610ba1576203f4804201804211610b8d576207e900420192838211610b79577f7f119e44c84a715429bee60d30ad2e14afdef6c60bb1a7eaa01290ecf6d1b2e5916040918251610b15816130a2565b8781526020808201848152858301898152888c52600f8352868c20935184546001600160a01b0319166001600160a01b039182161785559151600185015551600293909301929092556003929092015484519384529183019690965290941693a480f35b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b85526011600452602485fd5b63d92e233d60e01b8452600484fd5b630cbdb7b360e41b8452600484fd5b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346104b95760403660031901126104b957610c1e612fe2565b610c26612ff8565b90610c2f61331d565b610c3761349c565b6001600160a01b0316808352600e60205260408320600a81015460ff1615610bb057600681019060ff825460481c166004811015610e1c57600103610e0d576001600160a01b038416938415610dfe576009820192835462093a808101809111610dea57804210610dd85750600783018054600885018054600490960154928a905589905594889055815460ff60481b19166903000000000000000000179091556001600160a01b031683610d47575b5091817f7017304fdd491394686dce984eac721f0be1a22228346210f16694772bde44ca9381604094610d36575b505082519182526020820152a360015f516020615e435f395f51905f525580f35b610d4091876155a6565b5f81610d15565b80610da257508580808086895af1610d5d613262565b5015610d9357916040917f7017304fdd491394686dce984eac721f0be1a22228346210f16694772bde44ca935b91935091610ce7565b634033e4e360e01b8652600486fd5b9181610dd3857f7017304fdd491394686dce984eac721f0be1a22228346210f16694772bde44ca96946040966155a6565b610d8a565b63bdcd75af60e01b8852600452602487fd5b634e487b7160e01b88526011600452602488fd5b63d92e233d60e01b8652600486fd5b63251976f560e21b8552600485fd5b634e487b7160e01b86526021600452602486fd5b50346104b95760203660031901126104b95760209060ff906040906001600160a01b03610e5b612fe2565b168152600a84522054166040519015158152f35b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5060a03660031901126104b957600435906001600160401b0382116104b95761014060031983360301126104b957610eea61300e565b606435906001600160a01b0382168203610f96576084356001600160401b03811161099957610f1d903690600401613072565b949093610f2861349c565b6004546001600160a01b03163303610f87575091610f5091610f599360243590600401613bd1565b93909284615483565b60015f516020615e435f395f51905f5255604080516001600160a01b03928316815292909116602083015290f35b63754f554b60e11b8152600490fd5b8280fd5b50346104b95760203660031901126104b957600435610fb761331d565b80158015611005575b610ff6576020817f2b1bf8cf5a401a6dd314ae29520988783e31f0e50ec734aa9ef26b8b7ff24a1f92600755604051908152a180f35b63d9521a8560e01b8252600482fd5b50603c8111610fc0565b50346104b957806003193601126104b9576020600854604051908152f35b50346104b957806003193601126104b9576002546040516001600160a01b039091168152602090f35b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346104b95760203660031901126104b9576004356110b861331d565b80151580611106575b6110f7576020817f82d0fc041b26338f6e9cc240adde9cbe5b20064b4cb39ab96c953d5643687b1e92600655604051908152a180f35b63800c7e9160e01b8252600482fd5b506107d0811115806110c157506126ac81116110c1565b50346104b95760403660031901126104b957611137612fe2565b61113f613024565b6001600160a01b038216808452600e60205260408420600a8101549293919260ff16156113325760038101548554336001600160a01b03928316811415928392161481611329575b5061131a57849081611312575b506113035760068101805468ff0000000000000000191685151560401b60ff60401b1617815560ff905460481c166004811015610e1c57859291908061126a5750600101546001600160a01b03169050803b1561055e57818091602460405180948193639a9b567d60e01b835289151560048401525af1801561125f5761124a575b50505b60405191151582527fbd886f85b7731f66269f57707414d435bf8df930d3357a10becc48a69377f6d560203393a380f35b816112549161310f565b610f9657825f611216565b6040513d84823e3d90fd5b60021461127a575b505050611219565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916112af919061551f565b813b15610f96578291604483926040519485938492632ce8b02960e01b8452600484015289151560248401525af1801561125f576112ee575b80611272565b816112f89161310f565b610f9657825f6112e8565b631bbefe4d60e11b8552600485fd5b90505f611194565b631bbefe4d60e11b8652600486fd5b9050155f611187565b630cbdb7b360e41b8552600485fd5b50346104b957806003193601126104b9576020601054604051908152f35b5060803660031901126104b957600435906001600160401b0382116104b95761014060031983360301126104b95761139561300e565b90606435906001600160401b0382116104b95750610f506113bd610f59923690600401613072565b94909361072661349c565b50346104b95760203660031901126104b9576040906001600160a01b036113ed612fe2565b168152600f602090815291902080546001820154600290920154604080516001600160a01b0390931683529382019290925291820152606090f35b50346104b957806003193601126104b9576004546040516001600160a01b039091168152602090f35b50346104b95760203660031901126104b95760209060ff906040906001600160a01b0361147c612fe2565b168152600b84522054166040519015158152f35b50346104b957806003193601126104b957546040516001600160a01b039091168152602090f35b50346104b95760403660031901126104b9576114d1612fe2565b6114d9613024565b6114e161331d565b6001600160a01b0382169182156115e85781611549575b5060207f060d1992d069dc524985f328329aae36102a017c59733c5c91fc0691ee0703b691838552600b825261153d81604087209060ff801983541691151516179055565b6040519015158152a280f35b803b156115e857828452600c6020526040842060405190611569826130a2565b8054808352604060ff60026001850154948560208801520154169301928352159081156115df575b506115d057916115c960209260ff7f060d1992d069dc524985f328329aae36102a017c59733c5c91fc0691ee0703b69551169061341e565b91506114f8565b630ec98c7960e31b8552600485fd5b9050155f611591565b630137dfd360e51b8452600484fd5b50346104b957806003193601126104b9576003546040516001600160a01b039091168152602090f35b50346104b95760203660031901126104b95761163a612fe2565b61164261331d565b61164a61349c565b6001600160a01b038116808352600e60205260408320600a81015491929160ff1615610bb05760ff600682015460481c1660048110156118235761181457600181015460405163c68360a560e01b81526001600160a01b039091169290602081600481875afa9081156103fc5786916117f5575b50156117e357604051634f1f58fd60e01b8152602081600481875afa9081156103fc5786916117b1575b5060405163cbcb317160e01b815290602082600481885afa9081156117a6578791611770575b61171a9250848461387f565b611761579061172992916139e7565b7f52c1a28345695afc7f6b7629133124dec5d61ee745affd65e4fd2a776bc058408280a260015f516020615e435f395f51905f525580f35b636d3bcfe560e01b8552600485fd5b90506020823d60201161179e575b8161178b6020938361310f565b810103126103f05761171a91519061170e565b3d915061177e565b6040513d89823e3d90fd5b90506020813d6020116117db575b816117cc6020938361310f565b810103126103f057515f6116e8565b3d91506117bf565b6001620b9b5560e31b03198552600485fd5b61180e915060203d60201161048057610472818361310f565b5f6116be565b63251976f560e21b8452600484fd5b634e487b7160e01b85526021600452602485fd5b50346104b957806003193601126104b957600154336001600160a01b038216036118a4576001600160a01b0319908116600155815433918116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b63118cdaa760e01b825233600452602482fd5b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346104b95760203660031901126104b957611916612fe2565b61191e61331d565b6001600160a01b0316801561196f576020817f56b32d3633fed72f97c4df44a78b5fa04f1d662d4bddebcd8a9b216d26d093ad926001600160601b0360a01b6004541617600455604051908152a180f35b63d92e233d60e01b8252600482fd5b50346104b957806003193601126104b9576317d5c96560e11b8152600490fd5b50346104b95760203660031901126104b9576119c86119bb612fe2565b6119c361331d565b6137df565b156119d05780f35b63147fde5f60e31b8152600490fd5b50346104b957806003193601126104b9576020600754604051908152f35b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b612fc5565b50346104b95760203660031901126104b9576020611a6b611a66612fe2565b6131de565b6040519015158152f35b50346104b95760203660031901126104b9577fc799be5eb19a1a6d6ba7368d21e2bc367c8a335e4a07cd3d954482e6f714d3c56020600435611ab561331d565b80600855604051908152a180f35b50346104b957806003193601126104b9576020600654604051908152f35b50346104b957806003193601126104b9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346104b95760203660031901126104b957604060a091611b45612fe2565b8160808451611b53816130d8565b82815282602082015282868201528260608201520152600180851b03168152600d6020522061ffff60405191611b88836130d8565b54600180851b03811683528181851c166020840152818160b01c166040840152818160c01c16606084015260d01c166080820152611bc96040518092613033565bf35b50346104b95760203660031901126104b957611be5612fe2565b6001600160a01b038116808352600f6020526040808420905193929190611c0b856130a2565b80546001600160a01b031680865260018201546020870190815260029092015460408701908152919015611cb05751804210611c9e57505193844211611c8a5783945081611c879452600e60205260408520918552600f6020525f600260408720828155826001820155015560018060a01b03905116916134d4565b80f35b6316f3a81d60e31b84526004859052602484fd5b634086279560e11b8552600452602484fd5b63147fde5f60e31b8552600485fd5b50346104b95760203660031901126104b957611cd9612fe2565b816101c0604051611ce9816130f3565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a0820152015260018060a01b03168152600e60205260408120604051611d61816130f3565b60018060a01b03825416815260018060a01b03600183015416916020820192835260018060a01b03600282015416916040810192835260018060a01b036003830154166060820190815260018060a01b0360048401541660808301908152600584015460a0840190815260068501549060c0850162ffffff8316815260e08601908360181c60020b825261010087019261ffff8560301c16845260ff610120890195818160401c161515875260481c16956101408901966004811015611f2f57875260078a0154976101608a0198895260088b01549961018081019a8b5260098c01549b6101a082019c8d52600a015460ff169c6101c08201809e151590526040519e8f92600160a01b600190039051168352600160a01b600190039051166020830152600160a01b600190039051169060400152600160a01b6001900390511660608d0152600160a01b6001900390511660808c01525160a08b01525162ffffff1660c08a01525160020b60e08901525161ffff16610100880152511515610120870152516004811015611f1b576101e096506101408601525161016085015251610180840152516101a08301525115156101c0820152f35b634e487b7160e01b87526021600452602487fd5b634e487b7160e01b8e52602160045260248efd5b50346104b95760203660031901126104b9576004356001600160a01b0381169081900361055e57611f7261331d565b6003546001600160a01b03811661054f578115610540576001600160a01b03191681176003556040519081527fd5ea7aa3e328a0594dcf6914cd9e5369779efaa194ee4dd4c5afcad4f4ebbb0c90602090a180f35b50346104b95760403660031901126104b957611fe1612fe2565b611fe9613024565b90611ff261331d565b6001600160a01b03169081156105405760207fef2b562a67f01ed4b7c4265ec09b539039c6d5dd7e752191d3940508c3dc006891838552600a825261153d81604087209060ff801983541691151516179055565b50346104b95760203660031901126104b9576040906001600160a01b0361206b612fe2565b168152600c60205220805461076460ff60026001850154940154166040519384938491604091949360ff9160608501968552602085015216910152565b50346103f05760203660031901126103f0576120c2612fe2565b6120ca61349c565b6002546001600160a01b03161561299c576001600160a01b0381165f818152600e60205260409020600a81015460ff161561298d57600681019360ff855460481c1660048110156129795760010361296a5760078201938454928260088201805497612138898886886136db565b61214d6121468a8987615768565b809a61378f565b8061276f575b508290555560098101839055865460ff60481b19166902000000000000000000178755600481015461218e906001600160a01b031683615804565b8954604051929492937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692906121cc866130d8565b6001600160a01b0390811680875296166020860181905262ffffff8316604087015260189290921c60020b60608601526080850183905215612766578990889b5b6001600160801b0383118015612756575b612747576001600160a01b036122348e85615825565b16936401000276a38511801590612729575b61271a5760405163313b65df60e11b815260208160c4818e61226b600483018e61379c565b60a482018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015612658576126e0575b508b8a52600d60205260408a209561ffff604051976122c7896130d8565b5460018060a01b0381168952818160a01c1660208a0152818160b01c1660408a0152818160c01c1660608a015260d01c1660808801526004602060018060a01b03600384015416926001808060a01b039101541660405192838092633cd1fb8f60e01b82525afa9081156126d5578c91612697575b50835491833b156125e857898f948e949060ff8692612375966101e4966040519a8b998a9863082a822960e31b8a5260048a019061379c565b60a488015260c48701526001600160a01b031660e4860152603081901c61ffff1661010486015260401c1615156101248401526123b661014484018d613033565b5af1801561268c57908a91612677575b50505460181c60020b9586156126635760209b9c6123f96123ed8980620d89e719056158c0565b9880620d89e8056158c0565b604051631d5e528f60e21b81529d9094908e6004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9d8e15612658578b9e612624575b508a836126075750805b846125ec575081955b60025497516001600160a01b03988916981695883b156125e857918c9998979593918f9795936040519c8d9b8c9a630cbba19160e41b8c5260048c015260248b016124a59161379c565b60020b60c48a015260020b60e48901526101048801526101248701526101448601526101648501526101848401526101a48301525a926101c493f180156125dd579083916125c8575b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b15610f9657604051631496ab9960e11b81526001600160a01b03919091166004820152602481018690529082908290604490829084905af1801561125f576125b3575b505060606020947f0a44ef75df69c534f43cd6c1aa3ef8983065fe5fe79ef9e79f6494e6f258c2599260405191868352878301526040820152a260015f516020615e435f395f51905f5255604051908152f35b6125be82809261310f565b6104b95780612560565b816125d29161310f565b61055e57815f6124ee565b6040513d85823e3d90fd5b8c80fd5b956126028360018060a01b036002541687615d24565b61245b565b60025461261f9083906001600160a01b031686615d24565b612452565b909d506020813d602011612650575b816126406020938361310f565b810103126103f057519c5f612448565b3d9150612633565b6040513d8d823e3d90fd5b634e487b7160e01b89526012600452602489fd5b816126819161310f565b6109e257885f6123c6565b6040513d8c823e3d90fd5b90506020813d6020116126cd575b816126b26020938361310f565b810103126126c9576126c390613291565b5f61233c565b8b80fd5b3d91506126a5565b6040513d8e823e3d90fd5b6020813d602011612712575b816126f96020938361310f565b8101031261270e57518060020b8103156122a9575b8a80fd5b3d91506126ec565b63582157bb60e01b8a5260048afd5b5073fffd8963efd1fc6a506488495d951d5263988d26851015612246565b632c37d0eb60e01b8952600489fd5b506001600160801b038d1161221e565b87908a9b61220d565b60405163095ea7b360e01b5f9081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048190526024849052949550929392602090604481808e5af19060015f511482161561295b575b604052156128a3575b813b156103f05760405163b8a0d7ab60e01b81526001600160a01b038716600482015260248101829052915f908390604490829084905af1918215612898578992612857575b5091869392917fa0a18f5bf205becee8b268d7cf69addab8548ae8ef361791464cf0e0e17c136160208694604051908152a290612153565b7fa0a18f5bf205becee8b268d7cf69addab8548ae8ef361791464cf0e0e17c13619750602094939192505f61288b9161310f565b885f97509190929361281f565b6040513d5f823e3d90fd5b8860205f604481806040519563095ea7b360e01b825288600452816024525af19060015f5114821615612943575b6040521561290f578860205f604481806040519563095ea7b360e01b825288600452876024525af19060015f5114821615612922575b6040526127d9575b88635274afe760e01b5f5260045260245ffd5b90600181151661293a578a3b15153d15161690612907565b503d5f823e3d90fd5b90600181151661293a578a3b15153d151616906128d1565b908a3b15153d151616906127d0565b63251976f560e21b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b630cbdb7b360e41b5f5260045ffd5b63d43cabc360e01b5f5260045ffd5b346103f0575f3660031901126103f057602060405162093a808152f35b346103f05760403660031901126103f0576129e1612fe2565b6129e9612ff8565b6001600160a01b0382165f908152600e60205260409020600a81015460ff161561298d5760038101546001600160a01b03163303612a2a57610019926134d4565b632e7e4e5160e21b5f5260045ffd5b346103f0575f3660031901126103f057602060ff600954166040519015158152f35b346103f05760203660031901126103f057600435612a7761331d565b6103e88111612ab1576020817f3e99ceb3e222d2214d53dacca902810db845f156f78152fdc076be628c4e9a4092600555604051908152a1005b63800c7e9160e01b5f5260045ffd5b346103f05760203660031901126103f0576004355f60c0604051612ae3816130bd565b8281528260208201528260408201528260608201528260808201528260a08201520152601054811015612b6d57612b1e61059660e092613130565b60c0604051918051835260208101516020840152604081015160408401526060810151606084015262ffffff608082015116608084015260a081015160020b60a08401520151151560c0820152f35b6368b42c5960e01b5f5260045ffd5b346103f05760203660031901126103f057612b95612fe2565b612b9d61331d565b612ba561349c565b6001600160a01b03165f908152600e60205260409020600a81015460ff161561298d576001015460408051635292058760e01b815291829060049082905f906001600160a01b03165af1801561289857612c0d575b60015f516020615e435f395f51905f5255005b612c2e9060403d604011612c34575b612c26818361310f565b81019061316d565b50612bfa565b503d612c1c565b346103f0575f3660031901126103f0576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346103f05760e03660031901126103f057612c9861331d565b6024356103e88111612e6f57600435670de0b6b3a76400008110612e605760016001607f1b038111612e5157604435908115612e4257606435908115612e335760a435918260020b918284141592836103f0575f811390811591612e24575b50612e15576084359562ffffff8716928388036103f05783612e0657612d1e828489613361565b60105496600160401b881015612df25760018801601055612d3e88613130565b939093612ddf57600494845560018401556002830155600382015501945062ffffff198554161784556103f057825460189190911b65ffffff0000001665ffffff0000001990911617825560c435918215158084036103f0576020935060ff60301b82549160301b169060ff60301b191617905560405190807fedd96c570c6e5ef9add0378e59df53579a283889dc5dab6440ef6eca2ee6c8ce5f80a28152f35b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b634292c38960e11b5f5260045ffd5b63013840ad60e51b5f5260045ffd5b935050617fff5f931387612cf7565b6315dc5eeb60e11b5f5260045ffd5b63056f5a9f60e31b5f5260045ffd5b63acb9fa2b60e01b5f5260045ffd5b63c0b4e37360e01b5f5260045ffd5b6313888a8960e21b5f5260045ffd5b346103f05760803660031901126103f057612e97612fe2565b602435906044356064359260ff8416928385036103f057612eb661331d565b6001600160a01b0381169485158015612fbd575b8015612fb5575b612fa65760068510612fa657612ef86103e8670de0b6b3a764000085620f424081046156db565b15612f97577f67d517ee0e305d608b8410ddef27bbd2ed964d843d9b936e84ea2ad1bd65e5d194612f2c82612f9294613379565b60ff6002604051612f3c816130a2565b86815260208101888152604082019485528a5f52600c60205260405f20915182555160018201550191511660ff198254161790556040519384938491604091949360ff9160608501968552602085015216910152565b0390a2005b6395e32dab60e01b5f5260045ffd5b630ec98c7960e31b5f5260045ffd5b508315612ed1565b508215612eca565b346103f0575f3660031901126103f05760206040516203f4808152f35b600435906001600160a01b03821682036103f057565b602435906001600160a01b03821682036103f057565b604435906001600160a01b03821682036103f057565b6024359081151582036103f057565b61ffff6080809260018060a01b038151168552826020820151166020860152826040820151166040860152826060820151166060860152015116910152565b9181601f840112156103f0578235916001600160401b0383116103f0576020808501948460051b0101116103f057565b606081019081106001600160401b03821117612df257604052565b60e081019081106001600160401b03821117612df257604052565b60a081019081106001600160401b03821117612df257604052565b6101e081019081106001600160401b03821117612df257604052565b90601f801991011681019081106001600160401b03821117612df257604052565b60105481101561314c5760105f52600560205f20910201905f90565b634e487b7160e01b5f52603260045260245ffd5b3580151581036103f05790565b91908260409103126103f0576020825192015190565b90604051613190816130bd565b60c060ff6004839580548552600181015460208601526002810154604086015260038101546060860152015462ffffff811660808501528060181c60020b60a085015260301c161515910152565b60ff600954169081156131ef575090565b6001600160a01b03165f908152600a602052604090205460ff16919050565b908160209103126103f0575180151581036103f05790565b9190820180921161323357565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038111612df257601f01601f191660200190565b3d1561328c573d9061327382613247565b91613281604051938461310f565b82523d5f602084013e565b606090565b51906001600160a01b03821682036103f057565b519061ffff821682036103f057565b908160a09103126103f0576133156080604051926132d1846130d8565b6132da81613291565b84526132e8602082016132a5565b60208501526132f9604082016132a5565b604085015261330a606082016132a5565b6060850152016132a5565b608082015290565b5f546001600160a01b0316330361333057565b63118cdaa760e01b5f523360045260245ffd5b811561334d570490565b634e487b7160e01b5f52601260045260245ffd5b906133729291620f424081046156db565b15612f9757565b90813b1561341a5760405163313ce56760e01b815291602090839060049082906001600160a01b03165afa5f92816133dc575b506133b5575050565b60ff91821691168082036133c7575050565b634e3de34f60e01b5f5260045260245260445ffd5b9092506020813d602011613412575b816133f86020938361310f565b810103126103f0575160ff811681036103f057915f6133ac565b3d91506133eb565b5050565b60405163313ce56760e01b81529190602090839060049082906001600160a01b03165afa5f928161345e575b506133b55763721e0a6560e11b5f5260045ffd5b9092506020813d602011613494575b8161347a6020938361310f565b810103126103f0575160ff811681036103f057915f61344a565b3d915061346d565b60025f516020615e435f395f51905f5254146134c55760025f516020615e435f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b6001600160a01b038316925f919084156136cc576003840180546001600160a01b03198116871790915560068501546001600160a01b0391909116949060481c60ff16600481101561297957600203613674577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169061355c908461551f565b813b1561099557849160448392604051948593849263ed8ef7a360e01b845260048401528b60248401525af1801561366957908491613654575b50505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b1561099957604051635ad7fc1760e01b81526001600160a01b0384811660048301529190911660248201529083908290604490829084905af180156125dd5790839161363f575b50506001600160a01b0316907f308c390ed1ab5873392818e036cabdf408bc8ad042fbaead3108954ff75ba9809080a4565b816136499161310f565b61055e57815f61360d565b8161365e9161310f565b610f9657825f613596565b6040513d86823e3d90fd5b600101546001600160a01b0316803b156103f0575f8091602460405180948193633d82753160e11b83528b60048401525af18015612898576136b7575b50613599565b6136c49193505f9061310f565b5f915f6136b1565b63d92e233d60e01b5f5260045ffd5b91926136e8908483615768565b9160018060a01b037f000000000000000000000000000000000000000000000000000000000000000016906006600484015493015460181c60020b92823b156103f05760405163bcebea9f60e01b81526001600160a01b0392831660048201529116602482015260029290920b604483015260648201939093526084810191909152905f90829060a49082905afa8015612898576137835750565b5f61378d9161310f565b565b9190820391821161323357565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b6001600160a01b03165f818152600f602052604090819020905190613803826130a2565b80546001600160a01b03168083526001820154602084015260029091015460408301521561387957815f52600f6020525f600260408220828155826001820155015560018060a01b03905116907fbe2de91c1cbef653c760573fff8355c0c851d35ed2a898342b4db556301cccf45f80a3600190565b50505f90565b5f93831580156139df575b61399e57600183015460405163315fab7f60e21b81529190602090839060049082906001600160a01b03165afa9182156128985785905f936139a7575b506138d56138db9382613226565b916159e4565b91821561399e57600481015460069091015460181c60020b916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116921690823b156103f05760405163bcebea9f60e01b81526001600160a01b0391821660048201529116602482015260029290920b604483015260648201939093526084810191909152905f90829060a49082905afa9081613989575b506139835790565b50600190565b6139969192505f9061310f565b5f905f61397b565b50505050505f90565b9250506020823d6020116139d7575b816139c36020938361310f565b810103126103f057905190846138d56138c7565b3d91506139b6565b50801561388a565b91905f91600482016040613a0360018060a01b03835416615a64565b81516001629272fb60e01b0319815230600482015295909386916024918391906001600160a01b03165af1938415612898575f94613ad7575b5054613a5a9190613a55906001600160a01b0316615a64565b61378f565b928315613ac8577fcdb72f157fd3666758a6ce201387ffb52038c7562e4fff352828da1096c4b6b492600683866007604096015582600882015542600982015501690100000000000000000060ff60481b198254161790558251948552602085015260018060a01b031692a2565b636103a62360e11b5f5260045ffd5b613a5a92919450613af9613a559160403d604011612c3457612c26818361310f565b905094919250613a3c565b903590601e19813603018212156103f057018035906001600160401b0382116103f0576020019181360383136103f057565b3561ffff811681036103f05790565b356001600160a01b03811681036103f05790565b929192613b6582613247565b91613b73604051938461310f565b8294818452818301116103f0578281602093845f960137010152565b9080601f830112156103f057816020613baa93359101613b59565b90565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b610280526101e052610200526101c0526003546101608190525f610220526001600160a01b031615615474576002546001600160a01b03168015614e715760405163c45a015560e01b815261016051602090829060049082906001600160a01b03165afa908115612898575f9161543a575b506001600160a01b031630148015906153c9575b614e715760405163c45a015560e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f9161538f575b506001600160a01b031630148015906152c9575b614e715760405163c45a015560e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f9161528f575b506001600160a01b031630148015906151f5575b614e715760405163dc4c90d360e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f916151b3575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116911614801590615110575b614e715760405163104b120760e31b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f916150ce575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161480159061501b575b614e7157604051631e46e62f60e21b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa908115612898575f91614fe1575b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116819003614e7157604051631e46e62f60e21b8152602081600481875afa908115612898575f91614f9f575b506001600160a01b03161480159290614eff575b8215614e80575b5050614e7157613f0c6101c0516131de565b15614e62576008543403614e53576010546101e0511015612b6d57613f376102805161028051613b04565b9050158015614e37575b614e2857613f5460c06102805101613b36565b61ffff600554911611614e1957610200516001600160a01b0316158015908180614df4575b614de557613f8c6105966101e051613130565b61024052604051631134d37b60e31b815260a0816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015612898575f61018052614dc3575b505f6101a05215614d975760406102405101519060606102405101516101a0525b614d68575b61401a6101a05182610180516102405161561e565b61010061028051013580151580614d5e575b614d4957505060c061024051015115614d3a576107d0614066602061024051015161ffff61405f60c06102805101613b36565b1690613226565b11614d2b5761ffff60606101805101511661ffff61408960c06102805101613b36565b160161ffff81116132335761ffff6107d0911611614d2b5761024051516140d760a061024051015160020b916140c26101a05185613226565b906140d282866101a051936159e4565b6159e4565b908115614d1c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691823b156103f05760645f926040519485938492636de06dc960e01b845260048401526101a051602484015260448301525afa801561289857614d07575b506102805160a0016001600160a01b0361415f82613b45565b610220516102605216614cf557506101c051610260525b60206102405101519061418e60c06102805101613b36565b9161419e60e06102805101613160565b61024051516141b36102805161028051613b04565b9190926141c96020610280510161028051613b04565b9060a052956141e16040610280510161028051613b04565b60c0526080526141fa6060610280510161028051613b04565b60e05261010052608061028051013561012052609e1961028051360301610120511215614c47576040516101408190526001600160401b036102608201908111911117614cdb57614396976143839661ffff92610260610140510160405260018060a01b036102005116610140515260018060a01b036102605116602061014051015260018060a01b036101c05116604061014051015260018060a01b037f000000000000000000000000000000000000000000000000000000000000000016606061014051015261018051608061014051015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660a061014051015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660c061014051015260e0610140510152610100610140510152166101206101405101521515610140805101526101a0516101606101405101526101806101405101526101206102805101356101a06101405101523691613b59565b6101c0610140510152369060a051613b59565b6101e06101405101526143ae3660c051608051613b59565b6102006101405101526143c73660e05161010051613b59565b61022061014051015260a0610120516102805101360312614c47576040516143ee816130d8565b6001600160401b036101205161028051013511614c4757610120516102805161441c91369101803501613b8f565b81526001600160401b036020610120516102805101013511614c4757610120516102805161445291369101602081013501613b8f565b60208201526001600160401b036040610120516102805101013511614c4757610120516102805161448b91369101604081013501613b8f565b60408201526001600160401b036060610120516102805101013511614c475761012051610280516144c491369101606081013501613b8f565b60608201526001600160401b036080610120516102805101013511614c475761012051610280516144fd91369101608081013501613b8f565b6080820152610240610140510152604051906378b9895560e01b82526020600483015260018060a01b03610140515116602483015260018060a01b03602061014051015116604483015260018060a01b03604061014051015116606483015260018060a01b036060610140510151166084830152614586608061014051015160a4840190613033565b60018060a01b0360a06101405101511661014483015260018060a01b0360c06101405101511661016483015260e06101405101516101848301526101006101405101516101a48301526101206101405101516101c48301526101408051015115156101e48301526101606101405101516102048301526101806101405101516102248301526101a06101405101516102448301526040828061471561469b61468061466561464a6101c06101405101516102e0610264880152610304870190613bad565b610140516101e0015186820360231901610284880152613bad565b610140516102000151858203602319016102a4870152613bad565b610140516102200151848203602319016102c4860152613bad565b61024061014051015190602319848203016102e485015260806147046146f26146e26146d0865160a0875260a0870190613bad565b60208701518682036020880152613bad565b898601518582038b870152613bad565b60608501518482036060860152613bad565b920151906080818403910152613bad565b03816102205160018060a01b0361016051165af1908115614c4e5761022051928392614c92575b5081836001600160a01b0382163b15614c475760405163189acdbd60e31b81526001600160a01b038281166004830152610220519082906024908290849088165af18015614c4e57614c77575b506001600160a01b0382163b15614c47576040516318ffbf9160e11b81526101c0516001600160a01b039081166004830152610220519082906024908290849088165af18015614c4e57614c5c575b506101c051610260516001600160a01b03918216911603614bd8575b610240516080015162ffffff166102405160a0015160020b6102805160c00161481c90613b36565b836102805160e00161482d90613160565b6040519061483a826130f3565b600160a01b60019003831682526020820194600160a01b60019003891686526040830191600160a01b600190036101c0511683526060840195600160a01b60019003610260511687526080850192600160a01b600190036102005116845260a086016101a051815260c087019a8b5260e0870191825261010087019261ffff16835261012087019315158452610140870194610220518652610160880199610220518b526101808901976102205189526101a08a0199610220518b526101c081019b60018d52600160a01b60019003166102205152600e60205261022051604090209d8e91600160a01b6001900390600160a01b60019003905116166001600160601b0360a01b835416178255600160a01b600190039051169060010190600160a01b60019003166001600160601b0360a01b825416179055600160a01b6001900390511660028d0190600160a01b60019003166001600160601b0360a01b825416179055600160a01b6001900390511660038c0190600160a01b60019003166001600160601b0360a01b825416179055600160a01b6001900390511660048b0190600160a01b60019003166001600160601b0360a01b8254161790555160058a015560068901995162ffffff1662ffffff1662ffffff198b5416178a555160020b614a3f908a9081549060181b65ffffff000000169065ffffff0000001916179055565b518854915168ffffff0000000000001990921667ffff00000000000060309290921b919091161790151560401b60ff60401b1617875551936004851015614bbe57614ac696600a9560ff60481b82549160481b169060ff60481b191617905551600786015551600885015551600984015551151591019060ff801983541691151516179055565b61022080516001600160a01b03838116909152600d602090815291516040908190206101805180518254958201519382015160608301516080909301516001600160e01b0319909716919095161760a09390931b61ffff60a01b169290921760b09390931b61ffff60b01b169290921760c09190911b61ffff60c01b161760d09290921b61ffff60d01b16919091179055614b5f615af4565b604080516101c0516101a0516101e051610200516001600160a01b039081168552602085019190915293830152821693821692909116907f8d4aad4953d0ca700d468f3753aa14432d1b35b43ec6409f051fb6aa43a8960790606090a4565b634e487b7160e01b61022051526021600452602461022051fd5b6001600160a01b0382163b15614c47576040516318ffbf9160e11b8152610260516001600160a01b039081166004830152610220519082906024908290849088165af18015614c4e57614c2c575b506147f4565b61022051614c399161310f565b61022051614c47575f614c26565b6102205180fd5b6040513d61022051823e3d90fd5b61022051614c699161310f565b61022051614c47575f6147d8565b61022051614c849161310f565b61022051614c47575f614789565b925090506040823d604011614cd3575b81614caf6040938361310f565b81010312614c4757614ccc6020614cc584613291565b9301613291565b905f61473c565b3d9150614ca2565b634e487b7160e01b61022051526041600452602461022051fd5b614cfe90613b45565b61026052614176565b5f614d119161310f565b5f610220525f614146565b632c37d0eb60e01b5f5260045ffd5b6349e55bcb60e01b5f5260045ffd5b63545b183b60e11b5f5260045ffd5b63ecb2731960e01b5f5260045260245260445ffd5b508181141561402c565b60018060a01b0361020051165f52600c602052614d9260ff600260405f200154166102005161341e565b614005565b610200516001600160a01b03165f908152600c6020526040902080546001909101546101a05290614000565b614ddb9060a03d60a01161064857610639818361310f565b610180525f613fdf565b6349285dfb60e01b5f5260045ffd5b50610200516001600160a01b03165f908152600b602052604090205460ff1615613f79565b6326b5197760e21b5f5260045ffd5b631ba4296560e11b5f5260045ffd5b50614e4b6020610280510161028051613b04565b905015613f41565b637e6d78a560e01b5f5260045ffd5b630b094f2760e31b5f5260045ffd5b631de25df360e01b5f5260045ffd5b604051636bdcb6a760e11b8152919250602090829060049082905afa908115612898575f91614ebd575b506001600160a01b031614155f80613efa565b90506020813d602011614ef7575b81614ed86020938361310f565b810103126103f057516001600160a01b03811681036103f0575f614eaa565b3d9150614ecb565b6040516312261ee760e01b8152909250602081600481865afa908115612898575f91614f5d575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116141591613ef3565b90506020813d602011614f97575b81614f786020938361310f565b810103126103f057516001600160a01b03811681036103f0575f614f26565b3d9150614f6b565b90506020813d602011614fd9575b81614fba6020938361310f565b810103126103f057516001600160a01b03811681036103f0575f613edf565b3d9150614fad565b90506020813d602011615013575b81614ffc6020938361310f565b810103126103f05761500d90613291565b5f613e86565b3d9150614fef565b5060405163c4b7de9760e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f9161509f575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415613e33565b6150c1915060203d6020116150c7575b6150b9818361310f565b810190615ad5565b5f615069565b503d6150af565b90506020813d602011615108575b816150e96020938361310f565b810103126103f057516001600160a01b03811681036103f0575f613dfb565b3d91506150dc565b5060405163c4b7de9760e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f91615194575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415613daa565b6151ad915060203d6020116150c7576150b9818361310f565b5f61515e565b90506020813d6020116151ed575b816151ce6020938361310f565b810103126103f057516001600160a01b03811681036103f0575f613d72565b3d91506151c1565b5060405163c45a015560e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f91615255575b506001600160a01b0316301415613d21565b90506020813d602011615287575b816152706020938361310f565b810103126103f05761528190613291565b5f615243565b3d9150615263565b90506020813d6020116152c1575b816152aa6020938361310f565b810103126103f0576152bb90613291565b5f613d0d565b3d915061529d565b5060405163f1f5c99360e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f9161534d575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415613cbc565b90506020813d602011615387575b816153686020938361310f565b810103126103f057516001600160a01b03811681036103f0575f615317565b3d915061535b565b90506020813d6020116153c1575b816153aa6020938361310f565b810103126103f0576153bb90613291565b5f613ca8565b3d915061539d565b5060405163c45a015560e01b8152602081600481855afa908115612898575f91615400575b506001600160a01b0316301415613c57565b90506020813d602011615432575b8161541b6020938361310f565b810103126103f05761542c90613291565b5f6153ee565b3d915061540e565b90506020813d60201161546c575b816154556020938361310f565b810103126103f05761546690613291565b5f613c43565b3d9150615448565b6357332dcf60e01b5f5260045ffd5b909260208311615510575f5b83811015615509576001600160a01b038316906154b1600582901b8701613b45565b823b156103f0576040516318ffbf9160e11b81526001600160a01b039091166004820152915f908390602490829084905af1918215612898576001926154f9575b500161548f565b5f6155039161310f565b5f6154f2565b5092505050565b63021c0d4360e01b5f5260045ffd5b90600661553a60a093600180861b0360048501541690615804565b509190920154906040519261554e846130d8565b5f196001861b019081168452908116602084015262ffffff8216604084015260189190911c60020b60608301527f00000000000000000000000000000000000000000000000000000000000000001660808201522090565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f5114821615615606575b604052156155e65750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b90600181151661293a57823b15153d151616906155db565b9092919281519160208101519160a062ffffff60808401511692015160020b61ffff60208301511661ffff6040840151169061ffff6060850151169261ffff6080860151169460018060a01b039051169560065497600754996040519b60208d019d8e5260408d015260608c015260808b015260a08a015260c089015260e08801526101008701526101208601526101408501526101608401526101808301526101a08201526101a081526156d56101c08261310f565b51902090565b90919281158015615760575b8015615758575b801561574c575b61574457612710039061271082116132335761571b9161571491615bbe565b9283615bbe565b90612710810290808204612710149015171561323357613baa9261573e91613226565b90613343565b505050505f90565b506127108110156156f5565b5083156156ee565b5082156156e7565b9190801580156157fc575b613ac85760019092015460405163315fab7f60e21b81529290602090849060049082906001600160a01b03165afa928315612898575f936157c6575b506138d56157bd9382613226565b908115613ac857565b92506020833d6020116157f4575b816157e16020938361310f565b810103126103f0579151916138d56157af565b3d91506157d4565b508115615773565b6001600160a01b03918216929116808310615820579190600190565b905f90565b90811580156158b8575b6158a95761583d8183615bd1565b61588e5761584b8183615d0f565b1561587f576158629161585d91615961565b615bed565b6001600160801b03811161587f5760201b6001600160a01b031690565b63375cdf9f60e21b5f5260045ffd5b6001600160a01b03916158a59161585d91906158d7565b1690565b631f2a200560e01b5f5260045ffd5b50801561582f565b9060020b9060020b02908160020b91820361323357565b9060c082901b905f19600160c01b8409928280851094039380850394858411156103f0571461595a578190600160c01b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b90608082901b905f19600160801b8409928280851094039380850394858411156103f0571461595a578190600160801b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b91818302915f19818509938380861095039480860395868511156103f05714615a5c579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b6001600160a01b031680615a7757504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115612898575f91615aa6575090565b90506020813d602011615acd575b81615ac16020938361310f565b810103126103f0575190565b3d9150615ab4565b908160209103126103f057516001600160a01b03811681036103f05790565b6008548015615bbb5760405163326f824f60e11b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612898575f91615b81575b506001600160a01b031680156136cc575f80809381935af1615b6a613262565b5015615b7257565b634033e4e360e01b5f5260045ffd5b90506020813d602011615bb3575b81615b9c6020938361310f565b810103126103f057615bad90613291565b5f615b4a565b3d9150615b8f565b50565b8181029291811591840414171561323357565b6001600160c01b038111615be65760401b1190565b5050600190565b6001811115613baa57806001600160801b821015615cfe575b600482600160401b615cb0941015615cf1575b640100000000811015615ce4575b62010000811015615cd7575b610100811015615ccb575b6010811015615cbf575b1015615cb7575b60030260011c615c5f8184613343565b0160011c615c6d8184613343565b0160011c615c7b8184613343565b0160011c615c898184613343565b0160011c615c978184613343565b0160011c615ca58184613343565b0160011c8092613343565b8111900390565b60011b615c4f565b811c9160021b91615c48565b60081c91811b91615c3e565b60101c9160081b91615c33565b60201c9160101b91615c27565b60401c9160201b91615c19565b5050608081901c600160401b615c06565b6001600160801b038111615be65760801b1190565b6040516370a0823160e01b81526001600160a01b03808416600483018190529216939290602081602481885afa9081156128985784905f92615e0c575b50615d6d9192866155a6565b604051916370a0823160e01b83526004830152602082602481875afa918215612898575f92615dd8575b5080821115615dcf57615da99161378f565b915b818303615db757505050565b6324ad4cb160e11b5f5260045260245260445260645ffd5b50505f91615dab565b9091506020813d602011615e04575b81615df46020938361310f565b810103126103f05751905f615d97565b3d9150615de7565b9150506020813d602011615e3a575b81615e286020938361310f565b810103126103f0575183615d6d615d61565b3d9150615e1b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212209dd348acd856c2bdb1ce457d4b49082bc7d64687a431288b628994622beb511764736f6c63430008230033",
      "immutableReferences": {
        "45183": [
          {
            "start": 3029,
            "length": 32
          },
          {
            "start": 8820,
            "length": 32
          },
          {
            "start": 15733,
            "length": 32
          }
        ],
        "45186": [
          {
            "start": 6349,
            "length": 32
          },
          {
            "start": 9232,
            "length": 32
          },
          {
            "start": 16017,
            "length": 32
          }
        ],
        "45189": [
          {
            "start": 11344,
            "length": 32
          },
          {
            "start": 20265,
            "length": 32
          }
        ],
        "45192": [
          {
            "start": 3717,
            "length": 32
          },
          {
            "start": 9458,
            "length": 32
          },
          {
            "start": 10112,
            "length": 32
          },
          {
            "start": 15942,
            "length": 32
          },
          {
            "start": 21003,
            "length": 32
          }
        ],
        "45195": [
          {
            "start": 1486,
            "length": 32
          },
          {
            "start": 4732,
            "length": 32
          },
          {
            "start": 6675,
            "length": 32
          },
          {
            "start": 8601,
            "length": 32
          },
          {
            "start": 13609,
            "length": 32
          },
          {
            "start": 15472,
            "length": 32
          },
          {
            "start": 15674,
            "length": 32
          },
          {
            "start": 15870,
            "length": 32
          },
          {
            "start": 16293,
            "length": 32
          },
          {
            "start": 17050,
            "length": 32
          },
          {
            "start": 20774,
            "length": 32
          },
          {
            "start": 21215,
            "length": 32
          },
          {
            "start": 21885,
            "length": 32
          },
          {
            "start": 23314,
            "length": 32
          }
        ],
        "45198": [
          {
            "start": 4204,
            "length": 32
          },
          {
            "start": 17111,
            "length": 32
          },
          {
            "start": 20588,
            "length": 32
          },
          {
            "start": 20833,
            "length": 32
          }
        ],
        "45201": [
          {
            "start": 2057,
            "length": 32
          },
          {
            "start": 13723,
            "length": 32
          },
          {
            "start": 15573,
            "length": 32
          },
          {
            "start": 15811,
            "length": 32
          },
          {
            "start": 17160,
            "length": 32
          },
          {
            "start": 20529,
            "length": 32
          },
          {
            "start": 21274,
            "length": 32
          }
        ],
        "45212": [
          {
            "start": 6903,
            "length": 32
          },
          {
            "start": 14066,
            "length": 32
          },
          {
            "start": 14590,
            "length": 32
          },
          {
            "start": 16608,
            "length": 32
          }
        ]
      },
      "creationHash": "0x25e375213a49a516dd0fa83e6ce7534747711b7cbcb899d3b6285ee490068f96",
      "runtimeBytes": 24216,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/ShilloV2LaunchFactory.sol": "ShilloV2LaunchFactory"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloV2BondingCurve.sol": {
          "keccak256": "0x9a10d71081c96d09069fbbb8b6b9d0d023facef3270bac374c170c9d4e724aa2",
          "urls": [
            "bzz-raw://cd74b4475b93009c3583bf7dd321cd15ba3513eafbce643b36481d1c58727cbf",
            "dweb:/ipfs/QmUwEdXtpPAy6afsGo9UpbDvy2MWD7hTkY6YzJ9CF9KoJo"
          ],
          "license": "MIT"
        },
        "src/ShilloV2BuybackVault.sol": {
          "keccak256": "0x241b48e899062f8f35b0bc3819863422405fc90573ecc01d0b427d6e2862be29",
          "urls": [
            "bzz-raw://3844ce8d72c6eabe595de4a9fbd8db9eb99cc7eb3eed93186b60c2765c158113",
            "dweb:/ipfs/QmdvT7ogvx87SMBPqHC6AZ7ymgvaxP9AqEwSZyddP7Y2bY"
          ],
          "license": "MIT"
        },
        "src/ShilloV2GraduationExecutor.sol": {
          "keccak256": "0xb7a6733a0817d203f89a239624d895f81399bb7264c46b2910f7ca4b9d5606da",
          "urls": [
            "bzz-raw://6559e1e07a8355423318223d31546c1a23699da213e1cd09311261a893f45eb8",
            "dweb:/ipfs/QmcybbZ7hzAqDzHRHRD1gYdXNYvLQd4dy1qRMFz1RhLaEu"
          ],
          "license": "MIT"
        },
        "src/ShilloV2GraduationGuard.sol": {
          "keccak256": "0xeaec2513923f8f3f14a4df2e6f12ee2ced301f805241eca434c23c71eaf0e3c3",
          "urls": [
            "bzz-raw://499fd0cfab8c0ed0eb61aba11aa7ca93f206aa14bba1579152ed4eb9e6f53ce8",
            "dweb:/ipfs/QmekbzRjrhpy4cdybXDC1syCCD95kp4ULKgNxYtowKjX2v"
          ],
          "license": "MIT"
        },
        "src/ShilloV2LaunchDeployer.sol": {
          "keccak256": "0x489e004ab318b5e95d7de96ed23b0012cab7df714717b96dd5670a009e1b093a",
          "urls": [
            "bzz-raw://24baec1125b56ff4da9723d591a34fe00c4b309e8ff37eee046ae91130bb8cb9",
            "dweb:/ipfs/QmaiH2gcRYZsLqfz59XGZiTsbRjNTiDfK59bBECgSosriE"
          ],
          "license": "MIT"
        },
        "src/ShilloV2LaunchFactory.sol": {
          "keccak256": "0xe244acb8438d619e0c8ade190037feecf5c137517a60eff90dbfc7982e3c1602",
          "urls": [
            "bzz-raw://e9f73b2c53ad7d3c0ee233a194d4981551ca9c1e840dd9a83409ac71ef66be52",
            "dweb:/ipfs/QmZFgcaGA2QNSeE2GJzF3ucsrNGgHpZxpWhJUCoUdo5cjV"
          ],
          "license": "MIT"
        },
        "src/ShilloV2LaunchLocker.sol": {
          "keccak256": "0x327c133adfa3eda4766eae2c025d4697f02568158b913b434b048b680a2babd5",
          "urls": [
            "bzz-raw://bf19c962f59d7de3332213e79ccc172b2d8c50d01b5369ca3b7ae53355a4e907",
            "dweb:/ipfs/QmbSoteV1gC4f6up94fuvZXntvNL4wZvUDUk9kECAn9819"
          ],
          "license": "MIT"
        },
        "src/ShilloV2LauncherToken.sol": {
          "keccak256": "0x34398ca7ef811f6a3ea27f22e23a9d4bf7f6a2b73accf00a1efb6d3a85c10d9e",
          "urls": [
            "bzz-raw://add53dba4381fd2dfcbe33b5c6b4cafb4b05c8a25e0444ed324fe305d6868367",
            "dweb:/ipfs/QmbkTS88J96KqVYZfPPYWfR5J1e9Ht5RPVdR7dm7MwHsRQ"
          ],
          "license": "MIT"
        },
        "src/hooks/ShilloV2MemeHook.sol": {
          "keccak256": "0x962b2a340ff0d42fb0a477f38aa3396127678cc88af51c82b83e341a89b2563e",
          "urls": [
            "bzz-raw://c2ac3f5b8475444fa2fb95a5e5476bc47e4ac756575e96594ab858acb84ffc59",
            "dweb:/ipfs/QmeeQhgTGjfgUXSo3hzZb3H15aUVFGewYUxPWD43Wd2G59"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2.sol": {
          "keccak256": "0xa11234bcbb18e4b7ecc2a74ab571fac55c93be48e4e2940d56d8c365e7b58671",
          "urls": [
            "bzz-raw://05b58e8f851021be44e1523b78550ac00d5f043114fbd0a99199424401b7efc1",
            "dweb:/ipfs/QmPAViXH1FUydKFrLY9V1RaxQ7iZwF258Mx4PT76w6SvDn"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2Graduation.sol": {
          "keccak256": "0xd1a62a75cf9d34adbb7a40a3d0d34d0a40e4f6063a04f11c106764447fa33348",
          "urls": [
            "bzz-raw://568d591a7fc57fa0be15c5597cadbbb83e12db1d4bfee6bf95c1baa9886b5baa",
            "dweb:/ipfs/QmcpmqcV4AhXkGuK2ZfCC9Xexm64cVPeSpirgFYQcrRu7n"
          ],
          "license": "MIT"
        },
        "src/libraries/ShilloV2BondingCurveMath.sol": {
          "keccak256": "0xf239685c9667677db519fe47ceaa463131d2e247cfc90770a87e12c192c576a8",
          "urls": [
            "bzz-raw://3e1dd46b609d0f9010c4c2a1c85333f00936063316f8ebd363f7a8ff6fee4bdf",
            "dweb:/ipfs/QmWimP5ypMjjyRkYmCNsqURpsKJB987EPFMUH7b1Xtpzem"
          ],
          "license": "MIT"
        },
        "src/libraries/ShilloV2GraduationMath.sol": {
          "keccak256": "0x03db7deed43a8249861f9783f5831e54f623715c35bf9289021ea4f05b469b7e",
          "urls": [
            "bzz-raw://8cc2ece4cd493620a9b89057a9f5cb09e40fefc08e90b908abd43d37f2b4fd37",
            "dweb:/ipfs/QmYNnYpzQdmPTHbc5kyxVae6juFBCn7aszJHajUDr4Soij"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
          "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
          "urls": [
            "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
            "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
          "keccak256": "0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c",
          "urls": [
            "bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0",
            "dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
          "keccak256": "0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d",
          "urls": [
            "bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100",
            "dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
          "keccak256": "0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc",
          "urls": [
            "bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037",
            "dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
          "keccak256": "0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44",
          "urls": [
            "bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d",
            "dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol": {
          "keccak256": "0xd735962e3d6660884153ba8a972b5f100dde4c482f2ff1c525ba7fdefb154cbd",
          "urls": [
            "bzz-raw://5a264d17b093f585844b0d977e9f60555b8c8d6513b304fde863cdf652a0d336",
            "dweb:/ipfs/QmWXfaJisjVnrjTUjZGryZpMob9wKivvtbodLS3PTc1ttq"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol": {
          "keccak256": "0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998",
          "urls": [
            "bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c",
            "dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol": {
          "keccak256": "0x669464167428061ee0f8618b73b3ee90aff8405683e7ddde8cd77dadaa1afe29",
          "urls": [
            "bzz-raw://0dda78587a7358b4fdf6b9fca0fde5a5e34930f36d5268a16028627fc0170195",
            "dweb:/ipfs/QmQ1b6cCceDRWNxti9HifsTCzmVP25Haxs1bWugm52vTqH"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
          "keccak256": "0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2",
          "urls": [
            "bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303",
            "dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol": {
          "keccak256": "0x2659248df25e34000ed214b3dc8da2160bc39874c992b477d9e2b1b3283dc073",
          "urls": [
            "bzz-raw://c345af1b0e7ea28d1216d6a04ab28f5534a5229b9edf9ca3cd0e84950ae58d26",
            "dweb:/ipfs/QmY63jtSrYpLRe8Gj1ep2vMDCKxGNNG3hnNVKBVnrs2nmA"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
          "keccak256": "0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f",
          "urls": [
            "bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e",
            "dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
          "keccak256": "0x377051c0c17a28038c32f58d76a42817eb3b24f2b4c6a2e788a9544e856d738d",
          "urls": [
            "bzz-raw://c5365fead4a20b84662284c97c07d707c67f5bc9e07b371980aba8c3c6e83661",
            "dweb:/ipfs/QmYrYoLPEADtXoCu9ZBnwkXdNB9D9FPHuhS9pWaQW4nYx5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol": {
          "keccak256": "0xf78f05f3b8c9f75570e85300d7b4600d7f6f6a198449273f31d44c1641adb46f",
          "urls": [
            "bzz-raw://e28b872613b45e0e801d4995aa4380be2531147bfe2d85c1d6275f1de514fba3",
            "dweb:/ipfs/QmeeFcfShHYaS3BdgVj78nxR28ZaVUwbvr66ud8bT6kzw9"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol": {
          "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
          "urls": [
            "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
            "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Create2.sol": {
          "keccak256": "0xe06ddfff69f3ba154d92102d9a85db2780e045303a587360cf12195216e851ca",
          "urls": [
            "bzz-raw://ac19cc390a227758c239c06d3a11d0a2c40c8f58eabb034154b661269d4a0851",
            "dweb:/ipfs/QmdSsfYsPX5RyAXSfHRvR5zdY9MffAgZVa3vdxQUypFBa5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Errors.sol": {
          "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
          "urls": [
            "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
            "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol": {
          "keccak256": "0x6ba3db1346fc75a832aa6cd075e12f6f1fa172fa2122a020f324c319fe5be75e",
          "urls": [
            "bzz-raw://ab92e9e1cb08144c43fa3a383a87c48f49a652d51156950b928c2a50bee6b3a5",
            "dweb:/ipfs/QmWeKkKZBgLDKgRFGKCzsKybYF7C8g9ysg5kU1b1p7QFBi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Panic.sol": {
          "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
          "urls": [
            "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
            "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol": {
          "keccak256": "0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53",
          "urls": [
            "bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99",
            "dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
          "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97",
          "urls": [
            "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b",
            "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
          "keccak256": "0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c",
          "urls": [
            "bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617",
            "dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
          "keccak256": "0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857",
          "urls": [
            "bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5",
            "dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": {
          "keccak256": "0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083",
          "urls": [
            "bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9",
            "dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IExtsload.sol": {
          "keccak256": "0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43",
          "urls": [
            "bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1",
            "dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IExttload.sol": {
          "keccak256": "0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937",
          "urls": [
            "bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8",
            "dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IHooks.sol": {
          "keccak256": "0xc131ffa2d04c10a012fe715fe2c115811526b7ea34285cf0a04ce7ce8320da8d",
          "urls": [
            "bzz-raw://3b212358897db5d99c21244d88f97b2e788527552cb430629b472a8cc6289aec",
            "dweb:/ipfs/QmQtwV4dDe2RYk2ErLpaAX7U82jWh1L6Lw2HRuKDvBi84G"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IPoolManager.sol": {
          "keccak256": "0xbdab3544da3d32dfdf7457baa94e17d5a3012952428559e013ffac45d067038e",
          "urls": [
            "bzz-raw://ce95ff864468e37c76adf71df061d4f3d6f3a5ec1f9bc3aea090463bc72798f4",
            "dweb:/ipfs/QmSbWh1pLbz51yQF4HEu5NRhr8XVv9JYGEw1hq1HudAnCi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IProtocolFees.sol": {
          "keccak256": "0x32a666e588a2f66334430357bb1e2424fe7eebeb98a3364b1dd16eb6ccca9848",
          "urls": [
            "bzz-raw://85751d302125881f72e5f8af051c2d5d9b1f606ebaea8ca7d04fccdd27cc252d",
            "dweb:/ipfs/QmeRwomeh9NWm6A6fgNA4KZPQZHPpdKsPQyYsHSFmvud7J"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/callback/IUnlockCallback.sol": {
          "keccak256": "0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719",
          "urls": [
            "bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b",
            "dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/external/IERC20Minimal.sol": {
          "keccak256": "0xeccadf1bf69ba2eb51f2fe4fa511bc7bb05bbd6b9f9a3cb8e5d83d9582613e0f",
          "urls": [
            "bzz-raw://118757369892687b99ef46ce28d6861f62c098285bd7687a4f17f7e44e5f81de",
            "dweb:/ipfs/QmUxqbYqQtcEwwFbb9e6BBMePEaSgN8C45v6RKubD4ib8d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/external/IERC6909Claims.sol": {
          "keccak256": "0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48",
          "urls": [
            "bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f",
            "dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/BitMath.sol": {
          "keccak256": "0x51b9be4f5c4fd3e80cbc9631a65244a2eb2be250b6b7f128a2035080e18aee8d",
          "urls": [
            "bzz-raw://fe98bbd5498e912146b9319827fc63621eb66ff55d5baae0fa02a7a972ab8d1e",
            "dweb:/ipfs/QmY5hCuyrtgsJtk4AavrxcvBkRrChfr4N6ZnhdC8roPpNi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/CustomRevert.sol": {
          "keccak256": "0x111ed3031b6990c80a93ae35dde6b6ac0b7e6af471388fdd7461e91edda9b7de",
          "urls": [
            "bzz-raw://c9ea883c98d6ae1829160d0977bb5195761cfd5bc81692d0a941f45717f594cd",
            "dweb:/ipfs/QmZPwxzaeMNv536wzrAMrMswu7vMHuqPVpjcqL3YvCMoxt"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/FixedPoint128.sol": {
          "keccak256": "0xad236e10853f4b4b20a35a9bb52b857c4fc79874846b7e444e06ead7f2630542",
          "urls": [
            "bzz-raw://0de1f9a06520b1a689660943faa14fc0b8344ab41fab9e6012ea34bff4b9b3eb",
            "dweb:/ipfs/QmRNMPTyko7W6d6KxuTsnDBa9oZgDK4xiwRRq3H9ASTbwy"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/FixedPoint96.sol": {
          "keccak256": "0xef5c3fd41aee26bb12aa1c32873cfee88e67eddfe7c2b32283786265ac669741",
          "urls": [
            "bzz-raw://4de298d02f662a1c36c7be0a150f18c2a161408a5d3e48432e707efd01fac9a4",
            "dweb:/ipfs/QmSiM4oeMmLVKmAtJXz2feYkv4R9ZcyBpkTRW5Nhw5KDyJ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/FullMath.sol": {
          "keccak256": "0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2",
          "urls": [
            "bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52",
            "dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/Hooks.sol": {
          "keccak256": "0xd679b4b2d429689bc44f136050ebc958fb2d7d0d3a3c7b3e48c08ab4fba09aaa",
          "urls": [
            "bzz-raw://287190cb72840e5eb63cc7a8a1d0b9150af17d8e4ea0323f47c7e7928f2033cb",
            "dweb:/ipfs/QmVfqWBnAQM2jUcuREDdvjcP21gNuLU35CoL3NG5CEhNcx"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/LPFeeLibrary.sol": {
          "keccak256": "0xbf6914e01014e7c1044111feb7df7a3d96bb503b3da827ad8464b1955580d13b",
          "urls": [
            "bzz-raw://33823c20a91882c9aacdcbb02f0558c05209f4d5954aa6dd4fa17c95664db475",
            "dweb:/ipfs/QmR7owkFgpfztpp1QUg3ut3nw9iPVQqLGP4hzgmZtRUQ2J"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/LiquidityMath.sol": {
          "keccak256": "0x000ef2eadcc1eb7b2c18a77655f94e76e0e860f605783484657ef65fd6eda353",
          "urls": [
            "bzz-raw://a766b620a7a22798b43c6c1f23b5c6cff0ebf588deb89842bad05208d448cd99",
            "dweb:/ipfs/QmVKjaFJdzkqA3ey2Byum8iTCMssWVD8MmVC8rw62Tj5WD"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/ParseBytes.sol": {
          "keccak256": "0x7533b13f53ee2c2c55500100b22ffd6e37e7523c27874edc98663d53a8672b15",
          "urls": [
            "bzz-raw://82449058634fde28a085f3c59a6a5f412550c02181590593fd84c3e8b329aa17",
            "dweb:/ipfs/Qmev4E9Au6SsE4wsArChCwfg94KhHc5gYsEsZUnjF5sRLa"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/Pool.sol": {
          "keccak256": "0xb8191707c5913f5e2f589cec5167e3fac4a5b86bd84f61fdba0fbe6a8ce8a3a0",
          "urls": [
            "bzz-raw://a609f9c365f05becf61877d9dc767e7825bce8c34607dbfc0f0437a71f6ff407",
            "dweb:/ipfs/QmThDUzLePs2Hbp6XTpRSHT67rdsjQLhdmS6krm8cpKSey"
          ],
          "license": "BUSL-1.1"
        },
        "vendor/contracts/lib/v4-core/src/libraries/Position.sol": {
          "keccak256": "0xddab2a831f1befb6abf5567e77c4582169ca8156cf69eb4f22d8e87f7226a3f9",
          "urls": [
            "bzz-raw://c79fe61b50f3b70cff503abfa6f5643fcbefb9b794855bee1019b1e6d9c083b2",
            "dweb:/ipfs/QmbKmYNQesaMz8bo1b7TMHQcAwaDd3eDPrE5pAdPPZTtk5"
          ],
          "license": "BUSL-1.1"
        },
        "vendor/contracts/lib/v4-core/src/libraries/ProtocolFeeLibrary.sol": {
          "keccak256": "0xf483001899229ab10f5a626fe1c5866134d9e965b48ce6cf55ce0d7f74f7d8ec",
          "urls": [
            "bzz-raw://6ba9211a7f69bbb44649c35211eb29d193c09032ec600064ef9d04b4625dd8ba",
            "dweb:/ipfs/QmQSjQvtguYgMJSkkKRhHjxasfX9xfTbrbcZ1QmjUVb787"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/SafeCast.sol": {
          "keccak256": "0x42c4a24f996a14d358be397b71f7ec9d7daf666aaec78002c63315a6ee67aa86",
          "urls": [
            "bzz-raw://c3db86e2ba3679105fc32edec656c70282e1fede6cab11217702443f6c26fa59",
            "dweb:/ipfs/QmX4yaaSPdKQzYNRsezjTvZKsubzS8JRTEGFD3fPpTTCcj"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/SqrtPriceMath.sol": {
          "keccak256": "0xf8079fe6e3460db495451d06b1705e18f1c4075c1af96a31ad313545f7082982",
          "urls": [
            "bzz-raw://582fc51546723a0a8acccf782f69b530bacf9b3ef929458e82569b7121f0b138",
            "dweb:/ipfs/QmSBXcmqZdFsM7M4sRaiyQAxykCeMNFKyKgBcwSMTw1bcF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/StateLibrary.sol": {
          "keccak256": "0x96db333ee126a841dd959e38e452cc59d73583cb0437a1d48b2052e33a74f952",
          "urls": [
            "bzz-raw://8672bba1eb69608299b0904f4ff305238eb18479d371c26518f278c9ee184cd0",
            "dweb:/ipfs/QmTLu3s6ECvsEDHStQv8HTVHYtvkviBbdjPrFJd4SpVRFY"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/SwapMath.sol": {
          "keccak256": "0x6baa782ae523269c079cc763639a9b91a25fcfa1743c049c76e43741ef494bd9",
          "urls": [
            "bzz-raw://035c337e62e05262a5bd5d3bc85bc9a383c1013001216b429f49cf1e129a0812",
            "dweb:/ipfs/QmU7s4h58Fh2A6mM8yeorZ2ygwEJMQw8zdZLLkHeDoSWxD"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/TickBitmap.sol": {
          "keccak256": "0x6779f89e28a0b4af6e09d518caf014b7e8fc627400f5561f86fed11635b1458a",
          "urls": [
            "bzz-raw://a64dee983106de3be3f968be94368c1e37592f5418aa2a39e8dd358d5a962b0d",
            "dweb:/ipfs/QmYuECZTiEeQVxDLYx6pBSSnVrg56Apw75bugQiM3FmGwy"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/TickMath.sol": {
          "keccak256": "0x4e1a11e154eb06106cb1c4598f06cca5f5ca16eaa33494ba2f0e74981123eca8",
          "urls": [
            "bzz-raw://a79a57f7b240783b045168d1c4f774ac1812caf8f9a83cb6959a86b0b07b6c70",
            "dweb:/ipfs/QmTb5kvxwDNW8jDuQaqdJ445cCFejNkUqEB17Bjo8UBiva"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/UnsafeMath.sol": {
          "keccak256": "0xa6e55e0a43a15df2df471d9972cd48f613d07c663ecb8bbeaf7623f6f99bcce4",
          "urls": [
            "bzz-raw://02ea6e13879fc5a5f35149a2f1cd8af3a1f0877ff69101dad53841d16f515572",
            "dweb:/ipfs/QmcpL4gdG6hL2w1wqs2Vw4J1EFCwBs9T1Qd4p16CtECQkn"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/BalanceDelta.sol": {
          "keccak256": "0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f",
          "urls": [
            "bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9",
            "dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/BeforeSwapDelta.sol": {
          "keccak256": "0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78",
          "urls": [
            "bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782",
            "dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/Currency.sol": {
          "keccak256": "0x4a0b84b282577ff6f8acf13ec9f4d32dbb9348748b49611d00e68bee96609c93",
          "urls": [
            "bzz-raw://45f9d62ab3d51b52957279e353853ba1547c3182c9a1e3d1846ada4a90263b01",
            "dweb:/ipfs/QmS8NG84ccQS1yXVD8cv3eKX7J1UKxuJhbUfHTQR2opKF5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/PoolId.sol": {
          "keccak256": "0x308311916ea0f5c2fd878b6a2751eb223d170a69e33f601fae56dfe3c5d392af",
          "urls": [
            "bzz-raw://669c2cd7ac17690b5d8831e0bda72822376c3a04b36afed6d31df4d75fe60918",
            "dweb:/ipfs/QmT6EpkxqU8VF3WsgrZ66F3s1cCQRffR95z1HDYZz7ph6y"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/PoolKey.sol": {
          "keccak256": "0xf89856e0580d7a4856d3187a76858377ccee9d59702d230c338d84388221b786",
          "urls": [
            "bzz-raw://6f3118fa189025695c37fdf0bdd1190f085ad097484d3c88cf4c56d1db65f639",
            "dweb:/ipfs/QmamXpgtB8GV1CaFLvqefPWSoikLDhMk1yU4heBnVzU8gi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/PoolOperation.sol": {
          "keccak256": "0x7a1a107fc1f2208abb2c9364c8c54e56e98dca27673e9441bed2b949b6382162",
          "urls": [
            "bzz-raw://4ad2470383bc5595d5af17840c64971f457adac68895a4db41ba5c71a4478e07",
            "dweb:/ipfs/QmdwKhBHDZFuqXrR2BfDBD9r7rB2ULGQBznsajRTkTmL4c"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/Slot0.sol": {
          "keccak256": "0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b",
          "urls": [
            "bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8",
            "dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-hooks-public/src/base/BaseHook.sol": {
          "keccak256": "0x148c72be0b0ac82664090d23ead3dda27410845afa809273c4d6956bc87a0c2c",
          "urls": [
            "bzz-raw://c7c80c77d9abbf610070edebb55d7d107bb30e5d69efba8c4c26b85dba249e7a",
            "dweb:/ipfs/QmTZR77BMjguXEjxex9PmtPGNnViwHpn6KYTEsVTQ4iMDD"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/lib/permit2/src/interfaces/IAllowanceTransfer.sol": {
          "keccak256": "0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29",
          "urls": [
            "bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0",
            "dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/lib/permit2/src/interfaces/IEIP712.sol": {
          "keccak256": "0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138",
          "urls": [
            "bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72",
            "dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/base/ImmutableState.sol": {
          "keccak256": "0x1867c9fa2f9b4fa73bab0fcdc9d19ccef4eeac552273d8b84a170cd1cc90350a",
          "urls": [
            "bzz-raw://af2d699b439e13b599632fddfe82718aebd41055fba7c075f186675c588d1337",
            "dweb:/ipfs/Qmc111gckSKb9aESn3wRFLeLiS4KGujaUcaYJgRnCRfwQU"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IEIP712_v4.sol": {
          "keccak256": "0xd7f7115476e307a0bfc32a0f0a0f5434e9e5ca62a6c5af1e18b75e48161bb408",
          "urls": [
            "bzz-raw://b1600b953556da38a7adc5ad2a2925ec5fb138fecf8eec48743646543195b736",
            "dweb:/ipfs/QmarZi2aiLVAfHXgnDWV1cCFiZk2DdPW7KJnWHqzuRChJR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IERC721Permit_v4.sol": {
          "keccak256": "0x103adbba724ef536abc536fe8a4d7dc12880724c562109b69f2adce4a91fa017",
          "urls": [
            "bzz-raw://06f51b5a5a218e0bc866a83e7821be53c9db9de0ca921f16abd3d13ea0eab69d",
            "dweb:/ipfs/QmbnhLy992hpQZyphTkj7fpr6jKKVva2AzfmLiDZEuqHAk"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IImmutableState.sol": {
          "keccak256": "0x36ab3100e87457ecf04887f4f540e34fd7f21d8e3b83880cb679239e60b7b06b",
          "urls": [
            "bzz-raw://7f290c7ce8e4832608d637a51b13dff95abecf6549485448e647a11c8ed01341",
            "dweb:/ipfs/QmfD1R6mTp8j4EjQXmQZW3vCh11EYFjnvoaw8rXRP27mMq"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IMulticall_v4.sol": {
          "keccak256": "0x336bec303f7ff86497d2679464c5adad5040f412b3d0769ce5e1d2a42f7e2c08",
          "urls": [
            "bzz-raw://7734f047d98d331c8abc51ad9f358ceee0a6dcae8d89ac49084b84de0d2d42e7",
            "dweb:/ipfs/QmWij2h7mU36LsXhb9P6pkYXrSCua4ixeWaVFSrsEcEmPQ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/INotifier.sol": {
          "keccak256": "0xfdc5187a98240a1691aae98b7dd2444d4c2bfb4746f3c34de9f3d18399c17c5e",
          "urls": [
            "bzz-raw://683af56401ec4f8817e8dfe150e7b3febaf0baaf40efe8d0d0475f735275f746",
            "dweb:/ipfs/QmRQ6S3nFnSc2jjDcQTvUJdTf4xKPojmvCkpvgyr6qTuVV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IPermit2Forwarder.sol": {
          "keccak256": "0xfad472937280e861125ff12aa6f9c2cf7440fbb20a2cc29485c24662ad4279c5",
          "urls": [
            "bzz-raw://31bfbc331f5972fc373d9469fd1ca1d14818db3275f21b7b590f20820cb4439d",
            "dweb:/ipfs/QmX3Bv9wfYpAFZKBcxKsQSXUrSC8mqNBdzh6XVMS72aNx9"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IPoolInitializer_v4.sol": {
          "keccak256": "0x2e4feda94650a2642039e0309ffdec480ee050bc40864bf5e1dba42bb4dc9e98",
          "urls": [
            "bzz-raw://964c178b4da8bab9ef898b94bb26d7c17cc44c5cf20485f55dcf5e9c7e1b1d92",
            "dweb:/ipfs/QmVd2c3SYteyr5xZgUS4sDAiZF43dLwVAEKdCfvQbkZpRJ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IPositionManager.sol": {
          "keccak256": "0x4ee45da4de6eada7f85c3e167ed3b3957a8591b2ebc195da5c9fbd9669223de3",
          "urls": [
            "bzz-raw://a604665c0c9e4a8b7b09a0b93c9c00e2f98322f9b5b5288553837dfba2c80648",
            "dweb:/ipfs/QmYZ2DLw98PMobepsjUzT8y9sFXL7a8nXzCGgpeu3FYBgx"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/ISubscriber.sol": {
          "keccak256": "0x34ceadec4a63019680e543fe73197f198a55c825d86e18f327840354760b57e7",
          "urls": [
            "bzz-raw://31734feafe1fe162a0702ddf862fcc3bd97505931afb3c685033c0185d898051",
            "dweb:/ipfs/QmQEANYVyaXTNzXKcjUVfPhLU71Bix5vxQH75BpPWMkWgw"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IUnorderedNonce.sol": {
          "keccak256": "0xd7f32fee74dc7d1a3b078ca1263961baccaa6bf434c79e8fe0e092e30c3e0ec3",
          "urls": [
            "bzz-raw://e7d1e92d89d5f49c84aa82f3b259678c2c97a4473b22d753ca4411a6b0cec36d",
            "dweb:/ipfs/QmNZoQyminStaAdaLqoDLoWaBU5QWrWjXFjmBm4aFhzL8i"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/libraries/Actions.sol": {
          "keccak256": "0xaeeaf62b8dbfe5b0f6ebbea891622f6ca15df8ba8b82a37cc9394df69a7ef975",
          "urls": [
            "bzz-raw://5dc7bdaf9420c5dcc4ea43b0201068dd467f242e5dc4e4f8c8e234df08ff4f41",
            "dweb:/ipfs/QmbpLmepau8dmtCRx56iPiB47gXHBPHY8Vjh4e3d1aH5Hu"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/libraries/LiquidityAmounts.sol": {
          "keccak256": "0xc1ed6daa98eee0330327cf8b98ded5172f904a0db107258f9ce571144803773d",
          "urls": [
            "bzz-raw://32285a7dd49dbc48e89157e6d064fbbe292de673baf7b00776f2d86fb8484e00",
            "dweb:/ipfs/QmQLmrc9KrTofxYzgmpqKfXEY351RzQAVKs1t3HTVWQdP5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/libraries/PositionInfoLibrary.sol": {
          "keccak256": "0xcc0b58aad30f51783d24f73a74064c1e488030fdb5e359bf435813034517c784",
          "urls": [
            "bzz-raw://4b7c493f68c12cc41c5e51be2833f997b09c2f011e2c1566cc8808ce4613714c",
            "dweb:/ipfs/QmbVJ7YNzTkAHkp9Ds4t5xboHk916zQx9uysWYvphLSSBp"
          ],
          "license": "MIT"
        }
      }
    },
    "ShilloV2GraduationExecutor": {
      "abi": [
        {
          "type": "constructor",
          "inputs": [
            {
              "name": "positionManager_",
              "type": "address",
              "internalType": "contract IPositionManager"
            },
            {
              "name": "permit2_",
              "type": "address",
              "internalType": "contract IAllowanceTransfer"
            },
            {
              "name": "locker_",
              "type": "address",
              "internalType": "contract ShilloV2LaunchLocker"
            },
            {
              "name": "factory_",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "receive",
          "stateMutability": "payable"
        },
        {
          "type": "function",
          "name": "factory",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "locker",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract ShilloV2LaunchLocker"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "mintFullRangePosition",
          "inputs": [
            {
              "name": "launchToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "key",
              "type": "tuple",
              "internalType": "struct PoolKey",
              "components": [
                {
                  "name": "currency0",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "currency1",
                  "type": "address",
                  "internalType": "Currency"
                },
                {
                  "name": "fee",
                  "type": "uint24",
                  "internalType": "uint24"
                },
                {
                  "name": "tickSpacing",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "hooks",
                  "type": "address",
                  "internalType": "contract IHooks"
                }
              ]
            },
            {
              "name": "tickLower",
              "type": "int24",
              "internalType": "int24"
            },
            {
              "name": "tickUpper",
              "type": "int24",
              "internalType": "int24"
            },
            {
              "name": "sqrtPriceX96",
              "type": "uint160",
              "internalType": "uint160"
            },
            {
              "name": "amount0Max",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "amount1Max",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "currency0",
              "type": "address",
              "internalType": "Currency"
            },
            {
              "name": "currency1",
              "type": "address",
              "internalType": "Currency"
            },
            {
              "name": "protocolFeeRecipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "payable"
        },
        {
          "type": "function",
          "name": "permit2",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IAllowanceTransfer"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "positionManager",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IPositionManager"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "event",
          "name": "GraduationDustRetained",
          "inputs": [
            {
              "name": "launchToken",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "currency",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "GraduationDustSwept",
          "inputs": [
            {
              "name": "launchToken",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "currency",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "FeeTransferFailed",
          "inputs": []
        },
        {
          "type": "error",
          "name": "MintAmountOverflow",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotFactory",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SafeERC20FailedOperation",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "SlippageExceeded",
          "inputs": [
            {
              "name": "actual",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "minimum",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "ZeroAddress",
          "inputs": []
        }
      ],
      "bytecode": "0x6101003461014257601f61128d38819003918201601f19168301916001600160401b03831184841017610146578084926080946040528339810103126101425780516001600160a01b03811691908281036101425760208201516001600160a01b03811693909190848303610142576040840151936001600160a01b038516908186036101425760600151956001600160a01b038716928388036101425715908115610139575b506101215715908115610130575b506101215760805260a05260c05260e052604051611132908161015b82396080518181816103d8015281816106b40152610bb0015260a0518181816106f50152610b1d015260c0518181816070015281816103390152610e63015260e05181818161015501526106700152f35b63d92e233d60e01b5f5260045ffd5b9050155f6100b4565b9050155f6100a6565b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c90816312261ee7146106e357508063791b98bc1461069f578063c45a01551461065b578063cbba1910146100a25763d7b96d4e0361000f573461009f578060031936011261009f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b506101c03660031901126104e957600435906001600160a01b03821682036104e95760a03660231901126104e95760c435918260020b928381036104e95760e435918260020b948584036104e95761010435956001600160a01b0387168088036104e957610164359761014435916001600160a01b038a16916101243591838c036104e95761018435986001600160a01b038a1692838b036104e9576101a4359b6001600160a01b038d168d036104e9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361064c576001600160801b038611801561063c575b61062d57876101ac6101a688956107d7565b926107d7565b9283836001600160a01b0380831690821611610622575b50506001600160a01b03831686116105bf5750506101e19350610f39565b935b83159283156105b0575b6101f78284610b04565b831561058457604051600160f91b6020820152600d60f81b6021820152600560fa1b60228201526003815261022d602382610724565b975b841561057b5760ff60035b16966102458861075a565b97610253604051998a610724565b808952610262601f199161075a565b015f5b81811061056a57505060405160209961027e8b83610724565b5f8252604051956024356001600160a01b038116908190036104e9578c8801526044356001600160a01b038116908190036104e957604088015260643562ffffff81168091036104e95760608801526084358060020b8091036104e957608088015260a4356001600160a01b03811695908690036104e95761037f966001600160801b0361037196819582948c9a60a08c015260c08b015260e08a015216610100880152166101208601521661014084015260018060a01b037f000000000000000000000000000000000000000000000000000000000000000016610160840152610180808401526101a0830190610772565b03601f198101835282610724565b61038885610796565b5261039284610796565b506040519083868301526040820152604081526103b0606082610724565b6103b9846107b7565b526103c3836107b7565b50610533575b506040805180840191909152927f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692918491610412906060840190610772565b92601f198385030160408401528151908185528085019481808460051b8301019401955f915b848310610501575050505050610457925003601f198101845283610724565b61012c4201918242116104ed57813b156104e9575f916104959160405180958194829363dd46508f60e01b8452604060048501526044840190610772565b906024830152039134905af180156104de576104c4575b506104bc836104c1959683610d07565b610d07565b80f35b6104c194505f6104d391610724565b5f93506104bc6104ac565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52601160045260245ffd5b919395509193848061051f600193601f198682030187528a51610772565b980193019301909288959396949296610438565b604051908382015230604082015260408152610550606082610724565b610559826107c7565b52610563816107c7565b505f6103c9565b806060602080938d01015201610265565b60ff600261023a565b604051600160f91b6020820152600d60f81b6021820152600281526105aa602282610724565b9761022f565b6105ba8186610b04565b6101ed565b919490939192906001600160a01b03821611156106165782916105e6916105ec9594610f39565b93610efc565b6001600160801b0381166001600160801b038316105f1461060f57505b936101e3565b9050610609565b91505061060992610efc565b945092505f806101c3565b633bb99a0560e21b5f5260045ffd5b506001600160801b038811610194565b631966391b60e11b5f5260045ffd5b346104e9575f3660031901126104e9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104e9575f3660031901126104e9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104e9575f3660031901126104e9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b90601f8019910116810190811067ffffffffffffffff82111761074657604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff81116107465760051b60200190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b8051156107a35760200190565b634e487b7160e01b5f52603260045260245ffd5b8051600110156107a35760400190565b8051600210156107a35760600190565b60020b908160ff1d82810118620d89e88111610af15763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116610ad5575b60048116610ab9575b60088116610a9d575b60108116610a81575b60208116610a65575b60408116610a49575b60808116610a2d575b6101008116610a11575b61020081166109f5575b61040081166109d9575b61080081166109bd575b61100081166109a1575b6120008116610985575b6140008116610969575b618000811661094d575b620100008116610931575b620200008116610916575b6204000081166108fb575b62080000166108e2575b5f126108da575b0160201c90565b5f19046108d3565b6b048a170391f7dc42444e8fa290910260801c906108cc565b6d2216e584f5fa1ea926041bedfe9890920260801c916108c2565b916e5d6af8dedb81196699c329225ee6040260801c916108b7565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c916108ac565b916f31be135f97d08fd981231505542fcfa60260801c916108a1565b916f70d869a156d2a1b890bb3df62baf32f70260801c91610897565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161088d565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91610883565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91610879565b916ff3392b0822b70005940c7a398e4b70f30260801c9161086f565b916ff987a7253ac413176f2b074cf7815e540260801c91610865565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161085b565b916ffe5dee046a99a2a811c461f1969c30530260801c91610851565b916fff2ea16466c96a3843ec78b326b528610260801c91610848565b916fff973b41fa98c081472e6896dfb254c00260801c9161083f565b916fffcb9843d60f6159c9db58835c9266440260801c91610836565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c9161082d565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91610824565b916ffff97272373d413259a46990580e213a0260801c9161081b565b826345c3193d60e11b5f5260045260245ffd5b60405163095ea7b360e01b5f9081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004819052602486905294931692919060209060448180875af19060015f5114821615610cb9575b60405215610c03575b61012c4201928342116104ed57803b156104e9575f928360849265ffffffffffff60405197889687956387517c4560e01b8752600487015260018060a01b037f000000000000000000000000000000000000000000000000000000000000000016602487015260018060a01b031660448601521660648401525af180156104de57610bf75750565b5f610c0191610724565b565b60405163095ea7b360e01b5f52836004525f60245260205f60448180875af19060015f5114821615610ca1575b60405215610c6d5760405163095ea7b360e01b5f52836004528160245260205f60448180875af19060015f5114821615610c80575b604052610b6f575b50635274afe760e01b5f5260045260245ffd5b906001811516610c9857833b15153d15161690610c65565b503d5f823e3d90fd5b906001811516610c9857833b15153d15161690610c30565b90833b15153d15161690610b66565b3d15610d02573d9067ffffffffffffffff82116107465760405191610cf7601f8201601f191660200184610724565b82523d5f602084013e565b606090565b6001600160a01b03909116918215918215610e995747915b8215610e92576001600160a01b03909116925f918291849190878714610e61575b8314610dbe57829182916001600160a01b03165af1610d5d610cc8565b505b15610d915760207f80a5a2ff8b8c5533e5862e4e161bbcade9af6fd9d67bef56a590b062107f027f91604051908152a3565b60207f667636bce2491e3f246c8b4ec1f4ca0be227dfa611d0575c59f5949283b433c191604051908152a3565b60405163a9059cbb60e01b602082019081526001600160a01b03909216602482015260448082018790528152909150610df8606482610724565b519082875af1610e06610cc8565b81610e12575b50610d5f565b809150518015918215610e28575b50505f610e0c565b6020821492509082610e3e575b50505f80610e20565b81925090602091810103126104e9576020015180151581036104e9575f80610e35565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169150610d40565b5050505050565b6040516370a0823160e01b8152306004820152602081602481885afa9081156104de575f91610eca575b5091610d1f565b90506020813d602011610ef4575b81610ee560209383610724565b810103126104e957515f610ec3565b3d9150610ed8565b610f3092610f2b9290916001600160a01b0380831690821611610f33575b90036001600160a01b031690610f86565b6110d9565b90565b90610f1a565b610f3092610f2b929091906001600160a01b0380821690831611610f80575b610f6e6001600160a01b03828116908416611010565b9190036001600160a01b031691611059565b90610f58565b90606082901b905f19600160601b8409928280851094039380850394858411156104e95714611009578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b11156104e9571461105057600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f19818509938380861095039480860395868511156104e957146110d1579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b906001600160801b0382168092036110ed57565b6393dafdf160e01b5f5260045ffdfea2646970667358221220751f300b901f27a5e1fcb3dd6046607e4eaa761873d9ad9e36f0d7c6e5eab40e64736f6c63430008230033",
      "runtime": "0x608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c90816312261ee7146106e357508063791b98bc1461069f578063c45a01551461065b578063cbba1910146100a25763d7b96d4e0361000f573461009f578060031936011261009f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b506101c03660031901126104e957600435906001600160a01b03821682036104e95760a03660231901126104e95760c435918260020b928381036104e95760e435918260020b948584036104e95761010435956001600160a01b0387168088036104e957610164359761014435916001600160a01b038a16916101243591838c036104e95761018435986001600160a01b038a1692838b036104e9576101a4359b6001600160a01b038d168d036104e9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361064c576001600160801b038611801561063c575b61062d57876101ac6101a688956107d7565b926107d7565b9283836001600160a01b0380831690821611610622575b50506001600160a01b03831686116105bf5750506101e19350610f39565b935b83159283156105b0575b6101f78284610b04565b831561058457604051600160f91b6020820152600d60f81b6021820152600560fa1b60228201526003815261022d602382610724565b975b841561057b5760ff60035b16966102458861075a565b97610253604051998a610724565b808952610262601f199161075a565b015f5b81811061056a57505060405160209961027e8b83610724565b5f8252604051956024356001600160a01b038116908190036104e9578c8801526044356001600160a01b038116908190036104e957604088015260643562ffffff81168091036104e95760608801526084358060020b8091036104e957608088015260a4356001600160a01b03811695908690036104e95761037f966001600160801b0361037196819582948c9a60a08c015260c08b015260e08a015216610100880152166101208601521661014084015260018060a01b037f000000000000000000000000000000000000000000000000000000000000000016610160840152610180808401526101a0830190610772565b03601f198101835282610724565b61038885610796565b5261039284610796565b506040519083868301526040820152604081526103b0606082610724565b6103b9846107b7565b526103c3836107b7565b50610533575b506040805180840191909152927f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692918491610412906060840190610772565b92601f198385030160408401528151908185528085019481808460051b8301019401955f915b848310610501575050505050610457925003601f198101845283610724565b61012c4201918242116104ed57813b156104e9575f916104959160405180958194829363dd46508f60e01b8452604060048501526044840190610772565b906024830152039134905af180156104de576104c4575b506104bc836104c1959683610d07565b610d07565b80f35b6104c194505f6104d391610724565b5f93506104bc6104ac565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52601160045260245ffd5b919395509193848061051f600193601f198682030187528a51610772565b980193019301909288959396949296610438565b604051908382015230604082015260408152610550606082610724565b610559826107c7565b52610563816107c7565b505f6103c9565b806060602080938d01015201610265565b60ff600261023a565b604051600160f91b6020820152600d60f81b6021820152600281526105aa602282610724565b9761022f565b6105ba8186610b04565b6101ed565b919490939192906001600160a01b03821611156106165782916105e6916105ec9594610f39565b93610efc565b6001600160801b0381166001600160801b038316105f1461060f57505b936101e3565b9050610609565b91505061060992610efc565b945092505f806101c3565b633bb99a0560e21b5f5260045ffd5b506001600160801b038811610194565b631966391b60e11b5f5260045ffd5b346104e9575f3660031901126104e9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104e9575f3660031901126104e9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104e9575f3660031901126104e9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b90601f8019910116810190811067ffffffffffffffff82111761074657604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff81116107465760051b60200190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b8051156107a35760200190565b634e487b7160e01b5f52603260045260245ffd5b8051600110156107a35760400190565b8051600210156107a35760600190565b60020b908160ff1d82810118620d89e88111610af15763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116610ad5575b60048116610ab9575b60088116610a9d575b60108116610a81575b60208116610a65575b60408116610a49575b60808116610a2d575b6101008116610a11575b61020081166109f5575b61040081166109d9575b61080081166109bd575b61100081166109a1575b6120008116610985575b6140008116610969575b618000811661094d575b620100008116610931575b620200008116610916575b6204000081166108fb575b62080000166108e2575b5f126108da575b0160201c90565b5f19046108d3565b6b048a170391f7dc42444e8fa290910260801c906108cc565b6d2216e584f5fa1ea926041bedfe9890920260801c916108c2565b916e5d6af8dedb81196699c329225ee6040260801c916108b7565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c916108ac565b916f31be135f97d08fd981231505542fcfa60260801c916108a1565b916f70d869a156d2a1b890bb3df62baf32f70260801c91610897565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161088d565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91610883565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91610879565b916ff3392b0822b70005940c7a398e4b70f30260801c9161086f565b916ff987a7253ac413176f2b074cf7815e540260801c91610865565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161085b565b916ffe5dee046a99a2a811c461f1969c30530260801c91610851565b916fff2ea16466c96a3843ec78b326b528610260801c91610848565b916fff973b41fa98c081472e6896dfb254c00260801c9161083f565b916fffcb9843d60f6159c9db58835c9266440260801c91610836565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c9161082d565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91610824565b916ffff97272373d413259a46990580e213a0260801c9161081b565b826345c3193d60e11b5f5260045260245ffd5b60405163095ea7b360e01b5f9081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004819052602486905294931692919060209060448180875af19060015f5114821615610cb9575b60405215610c03575b61012c4201928342116104ed57803b156104e9575f928360849265ffffffffffff60405197889687956387517c4560e01b8752600487015260018060a01b037f000000000000000000000000000000000000000000000000000000000000000016602487015260018060a01b031660448601521660648401525af180156104de57610bf75750565b5f610c0191610724565b565b60405163095ea7b360e01b5f52836004525f60245260205f60448180875af19060015f5114821615610ca1575b60405215610c6d5760405163095ea7b360e01b5f52836004528160245260205f60448180875af19060015f5114821615610c80575b604052610b6f575b50635274afe760e01b5f5260045260245ffd5b906001811516610c9857833b15153d15161690610c65565b503d5f823e3d90fd5b906001811516610c9857833b15153d15161690610c30565b90833b15153d15161690610b66565b3d15610d02573d9067ffffffffffffffff82116107465760405191610cf7601f8201601f191660200184610724565b82523d5f602084013e565b606090565b6001600160a01b03909116918215918215610e995747915b8215610e92576001600160a01b03909116925f918291849190878714610e61575b8314610dbe57829182916001600160a01b03165af1610d5d610cc8565b505b15610d915760207f80a5a2ff8b8c5533e5862e4e161bbcade9af6fd9d67bef56a590b062107f027f91604051908152a3565b60207f667636bce2491e3f246c8b4ec1f4ca0be227dfa611d0575c59f5949283b433c191604051908152a3565b60405163a9059cbb60e01b602082019081526001600160a01b03909216602482015260448082018790528152909150610df8606482610724565b519082875af1610e06610cc8565b81610e12575b50610d5f565b809150518015918215610e28575b50505f610e0c565b6020821492509082610e3e575b50505f80610e20565b81925090602091810103126104e9576020015180151581036104e9575f80610e35565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169150610d40565b5050505050565b6040516370a0823160e01b8152306004820152602081602481885afa9081156104de575f91610eca575b5091610d1f565b90506020813d602011610ef4575b81610ee560209383610724565b810103126104e957515f610ec3565b3d9150610ed8565b610f3092610f2b9290916001600160a01b0380831690821611610f33575b90036001600160a01b031690610f86565b6110d9565b90565b90610f1a565b610f3092610f2b929091906001600160a01b0380821690831611610f80575b610f6e6001600160a01b03828116908416611010565b9190036001600160a01b031691611059565b90610f58565b90606082901b905f19600160601b8409928280851094039380850394858411156104e95714611009578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b11156104e9571461105057600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f19818509938380861095039480860395868511156104e957146110d1579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b906001600160801b0382168092036110ed57565b6393dafdf160e01b5f5260045ffdfea2646970667358221220751f300b901f27a5e1fcb3dd6046607e4eaa761873d9ad9e36f0d7c6e5eab40e64736f6c63430008230033",
      "immutableReferences": {
        "3416": [
          {
            "start": 984,
            "length": 32
          },
          {
            "start": 1716,
            "length": 32
          },
          {
            "start": 2992,
            "length": 32
          }
        ],
        "3419": [
          {
            "start": 1781,
            "length": 32
          },
          {
            "start": 2845,
            "length": 32
          }
        ],
        "3422": [
          {
            "start": 112,
            "length": 32
          },
          {
            "start": 825,
            "length": 32
          },
          {
            "start": 3683,
            "length": 32
          }
        ],
        "3424": [
          {
            "start": 341,
            "length": 32
          },
          {
            "start": 1648,
            "length": 32
          }
        ]
      },
      "creationHash": "0xbc772524035719a631859daa4e648cfe73724415ac08a4789bd73d39ad77397d",
      "runtimeBytes": 4402,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/ShilloV2GraduationExecutor.sol": "ShilloV2GraduationExecutor"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloV2GraduationExecutor.sol": {
          "keccak256": "0xb7a6733a0817d203f89a239624d895f81399bb7264c46b2910f7ca4b9d5606da",
          "urls": [
            "bzz-raw://6559e1e07a8355423318223d31546c1a23699da213e1cd09311261a893f45eb8",
            "dweb:/ipfs/QmcybbZ7hzAqDzHRHRD1gYdXNYvLQd4dy1qRMFz1RhLaEu"
          ],
          "license": "MIT"
        },
        "src/ShilloV2LaunchLocker.sol": {
          "keccak256": "0x327c133adfa3eda4766eae2c025d4697f02568158b913b434b048b680a2babd5",
          "urls": [
            "bzz-raw://bf19c962f59d7de3332213e79ccc172b2d8c50d01b5369ca3b7ae53355a4e907",
            "dweb:/ipfs/QmbSoteV1gC4f6up94fuvZXntvNL4wZvUDUk9kECAn9819"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2.sol": {
          "keccak256": "0xa11234bcbb18e4b7ecc2a74ab571fac55c93be48e4e2940d56d8c365e7b58671",
          "urls": [
            "bzz-raw://05b58e8f851021be44e1523b78550ac00d5f043114fbd0a99199424401b7efc1",
            "dweb:/ipfs/QmPAViXH1FUydKFrLY9V1RaxQ7iZwF258Mx4PT76w6SvDn"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
          "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
          "urls": [
            "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
            "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
          "keccak256": "0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c",
          "urls": [
            "bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0",
            "dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
          "keccak256": "0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d",
          "urls": [
            "bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100",
            "dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
          "keccak256": "0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc",
          "urls": [
            "bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037",
            "dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
          "keccak256": "0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44",
          "urls": [
            "bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d",
            "dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol": {
          "keccak256": "0xd735962e3d6660884153ba8a972b5f100dde4c482f2ff1c525ba7fdefb154cbd",
          "urls": [
            "bzz-raw://5a264d17b093f585844b0d977e9f60555b8c8d6513b304fde863cdf652a0d336",
            "dweb:/ipfs/QmWXfaJisjVnrjTUjZGryZpMob9wKivvtbodLS3PTc1ttq"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
          "keccak256": "0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2",
          "urls": [
            "bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303",
            "dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
          "keccak256": "0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f",
          "urls": [
            "bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e",
            "dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
          "keccak256": "0x377051c0c17a28038c32f58d76a42817eb3b24f2b4c6a2e788a9544e856d738d",
          "urls": [
            "bzz-raw://c5365fead4a20b84662284c97c07d707c67f5bc9e07b371980aba8c3c6e83661",
            "dweb:/ipfs/QmYrYoLPEADtXoCu9ZBnwkXdNB9D9FPHuhS9pWaQW4nYx5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol": {
          "keccak256": "0xf78f05f3b8c9f75570e85300d7b4600d7f6f6a198449273f31d44c1641adb46f",
          "urls": [
            "bzz-raw://e28b872613b45e0e801d4995aa4380be2531147bfe2d85c1d6275f1de514fba3",
            "dweb:/ipfs/QmeeFcfShHYaS3BdgVj78nxR28ZaVUwbvr66ud8bT6kzw9"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol": {
          "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
          "urls": [
            "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
            "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
          "keccak256": "0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c",
          "urls": [
            "bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617",
            "dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IExtsload.sol": {
          "keccak256": "0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43",
          "urls": [
            "bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1",
            "dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IExttload.sol": {
          "keccak256": "0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937",
          "urls": [
            "bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8",
            "dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IHooks.sol": {
          "keccak256": "0xc131ffa2d04c10a012fe715fe2c115811526b7ea34285cf0a04ce7ce8320da8d",
          "urls": [
            "bzz-raw://3b212358897db5d99c21244d88f97b2e788527552cb430629b472a8cc6289aec",
            "dweb:/ipfs/QmQtwV4dDe2RYk2ErLpaAX7U82jWh1L6Lw2HRuKDvBi84G"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IPoolManager.sol": {
          "keccak256": "0xbdab3544da3d32dfdf7457baa94e17d5a3012952428559e013ffac45d067038e",
          "urls": [
            "bzz-raw://ce95ff864468e37c76adf71df061d4f3d6f3a5ec1f9bc3aea090463bc72798f4",
            "dweb:/ipfs/QmSbWh1pLbz51yQF4HEu5NRhr8XVv9JYGEw1hq1HudAnCi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/IProtocolFees.sol": {
          "keccak256": "0x32a666e588a2f66334430357bb1e2424fe7eebeb98a3364b1dd16eb6ccca9848",
          "urls": [
            "bzz-raw://85751d302125881f72e5f8af051c2d5d9b1f606ebaea8ca7d04fccdd27cc252d",
            "dweb:/ipfs/QmeRwomeh9NWm6A6fgNA4KZPQZHPpdKsPQyYsHSFmvud7J"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/external/IERC20Minimal.sol": {
          "keccak256": "0xeccadf1bf69ba2eb51f2fe4fa511bc7bb05bbd6b9f9a3cb8e5d83d9582613e0f",
          "urls": [
            "bzz-raw://118757369892687b99ef46ce28d6861f62c098285bd7687a4f17f7e44e5f81de",
            "dweb:/ipfs/QmUxqbYqQtcEwwFbb9e6BBMePEaSgN8C45v6RKubD4ib8d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/interfaces/external/IERC6909Claims.sol": {
          "keccak256": "0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48",
          "urls": [
            "bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f",
            "dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/BitMath.sol": {
          "keccak256": "0x51b9be4f5c4fd3e80cbc9631a65244a2eb2be250b6b7f128a2035080e18aee8d",
          "urls": [
            "bzz-raw://fe98bbd5498e912146b9319827fc63621eb66ff55d5baae0fa02a7a972ab8d1e",
            "dweb:/ipfs/QmY5hCuyrtgsJtk4AavrxcvBkRrChfr4N6ZnhdC8roPpNi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/CustomRevert.sol": {
          "keccak256": "0x111ed3031b6990c80a93ae35dde6b6ac0b7e6af471388fdd7461e91edda9b7de",
          "urls": [
            "bzz-raw://c9ea883c98d6ae1829160d0977bb5195761cfd5bc81692d0a941f45717f594cd",
            "dweb:/ipfs/QmZPwxzaeMNv536wzrAMrMswu7vMHuqPVpjcqL3YvCMoxt"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/FixedPoint96.sol": {
          "keccak256": "0xef5c3fd41aee26bb12aa1c32873cfee88e67eddfe7c2b32283786265ac669741",
          "urls": [
            "bzz-raw://4de298d02f662a1c36c7be0a150f18c2a161408a5d3e48432e707efd01fac9a4",
            "dweb:/ipfs/QmSiM4oeMmLVKmAtJXz2feYkv4R9ZcyBpkTRW5Nhw5KDyJ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/FullMath.sol": {
          "keccak256": "0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2",
          "urls": [
            "bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52",
            "dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/SafeCast.sol": {
          "keccak256": "0x42c4a24f996a14d358be397b71f7ec9d7daf666aaec78002c63315a6ee67aa86",
          "urls": [
            "bzz-raw://c3db86e2ba3679105fc32edec656c70282e1fede6cab11217702443f6c26fa59",
            "dweb:/ipfs/QmX4yaaSPdKQzYNRsezjTvZKsubzS8JRTEGFD3fPpTTCcj"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/TickMath.sol": {
          "keccak256": "0x4e1a11e154eb06106cb1c4598f06cca5f5ca16eaa33494ba2f0e74981123eca8",
          "urls": [
            "bzz-raw://a79a57f7b240783b045168d1c4f774ac1812caf8f9a83cb6959a86b0b07b6c70",
            "dweb:/ipfs/QmTb5kvxwDNW8jDuQaqdJ445cCFejNkUqEB17Bjo8UBiva"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/BalanceDelta.sol": {
          "keccak256": "0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f",
          "urls": [
            "bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9",
            "dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/BeforeSwapDelta.sol": {
          "keccak256": "0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78",
          "urls": [
            "bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782",
            "dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/Currency.sol": {
          "keccak256": "0x4a0b84b282577ff6f8acf13ec9f4d32dbb9348748b49611d00e68bee96609c93",
          "urls": [
            "bzz-raw://45f9d62ab3d51b52957279e353853ba1547c3182c9a1e3d1846ada4a90263b01",
            "dweb:/ipfs/QmS8NG84ccQS1yXVD8cv3eKX7J1UKxuJhbUfHTQR2opKF5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/PoolId.sol": {
          "keccak256": "0x308311916ea0f5c2fd878b6a2751eb223d170a69e33f601fae56dfe3c5d392af",
          "urls": [
            "bzz-raw://669c2cd7ac17690b5d8831e0bda72822376c3a04b36afed6d31df4d75fe60918",
            "dweb:/ipfs/QmT6EpkxqU8VF3WsgrZ66F3s1cCQRffR95z1HDYZz7ph6y"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/PoolKey.sol": {
          "keccak256": "0xf89856e0580d7a4856d3187a76858377ccee9d59702d230c338d84388221b786",
          "urls": [
            "bzz-raw://6f3118fa189025695c37fdf0bdd1190f085ad097484d3c88cf4c56d1db65f639",
            "dweb:/ipfs/QmamXpgtB8GV1CaFLvqefPWSoikLDhMk1yU4heBnVzU8gi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/PoolOperation.sol": {
          "keccak256": "0x7a1a107fc1f2208abb2c9364c8c54e56e98dca27673e9441bed2b949b6382162",
          "urls": [
            "bzz-raw://4ad2470383bc5595d5af17840c64971f457adac68895a4db41ba5c71a4478e07",
            "dweb:/ipfs/QmdwKhBHDZFuqXrR2BfDBD9r7rB2ULGQBznsajRTkTmL4c"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/lib/permit2/src/interfaces/IAllowanceTransfer.sol": {
          "keccak256": "0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29",
          "urls": [
            "bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0",
            "dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/lib/permit2/src/interfaces/IEIP712.sol": {
          "keccak256": "0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138",
          "urls": [
            "bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72",
            "dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IEIP712_v4.sol": {
          "keccak256": "0xd7f7115476e307a0bfc32a0f0a0f5434e9e5ca62a6c5af1e18b75e48161bb408",
          "urls": [
            "bzz-raw://b1600b953556da38a7adc5ad2a2925ec5fb138fecf8eec48743646543195b736",
            "dweb:/ipfs/QmarZi2aiLVAfHXgnDWV1cCFiZk2DdPW7KJnWHqzuRChJR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IERC721Permit_v4.sol": {
          "keccak256": "0x103adbba724ef536abc536fe8a4d7dc12880724c562109b69f2adce4a91fa017",
          "urls": [
            "bzz-raw://06f51b5a5a218e0bc866a83e7821be53c9db9de0ca921f16abd3d13ea0eab69d",
            "dweb:/ipfs/QmbnhLy992hpQZyphTkj7fpr6jKKVva2AzfmLiDZEuqHAk"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IImmutableState.sol": {
          "keccak256": "0x36ab3100e87457ecf04887f4f540e34fd7f21d8e3b83880cb679239e60b7b06b",
          "urls": [
            "bzz-raw://7f290c7ce8e4832608d637a51b13dff95abecf6549485448e647a11c8ed01341",
            "dweb:/ipfs/QmfD1R6mTp8j4EjQXmQZW3vCh11EYFjnvoaw8rXRP27mMq"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IMulticall_v4.sol": {
          "keccak256": "0x336bec303f7ff86497d2679464c5adad5040f412b3d0769ce5e1d2a42f7e2c08",
          "urls": [
            "bzz-raw://7734f047d98d331c8abc51ad9f358ceee0a6dcae8d89ac49084b84de0d2d42e7",
            "dweb:/ipfs/QmWij2h7mU36LsXhb9P6pkYXrSCua4ixeWaVFSrsEcEmPQ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/INotifier.sol": {
          "keccak256": "0xfdc5187a98240a1691aae98b7dd2444d4c2bfb4746f3c34de9f3d18399c17c5e",
          "urls": [
            "bzz-raw://683af56401ec4f8817e8dfe150e7b3febaf0baaf40efe8d0d0475f735275f746",
            "dweb:/ipfs/QmRQ6S3nFnSc2jjDcQTvUJdTf4xKPojmvCkpvgyr6qTuVV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IPermit2Forwarder.sol": {
          "keccak256": "0xfad472937280e861125ff12aa6f9c2cf7440fbb20a2cc29485c24662ad4279c5",
          "urls": [
            "bzz-raw://31bfbc331f5972fc373d9469fd1ca1d14818db3275f21b7b590f20820cb4439d",
            "dweb:/ipfs/QmX3Bv9wfYpAFZKBcxKsQSXUrSC8mqNBdzh6XVMS72aNx9"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IPoolInitializer_v4.sol": {
          "keccak256": "0x2e4feda94650a2642039e0309ffdec480ee050bc40864bf5e1dba42bb4dc9e98",
          "urls": [
            "bzz-raw://964c178b4da8bab9ef898b94bb26d7c17cc44c5cf20485f55dcf5e9c7e1b1d92",
            "dweb:/ipfs/QmVd2c3SYteyr5xZgUS4sDAiZF43dLwVAEKdCfvQbkZpRJ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IPositionManager.sol": {
          "keccak256": "0x4ee45da4de6eada7f85c3e167ed3b3957a8591b2ebc195da5c9fbd9669223de3",
          "urls": [
            "bzz-raw://a604665c0c9e4a8b7b09a0b93c9c00e2f98322f9b5b5288553837dfba2c80648",
            "dweb:/ipfs/QmYZ2DLw98PMobepsjUzT8y9sFXL7a8nXzCGgpeu3FYBgx"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/ISubscriber.sol": {
          "keccak256": "0x34ceadec4a63019680e543fe73197f198a55c825d86e18f327840354760b57e7",
          "urls": [
            "bzz-raw://31734feafe1fe162a0702ddf862fcc3bd97505931afb3c685033c0185d898051",
            "dweb:/ipfs/QmQEANYVyaXTNzXKcjUVfPhLU71Bix5vxQH75BpPWMkWgw"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/interfaces/IUnorderedNonce.sol": {
          "keccak256": "0xd7f32fee74dc7d1a3b078ca1263961baccaa6bf434c79e8fe0e092e30c3e0ec3",
          "urls": [
            "bzz-raw://e7d1e92d89d5f49c84aa82f3b259678c2c97a4473b22d753ca4411a6b0cec36d",
            "dweb:/ipfs/QmNZoQyminStaAdaLqoDLoWaBU5QWrWjXFjmBm4aFhzL8i"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/libraries/Actions.sol": {
          "keccak256": "0xaeeaf62b8dbfe5b0f6ebbea891622f6ca15df8ba8b82a37cc9394df69a7ef975",
          "urls": [
            "bzz-raw://5dc7bdaf9420c5dcc4ea43b0201068dd467f242e5dc4e4f8c8e234df08ff4f41",
            "dweb:/ipfs/QmbpLmepau8dmtCRx56iPiB47gXHBPHY8Vjh4e3d1aH5Hu"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/libraries/LiquidityAmounts.sol": {
          "keccak256": "0xc1ed6daa98eee0330327cf8b98ded5172f904a0db107258f9ce571144803773d",
          "urls": [
            "bzz-raw://32285a7dd49dbc48e89157e6d064fbbe292de673baf7b00776f2d86fb8484e00",
            "dweb:/ipfs/QmQLmrc9KrTofxYzgmpqKfXEY351RzQAVKs1t3HTVWQdP5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/libraries/PositionInfoLibrary.sol": {
          "keccak256": "0xcc0b58aad30f51783d24f73a74064c1e488030fdb5e359bf435813034517c784",
          "urls": [
            "bzz-raw://4b7c493f68c12cc41c5e51be2833f997b09c2f011e2c1566cc8808ce4613714c",
            "dweb:/ipfs/QmbVJ7YNzTkAHkp9Ds4t5xboHk916zQx9uysWYvphLSSBp"
          ],
          "license": "MIT"
        }
      }
    },
    "ShilloV2LaunchDeployer": {
      "abi": [
        {
          "type": "constructor",
          "inputs": [
            {
              "name": "factory_",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "deployLaunch",
          "inputs": [
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct LaunchDeployment",
              "components": [
                {
                  "name": "pairToken",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "creatorFeeRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "originalDeployer",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "feePolicy",
                  "type": "address",
                  "internalType": "contract IShilloV2FeePolicy"
                },
                {
                  "name": "policy",
                  "type": "tuple",
                  "internalType": "struct FeePolicySnapshot",
                  "components": [
                    {
                      "name": "protocolFeeRecipient",
                      "type": "address",
                      "internalType": "address"
                    },
                    {
                      "name": "protocolFeeShareBps",
                      "type": "uint16",
                      "internalType": "uint16"
                    },
                    {
                      "name": "buybackBurnBps",
                      "type": "uint16",
                      "internalType": "uint16"
                    },
                    {
                      "name": "hookFeeBps",
                      "type": "uint16",
                      "internalType": "uint16"
                    },
                    {
                      "name": "maxInternalPriceImpactBps",
                      "type": "uint16",
                      "internalType": "uint16"
                    }
                  ]
                },
                {
                  "name": "feeEscrow",
                  "type": "address",
                  "internalType": "contract IShilloV2FeeEscrow"
                },
                {
                  "name": "buybackVault",
                  "type": "address",
                  "internalType": "contract ShilloV2BuybackVault"
                },
                {
                  "name": "phantomQuote",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "curveFeeBps",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "creatorTaxBps",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "buybackEnabled",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "graduationThreshold",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "supply",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "internalType": "bytes32"
                },
                {
                  "name": "name",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "symbol",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "logo",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "description",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "socials",
                  "type": "tuple",
                  "internalType": "struct ShilloV2LauncherToken.Socials",
                  "components": [
                    {
                      "name": "twitter",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "telegram",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "discord",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "website",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "farcaster",
                      "type": "string",
                      "internalType": "string"
                    }
                  ]
                }
              ]
            }
          ],
          "outputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "curve",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "factory",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "predictLaunchAddresses",
          "inputs": [
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct LaunchDeployment",
              "components": [
                {
                  "name": "pairToken",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "creatorFeeRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "originalDeployer",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "feePolicy",
                  "type": "address",
                  "internalType": "contract IShilloV2FeePolicy"
                },
                {
                  "name": "policy",
                  "type": "tuple",
                  "internalType": "struct FeePolicySnapshot",
                  "components": [
                    {
                      "name": "protocolFeeRecipient",
                      "type": "address",
                      "internalType": "address"
                    },
                    {
                      "name": "protocolFeeShareBps",
                      "type": "uint16",
                      "internalType": "uint16"
                    },
                    {
                      "name": "buybackBurnBps",
                      "type": "uint16",
                      "internalType": "uint16"
                    },
                    {
                      "name": "hookFeeBps",
                      "type": "uint16",
                      "internalType": "uint16"
                    },
                    {
                      "name": "maxInternalPriceImpactBps",
                      "type": "uint16",
                      "internalType": "uint16"
                    }
                  ]
                },
                {
                  "name": "feeEscrow",
                  "type": "address",
                  "internalType": "contract IShilloV2FeeEscrow"
                },
                {
                  "name": "buybackVault",
                  "type": "address",
                  "internalType": "contract ShilloV2BuybackVault"
                },
                {
                  "name": "phantomQuote",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "curveFeeBps",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "creatorTaxBps",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "buybackEnabled",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "graduationThreshold",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "supply",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "internalType": "bytes32"
                },
                {
                  "name": "name",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "symbol",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "logo",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "description",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "socials",
                  "type": "tuple",
                  "internalType": "struct ShilloV2LauncherToken.Socials",
                  "components": [
                    {
                      "name": "twitter",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "telegram",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "discord",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "website",
                      "type": "string",
                      "internalType": "string"
                    },
                    {
                      "name": "farcaster",
                      "type": "string",
                      "internalType": "string"
                    }
                  ]
                }
              ]
            }
          ],
          "outputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "curve",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "error",
          "name": "Create2EmptyBytecode",
          "inputs": []
        },
        {
          "type": "error",
          "name": "FailedDeployment",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InsufficientBalance",
          "inputs": [
            {
              "name": "balance",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "needed",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "MetadataTooLong",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotFactory",
          "inputs": []
        }
      ],
      "bytecode": "0x60a03461009257601f6152f638819003918201601f19168301916001600160401b038311848410176100965780849260209460405283398101031261009257516001600160a01b03811680820361009257156100835760805260405161524b90816100ab8239608051818181604f0152818160920152818161043b01526107c60152f35b631966391b60e11b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80632bc63e611461027657806378b98955146100825763c45a01551461003a575f80fd5b3461007e575f36600319011261007e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461007e57610090366102b9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036102675760406100d061024083018361058c565b905011801561024e575b8015610234575b801561021a575b610177576102c0810161010061010761010183856105bf565b8061058c565b9050119081156101f5575b81156101d0575b81156101ab575b8115610186575b506101775761015a61013882610338565b61015461014d61014785610387565b83610842565b8094610626565b90610842565b604080516001600160a01b03928316815292909116602083015290f35b63216e38bd60e21b5f5260045ffd5b61010091506101986101a291846105bf565b608081019061058c565b90501182610127565b90506101006101c76101bd83856105bf565b606081019061058c565b90501190610120565b90506101006101ec6101e283856105bf565b604081019061058c565b90501190610119565b905061010061021161020783856105bf565b602081019061058c565b90501190610112565b5061080061022c6102a083018361058c565b9050116100e8565b5061020061024661028083018361058c565b9050116100e1565b50601061025f61026083018361058c565b9050116100da565b631966391b60e11b5f5260045ffd5b3461007e57610284366102b9565b61015a61029082610338565b6102ac61014d61029f85610387565b6020815191012083610562565b6020815191012090610562565b602060031982011261007e576004359067ffffffffffffffff821161007e576102e090829003600319011261007e5760040190565b356001600160a01b038116810361007e5790565b90601f8019910116810190811067ffffffffffffffff82111761032457604052565b634e487b7160e01b5f52604160045260245ffd5b610344604082016102ee565b604080516001600160a01b039092166020830190815261022090930135828201528152610372606082610302565b51902090565b359061ffff8216820361007e57565b612d799060405161039b6020840182610302565b828152602081019261089384396103b1826102ee565b6103bd602084016102ee565b60608401356001600160a01b03811692919083900361007e576101208501356001600160a01b038116939084900361007e576101408601356001600160a01b038116969087900361007e576101c08101359182151580930361007e57604080516001600160a01b0396871660208201908152958716918101919091527f000000000000000000000000000000000000000000000000000000000000000086166060820152608080820192909252939490820135908116929083900361007e5761055f976020966101e09460a087015261ffff61049b60a08601610378565b1660c087015261ffff6104b060c08601610378565b1660e087015261ffff6104c560e08601610378565b1661010087015261ffff6104dc6101008601610378565b166101208701526101408601526101608501526101608201356101808501526101808201356101a08501526101a08201356101c0850152828401520135610200820152610200815261053061022082610302565b6040519586945180918587015e840190838201905f8252519283915e01015f815203601f198101835282610302565b90565b90600b9160405191604083015260208201523081520160ff8153605590206001600160a01b031690565b903590601e198136030182121561007e570180359067ffffffffffffffff821161007e5760200191813603831361007e57565b903590609e198136030182121561007e570190565b908060209392818452848401375f828201840152601f01601f1916010190565b9035601e198236030181121561007e57016020813591019167ffffffffffffffff821161007e57813603831361007e57565b611c0a91604051916020840161063c9084610302565b838352602083019361360c853961065761024082018261058c565b9261066661026084018461058c565b93909161067761028083018361058c565b906106866102a085018561058c565b90916106966102c08701876105bf565b936106a3604088016102ee565b976040519a8b9a60208c019d6101208f526101408d01906106c3926105d4565b90601f198c83030160408d01526106d9926105d4565b90601f198a83030160608b01526106ef926105d4565b90601f19888303016080890152610705926105d4565b858103601f190160a08701529061071c81806105f4565b60a0845260a084019061072e926105d4565b61073b60208301836105f4565b848303602086015261074d92916105d4565b61075a60408301836105f4565b848303604086015261076c92916105d4565b61077960608301836105f4565b848303606086015261078b92916105d4565b9060808101610799916105f4565b909280830390608001526107ac926105d4565b6001600160a01b0393841660c086015290831660e08501527f0000000000000000000000000000000000000000000000000000000000000000909216610100840152610200013561012083015203601f198101825261080b9082610302565b604051938493518091602086015e83019060208201905f8252519283915e016020015f815203601f198101825261055f9082610302565b90805115610883576020815191015ff5906001600160a01b0382161561086457565b3d6108785763b06ebf3d60e01b5f5260045ffd5b6040513d5f823e3d90fd5b631328927760e21b5f5260045ffdfe610240604052346104a757604051612d7938819003601f8101601f191683016001600160401b038111848210176104ab578392829160405283398101039061020082126104a75761004f816104bf565b9161005c602083016104bf565b91610069604082016104bf565b606082015190926001600160a01b03821682036104a75760a090607f1901126104a75760405160a081016001600160401b038111828210176104ab576040526100b4608084016104bf565b81526100c260a084016104d3565b60208201526100d360c084016104d3565b60408201526100e460e084016104d3565b60608201526100f661010084016104d3565b6080820152610120830151956001600160a01b03871687036104a757610140840151926001600160a01b03841684036104a75761016085015191610180860151936101a0870151956101c08801519788151589036104a7576101e0015160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00559a6001600160a01b038b16158015610496575b610476576001600160a01b038516158015610485575b610476576001600160a01b038216156104765782516001600160a01b0316158015610463575b8015610450575b8015610440575b801561042c575b61040957878701808811610418576107d0106104095761ffff9460809485526001549a60a05260c05260e0526101005260018060a01b03815116610120528861014052826020820151166101605282604082015116610180520151166101a0526101c0526101e0526102005260ff60a01b90151560a01b169160018060a01b03169060018060a81b03191617176001556102205260405161289690816104e3823960805181818161042f0152818161170e015281816120690152818161210e01526126b5015260a051818181610230015281816107b001528181610af401528181610bc101528181610d7f015281816110ef015281816114b701526118e6015260c051818181610d1901526117b9015260e051818181610aaf015281816126e601526127870152610100518181816103a90152611d0e015261012051818181610e510152818161158c0152818161160001528181611cc601528181611da001526120320152610140518181816117520152611d78015261016051818181610ca40152818161150c01528181611bd701528181611f7801526122e40152610180518181816116b8015261231601526101a051818181610c650152611e9601526101c0518181816107710152818161083901528181610ee70152611a6501526101e05181818161059201528181610f36015281816113ff01526119720152610200518181816105c601528181610b3b01528181610f68015261143101526102205181818161085d0152610ce00152f35b637a34030f60e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5061271061ffff60808501511610156101db565b5061ffff608084015116156101d4565b5061271061ffff604085015116116101cd565b5061271061ffff602085015116116101c6565b63d92e233d60e01b5f5260045ffd5b506001600160a01b038116156101a0565b506001600160a01b038a161561018a565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036104a757565b519061ffff821682036104a75756fe60806040526004361015610011575f80fd5b5f5f3560e01c80630902f1ac146119d757806315a55347146119ba578063160d0da51461199557806324a9d8531461195b57806331ff7f22146118cb5780633729bb9a146117815780633cd1fb8f1461173d5780633de35b79146116f95780633f7ed6b7146116dc57806349127e2a1461169e5780634c37ef23146116815780634f1f58fd1461165d57806350e25ac21461164057806352920587146114a557806359a87bc114610e8057806364df049e14610e3b5780636783774b14610e1d5780637809452a14610dff5780637b04ea6214610d63578063808bcddc14610d485780638258903814610d035780638b0bc50114610cc85780639040f86614610c8957806390addc1e14610c4a5780639a9b567d14610ba05780639da771f414610b7c578063bf56b37114610b5e578063c1bb890114610b23578063c45a015514610ade578063c4b7de9714610a99578063c4d66de814610794578063c57eadfc14610759578063c68360a514610734578063ca52b0b714610716578063cbcb3171146106f1578063d04c698314610511578063d44bdfe7146104d2578063d5f39488146104a9578063d7e1ef391461047d578063db2bd5331461045f578063dc08e09414610419578063e7c2b772146103f6578063ed479c47146103d8578063f1f5c99314610393578063fc0c546a1461036c5763ff6d8d0514610214575f80fd5b346103695760203660031901126103695761022d6119fd565b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361035a576007549160ff831661034b576001600160a01b03811692831561033c57610283611b03565b1561032a57606060409460017ff8d37a90738ae063b8b8058b66f5880cf3cf7ab0c5d4fa78219696591dfbfb679360ff1916176007556102c1611f58565b60055494806005556006548095826006558761031b575b816102fe575b50505085519081528460208201528386820152a182519182526020820152f35b915461031392906001600160a01b0316612353565b5f84816102de565b6103258882612067565b6102d8565b6001620b9b5560e31b03198352600483fd5b63d92e233d60e01b8352600483fd5b63e6a0d45f60e01b8252600482fd5b631966391b60e11b8152600490fd5b80fd5b5034610369578060031936011261036957546040516001600160a01b039091168152602090f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346103695780600319360112610369576020600254604051908152f35b5034610369578060031936011261036957602060ff600754166040519015158152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158152602090f35b50346103695780600319360112610369576020600454604051908152f35b50346103695760203660031901126103695760206104a161049c6119fd565b611b1d565b604051908152f35b50346103695780600319360112610369576001546040516001600160a01b039091168152602090f35b50346103695760203660031901126103695760209060ff906040906001600160a01b036104fd6119fd565b168152600d84522054166040519015158152f35b50346103695761052036611a13565b909161052a611b87565b83546001600160a01b03169384156106e25760ff6007541680156106d4575b6106c55781156106b6576001600160a01b0383169283156106a7576105896105f99684610583610577611a57565b92909330903390612513565b8561224a565b916127106105b77f000000000000000000000000000000000000000000000000000000000000000085611ac6565b049687936105f46127106105eb7f000000000000000000000000000000000000000000000000000000000000000084611ac6565b04998a92611a4a565b611a4a565b9580871061068f575050948161065a86602098610637857f8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df97612299565b61064382600554611a4a565b60055561065287600654611a3d565b600655612067565b604080519485526020850187905284015260608301523391608090a360015f5160206128415f395f51905f5255604051908152f35b6371c4efed60e01b8252600487905260245260449150fd5b63d92e233d60e01b8252600482fd5b631f2a200560e01b8152600490fd5b63012d60bf60e11b8152600490fd5b506106dd611b03565b610549565b6321c4e35760e21b8152600490fd5b5034610369578060031936011261036957602061070c611a57565b9050604051908152f35b50346103695780600319360112610369576020600554604051908152f35b5034610369578060031936011261036957602061074f611b03565b6040519015158152f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610369576020366003190112610369576107ae6119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633819003610a8a578254916001600160a01b038316610a7c576001600160a01b0316918215610a6d576001600160a01b031916821783556040516318160ddd60e01b8152602081600481865afa908115610a17578491610a3b575b506108897f00000000000000000000000000000000000000000000000000000000000000006108827f000000000000000000000000000000000000000000000000000000000000000082611a3d565b9083612475565b80158015610a31575b610a225760085560095542600a556040516328712d6160e11b8152602081600481855afa908115610a175784916109e4575b50600b55604051636783774b60e01b815290602090829060049082905afa9081156109a75783916109b2575b50600c556040516370a0823160e01b8152306004820152602081602481855afa9081156109a7578391610951575b507f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e691602091600655604051908152a180f35b90506020813d60201161099f575b8161096c60209383611a90565b8101031261099b57517f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e661091e565b5f80fd5b3d915061095f565b6040513d85823e3d90fd5b90506020813d6020116109dc575b816109cd60209383611a90565b8101031261099b57515f6108f0565b3d91506109c0565b90506020813d602011610a0f575b816109ff60209383611a90565b8101031261099b575160046108c4565b3d91506109f2565b6040513d86823e3d90fd5b63bc0ecfe360e01b8552600485fd5b5081811015610892565b90506020813d602011610a65575b81610a5660209383611a90565b8101031261099b57515f610833565b3d9150610a49565b63d92e233d60e01b8452600484fd5b62dc149f60e41b8452600484fd5b631966391b60e11b8352600483fd5b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103695780600319360112610369576020600a54604051908152f35b50346103695780600319360112610369576020610b97611a57565b50604051908152f35b503461036957602036600319011261036957600435801515809103610c46577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610c37576001805460ff60a01b191660a083901b60ff60a01b161790556040519081527fbfe799fb5e0148a5f2590ff531306d42a5d512b74a5029ceb805abb808b0f1a090602090a180f35b631966391b60e11b8252600482fd5b5080fd5b5034610369578060031936011261036957602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610369578060031936011261036957602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461036957806003193601126103695760206104a1611ae3565b503461036957602036600319011261036957610d7d6119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610c37576001600160a01b031680156106a757600154816001600160a01b0382167f2cc664e1ac1e2d05c0d4637bb63ec8189113b6ac39276be8977e26216a8cdd198580a36001600160a01b0319161760015580f35b50346103695780600319360112610369576020600354604051908152f35b50346103695780600319360112610369576020600c54604051908152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50610e8a36611a13565b610e95929192611b87565b5f546001600160a01b0316156114965760ff600754166113e6576001600160a01b03811691821561148757610ec99061210c565b80156114785760ff600754166113e657610f1d610f14610f0b6005547f0000000000000000000000000000000000000000000000000000000000000000611a3d565b60025490611a4a565b60045490611a4a565b9360065494610f2b84611b1d565b92836113fd575b80947f000000000000000000000000000000000000000000000000000000000000000093610f608584611ac6565b6127109004937f000000000000000000000000000000000000000000000000000000000000000095610f928786611ac6565b612710900497610fa28187611ac6565b612710900497838d8a8c610fb68c8c611a4a565b90610fc091611a4a565b90610fca91611a4a565b91610fd49261224a565b9c6008548082115f146113f557610feb9082611a4a565b905b81156113e657818f116112bf575b50505050505061100b8188611ac6565b6110158a85611ac6565b106112a957509161108d8685936105f48b61109e9761105f8b61105a7fec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc4559d9c8a611a3d565b612299565b61106b85600554611a3d565b60055561107a82600654611a4a565b6006555f546001600160a01b0316612353565b8061126d575b508161123d57611a3d565b604080519485526020850187905284015260608301523391608090a36110c2611b03565b6110e3575b60209060015f5160206128415f395f51905f5255604051908152f35b5f546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116813b1561099b576040519063ff6d8d0560e01b825260048201525f8160248183865af19081611228575b5061118057509054602091906001600160a01b03167fe2cd2f31ebc05ec28640102987f4c8fc5f20e269e1b3aa82577f3f2f0e35c7c6835a604051908152a26110c7565b60208391602460018060a01b038454166040519687938492632f53ef2f60e01b845260048401525af1806111f6575b602093506111f057546001600160a01b03167fe2cd2f31ebc05ec28640102987f4c8fc5f20e269e1b3aa82577f3f2f0e35c7c6835a604051908152a26110c7565b506110c7565b6020843d602011611220575b8161120f60209383611a90565b8101031261099b57602093506111af565b3d9150611202565b6112359194505f90611a90565b5f925f61113c565b867f3bc39a5562b28f5fe8f36cecabfbaa12bb969acf05717994709225fc412a99346020604051858152a2611a3d565b6112a3906040518181527fa69e8258ccc7b9bbb70ab953fc2d1062b4ee28b8ca827534097e1732e87b026260203392a233612067565b5f611093565b886371c4efed60e01b5f5260045260245260445ffd5b949d509498509650975097508199801580156113dc575b6113cd576112e49083611ac6565b9161271083029280840461271014901517156113b95761130391611a4a565b61271081029080820461271014901517156113b95761132191611ad9565b600181018091116113b957866127100361271081116113b957866105f48661134893611a4a565b61135281836123d4565b9080156113a5576113906127106113886113786113989583979584809709151590611a3d565b8880821091180288189b8c611ac6565b04968a611ac6565b049688611ac6565b04935f8080808080610ffb565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b63bb55fd2760e01b5f5260045ffd5b50828211156112d6565b63012d60bf60e11b5f5260045ffd5b505f90610fed565b7f00000000000000000000000000000000000000000000000000000000000000006127100361271081116113b957611456907f000000000000000000000000000000000000000000000000000000000000000090611a4a565b60631981019081116113b957808511611470575b50610f32565b93505f61146a565b631f2a200560e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b6321c4e35760e21b5f5260045ffd5b3461099b575f36600319011261099b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036116315760025460045490801580611629575b6114785761153f60409261153a61271061153261ffff7f00000000000000000000000000000000000000000000000000000000000000001686611ac6565b048094611a4a565b611a3d565b5f6002555f6003555f6004556115606115588284611a3d565b600554611a4a565b600555816115fa575b806115de575b6001548351838152602081018390526001600160a01b03918216917f000000000000000000000000000000000000000000000000000000000000000016907f6460dc5c867a0678a8bcc5e64f629fae539901c53a4a8b42fe21d7a6c5e6437d908690a382519182526020820152f35b6001546115f59082906001600160a01b0316612067565b61156f565b611624827f0000000000000000000000000000000000000000000000000000000000000000612067565b611569565b5081156114f4565b631966391b60e11b5f5260045ffd5b3461099b575f36600319011261099b576020600b54604051908152f35b3461099b575f36600319011261099b5760206104a1610f1460055460025490611a4a565b3461099b575f36600319011261099b576020600654604051908152f35b3461099b575f36600319011261099b57602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461099b575f36600319011261099b576020600954604051908152f35b3461099b575f36600319011261099b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461099b575f36600319011261099b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461099b57602036600319011261099b5761179a611b87565b60ff600754166118bc57604051638a36a6bb60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156118b1575f9161186f575b506001600160a01b0316331415808061185a575b61184b5780611840575b6118315761181e600435611bbf565b60015f5160206128415f395f51905f5255005b630c736d4160e21b5f5260045ffd5b50600354151561180f565b63235084c360e21b5f5260045ffd5b506001546001600160a01b0316331415611805565b90506020813d6020116118a9575b8161188a60209383611a90565b8101031261099b57516001600160a01b038116810361099b57816117f1565b3d915061187d565b6040513d5f823e3d90fd5b63e6a0d45f60e01b5f5260045ffd5b3461099b57602036600319011261099b576118e46119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303611631576001600160a01b03165f818152600d60205260408120805460ff191660011790557fe4b7e48fbd47c2f602bacadee76ad33b16542ddb4997cfc0de04c311adcfa8c79080a2005b3461099b575f36600319011261099b5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461099b575f36600319011261099b57602060ff60015460a01c166040519015158152f35b3461099b575f36600319011261099b576020600854604051908152f35b3461099b575f36600319011261099b5760406119f1611a57565b82519182526020820152f35b600435906001600160a01b038216820361099b57565b606090600319011261099b5760043590602435906044356001600160a01b038116810361099b5790565b919082018092116113b957565b919082039182116113b957565b611a89610f14610f0b6005547f0000000000000000000000000000000000000000000000000000000000000000611a3d565b9060065490565b90601f8019910116810190811067ffffffffffffffff821117611ab257604052565b634e487b7160e01b5f52604160045260245ffd5b818102929181159184041417156113b957565b81156113a5570490565b60065460085480821115611afd57611afa91611a4a565b90565b50505f90565b60ff60075416611b1957611b15611ae3565b1590565b5f90565b6001600160a01b03165f908152600d602052604090205460ff16611b1957600b548015611b8257611b50600a5442611a4a565b600c5480821015611b7b57600e820291808304600e14901517156113b957611b7791611ad9565b1c90565b5050505f90565b505f90565b60025f5160206128415f395f51905f525414611bb05760025f5160206128415f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b60025490600454821580611f50575b611f4b5761ffff7f000000000000000000000000000000000000000000000000000000000000000016611c0f612710611c078387611ac6565b048095611a4a565b600354818082109118029384821890611c2d829561153a8486611a4a565b955f93148015611e54575b5050505f6002555f6003555f600455611c546115588587611a3d565b60055580611cef575b5050916060917f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f9382611cc0575b81611ca4575b60405192835260208301526040820152a1565b600154611cbb9083906001600160a01b03166126b0565b611c91565b611cea837f00000000000000000000000000000000000000000000000000000000000000006126b0565b611c8b565b92909391611cff84600654611a4a565b6006555f546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169691611d3f9187918991166125bb565b5f546001600160a01b031690863b1561099b5760405163892823f760e01b81526004810192909252602482018690526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660448401527f00000000000000000000000000000000000000000000000000000000000000001660648301526084820152945f90869060a490829084905af19485156118b15760406060957f5feba9b0d52c92ada4b9c571c2bee52390c54f2947208ab250221e6ee32f12ff927f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f98611e44575b508151908482526020820152a19193819350611c5d565b5f611e4e91611a90565b5f611e2d565b8196939592949615611f3c57611e68611a57565b90916127108702908782046127101417156113b957611e9190611e8b8885611a3d565b90611ad9565b61ffff7f0000000000000000000000000000000000000000000000000000000000000000161015611f05575b505084611edc57505090611ed091611a3d565b915f915b5f8080611c38565b848192959396945010611eef5750611ed4565b906371c4efed60e01b5f5260045260245260445ffd5b611f0f918661257c565b80151580611f2b575b611f23575b80611ebd565b94505f611f1d565b50611f34611ae3565b811115611f18565b633672d25f60e01b5f5260045ffd5b505050565b508015611bce565b60025460045481158061205f575b61205b57611fa6612710611f9e61ffff7f00000000000000000000000000000000000000000000000000000000000000001685611ac6565b048093611a4a565b91611fd46060927f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f94611a3d565b5f6002555f6003555f600455611fed6115588284611a3d565b6005558161202c575b80612010575b6040519182525f60208301526040820152a1565b6001546120279082906001600160a01b03166126b0565b611ffc565b612056827f00000000000000000000000000000000000000000000000000000000000000006126b0565b611ff6565b5050565b508015611f66565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316919082156120a4576120a292612353565b565b5f9250829182918291906001600160a01b03165af13d15612107573d67ffffffffffffffff8111611ab257604051906120e7601f8201601f191660200183611a90565b81525f60203d92013e5b156120f857565b6312171d8360e31b5f5260045ffd5b6120f1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169081156122285734612219576040516370a0823160e01b815230600482015290602082602481865afa9182156118b1575f926121e4575b5060249261217f602092303384612513565b6040516370a0823160e01b815230600482015293849182905afa80156118b1575f906121b0575b611afa9250611a4a565b506020823d6020116121dc575b816121ca60209383611a90565b8101031261099b57611afa91516121a6565b3d91506121bd565b9091506020813d602011612211575b8161220060209383611a90565b8101031261099b575190602461216d565b3d91506121f3565b63e0aeda7d60e01b5f5260045ffd5b80915034036122345790565b635e3b067f60e11b5f523460045260245260445ffd5b9091811561228a5782158015612282575b6113cd5761226a925f926127f8565b90811561227357565b6342301c2360e01b5f5260045ffd5b50801561225b565b63098fb56160e01b5f5260045ffd5b906122b5906122aa83600254611a3d565b600255600454611a3d565b60045560ff60015460a01c168061234a575b6122ce5750565b61271061233c612311612345938361230a61ffff7f00000000000000000000000000000000000000000000000000000000000000001683611ac6565b0490611a4a565b61ffff7f00000000000000000000000000000000000000000000000000000000000000001690611ac6565b04600354611a3d565b600355565b508015156122c7565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f51148216156123b3575b604052156123935750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b9060018115166123cb57823b15153d15161690612388565b503d5f823e3d90fd5b5f19612710820991612710820291828085109403938085039414612469578382111561245157612710829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b5090611afa9250611ad9565b90915f19838309928083029283808610950394808603951461250657848311156124ee5790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b82634e487b715f52156003026011186020526024601cfd5b505090611afa9250611ad9565b6040516323b872dd60e01b5f9081526001600160a01b039384166004529290931660245260449390935260209060648180865af19060015f5114821615612564575b6040525f606052156123935750565b9060018115166123cb57823b15153d15161690612555565b9091811580156125b3575b80156125ab575b80156125a4575b611b7b57611afa925f926127f8565b505f612595565b50801561258e565b508215612587565b916040519163095ea7b360e01b5f5260018060a01b031691826004528160245260205f60448180885af19060015f51148216156126a1575b6040521561260057505050565b60405163095ea7b360e01b5f52826004525f60245260205f60448180885af19060015f5114821615612689575b6040521561266b576040519163095ea7b360e01b5f5260045260245260205f60448180865af19060015f51148216156123b357604052156123935750565b635274afe760e01b5f9081526001600160a01b038416600452602490fd5b9060018115166123cb57843b15153d1516169061262d565b90843b15153d151616906125f3565b5f91907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316908115612781577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127198482856125bb565b803b1561277d578492918360649260405196879586946309ad4dd960e01b865260018060a01b03166004860152602485015260448401525af1801561277257612760575050565b61276b828092611a90565b6103695750565b6040513d84823e3d90fd5b8480fd5b919250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b1561099b576040516301aba89b60e71b81526001600160a01b03909216600483015290915f9183916024918391905af180156118b1576127ee5750565b5f6120a291611a90565b909192612710039061271082116113b95761281d9161281691611ac6565b9283611ac6565b9061271081029080820461271014901517156113b957611afa92611e8b91611a3d56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122090d551ca074a98195b1f59f2f6d365d2327eadf9b689d09c96dc1c9ec364991664736f6c6343000823003360e060405234610ecb57611c0a8038038061001981610ecf565b928339810161012082820312610ecb5781516001600160401b038111610ecb5781610045918401610ef4565b60208301516001600160401b038111610ecb5782610064918501610ef4565b60408401519092906001600160401b038111610ecb5781610086918601610ef4565b60608501516001600160401b038111610ecb57826100a5918701610ef4565b60808601519091906001600160401b038111610ecb5786019160a083850312610ecb576040519060a082016001600160401b038111838210176107255760405283516001600160401b038111610ecb5785610101918601610ef4565b825260208401516001600160401b038111610ecb5785610122918601610ef4565b6020830190815260408501519093906001600160401b038111610ecb578661014b918701610ef4565b6040840190815260608601519095906001600160401b038111610ecb5787610174918301610ef4565b6060850190815260808201519097906001600160401b038111610ecb5761019b9201610ef4565b9860808401998a526101af60a08201610f45565b6101bb60c08301610f45565b996101006101cb60e08501610f45565b9301518a51909a6001600160401b0382116107255760035490600182811c92168015610ec1575b60208310146107075781601f849311610e4b575b50602090601f8311600114610de5575f92610dda575b50508160011b915f199060031b1c1916176003555b8051906001600160401b0382116107255760045490600182811c92168015610dd0575b60208310146107075781601f849311610d5a575b50602090601f8311600114610cf4575f92610ce9575b50508160011b915f199060031b1c1916176004555b6001600160a01b038116158015610cd8575b8015610cc7575b610cb85760805260a05260c08890528051906001600160401b0382116107255760055490600182811c92168015610cae575b60208310146107075781601f849311610c54575b50602090601f8311600114610bee575f92610be3575b50508160011b915f199060031b1c1916176005555b8051906001600160401b0382116107255760065490600182811c92168015610bd9575b60208310146107075781601f849311610b63575b50602090601f8311600114610afd575f92610af2575b50508160011b915f199060031b1c1916176006555b518051906001600160401b0382116107255760075490600182811c92168015610ae8575b60208310146107075781601f849311610a72575b50602090601f8311600114610a0c575f92610a01575b50508160011b915f199060031b1c1916176007555b518051906001600160401b0382116107255760085490600182811c921680156109f7575b60208310146107075781601f849311610981575b50602090601f831160011461091b575f92610910575b50508160011b915f199060031b1c1916176008555b518051906001600160401b0382116107255760095490600182811c92168015610906575b60208310146107075781601f849311610890575b50602090601f831160011461082a575f9261081f575b50508160011b915f199060031b1c1916176009555b5180519093906001600160401b03811161072557600a54600181811c91168015610815575b602082101461070757601f81116107a7575b50602094601f8211600114610744579481929394955f92610739575b50508160011b915f199060031b1c191617600a555b5180519092906001600160401b03811161072557600b54600181811c9116801561071b575b602082101461070757601f8111610699575b506020601f821160011461063657819293945f9261062b575b50508160011b915f199060031b1c191617600b555b6001600160a01b031690811561061857600254908082018092116106045760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f9360025584845283825260408420818154019055604051908152a3604051610cb09081610f5a823960805181818161017b0152610211015260a0518161054d015260c051816104460152f35b634e487b7160e01b5f52601160045260245ffd5b63ec442f0560e01b5f525f60045260245ffd5b015190505f80610560565b601f19821690600b5f52805f20915f5b81811061068157509583600195969710610669575b505050811b01600b55610575565b01515f1960f88460031b161c191690555f808061065b565b9192602060018192868b015181550194019201610646565b8181111561054757600b5f52601f820160051c7f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9602084106106ff575b81601f9101920160051c03905f5b8281106106f2575050610547565b5f828201556001016106e4565b5f91506106d6565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610535565b634e487b7160e01b5f52604160045260245ffd5b015190505f806104fb565b601f19821695600a5f52805f20915f5b88811061078f57508360019596979810610777575b505050811b01600a55610510565b01515f1960f88460031b161c191690555f8080610769565b91926020600181928685015181550194019201610754565b818111156104df57600a5f52601f820160051c7fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a86020841061080d575b81601f9101920160051c03905f5b8281106108005750506104df565b5f828201556001016107f2565b5f91506107e4565b90607f16906104cd565b015190505f80610493565b60095f9081528281209350601f198516905b8181106108785750908460019594939210610860575b505050811b016009556104a8565b01515f1960f88460031b161c191690555f8080610852565b9293602060018192878601518155019501930161083c565b8281111561047d5760095f52909150601f830160051c7f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af602085106108fe575b849392601f0160051c82900391015f5b8281106108ee57505061047d565b5f818301558594506001016108e0565b5f91506108d0565b91607f1691610469565b015190505f80610430565b60085f9081528281209350601f198516905b8181106109695750908460019594939210610951575b505050811b01600855610445565b01515f1960f88460031b161c191690555f8080610943565b9293602060018192878601518155019501930161092d565b8281111561041a5760085f52909150601f830160051c7ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3602085106109ef575b849392601f0160051c82900391015f5b8281106109df57505061041a565b5f818301558594506001016109d1565b5f91506109c1565b91607f1691610406565b015190505f806103cd565b60075f9081528281209350601f198516905b818110610a5a5750908460019594939210610a42575b505050811b016007556103e2565b01515f1960f88460031b161c191690555f8080610a34565b92936020600181928786015181550195019301610a1e565b828111156103b75760075f52909150601f830160051c7fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68860208510610ae0575b849392601f0160051c82900391015f5b828110610ad05750506103b7565b5f81830155859450600101610ac2565b5f9150610ab2565b91607f16916103a3565b015190505f8061036a565b60065f9081528281209350601f198516905b818110610b4b5750908460019594939210610b33575b505050811b0160065561037f565b01515f1960f88460031b161c191690555f8080610b25565b92936020600181928786015181550195019301610b0f565b828111156103545760065f52909150601f830160051c7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f60208510610bd1575b849392601f0160051c82900391015f5b828110610bc1575050610354565b5f81830155859450600101610bb3565b5f9150610ba3565b91607f1691610340565b015190505f80610308565b60055f9081528281209350601f198516905b818110610c3c5750908460019594939210610c24575b505050811b0160055561031d565b01515f1960f88460031b161c191690555f8080610c16565b92936020600181928786015181550195019301610c00565b828111156102f25790915060055f5260205f20601f840160051c9060208510610ca6575b849392601f0160051c82900391015f5b828110610c965750506102f2565b5f81830155859450600101610c88565b5f9150610c78565b91607f16916102de565b63d92e233d60e01b5f5260045ffd5b506001600160a01b038216156102ac565b506001600160a01b038a16156102a5565b015190505f8061027e565b60045f9081528281209350601f198516905b818110610d425750908460019594939210610d2a575b505050811b01600455610293565b01515f1960f88460031b161c191690555f8080610d1c565b92936020600181928786015181550195019301610d06565b828111156102685760045f52909150601f830160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b60208510610dc8575b849392601f0160051c82900391015f5b828110610db8575050610268565b5f81830155859450600101610daa565b5f9150610d9a565b91607f1691610254565b015190505f8061021c565b60035f9081528281209350601f198516905b818110610e335750908460019594939210610e1b575b505050811b01600355610231565b01515f1960f88460031b161c191690555f8080610e0d565b92936020600181928786015181550195019301610df7565b828111156102065760035f52909150601f830160051c7fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60208510610eb9575b849392601f0160051c82900391015f5b828110610ea9575050610206565b5f81830155859450600101610e9b565b5f9150610e8b565b91607f16916101f2565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761072557604052565b81601f82011215610ecb578051906001600160401b03821161072557610f23601f8301601f1916602001610ecf565b9282845260208383010111610ecb57815f9260208093018386015e8301015290565b51906001600160a01b0382168203610ecb5756fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146106b1578063095ea7b31461060957806318160ddd146105ec57806323b872dd146105b4578063313ce5671461059957806342966c681461057c578063536dac9b1461053857806353cd512a146104ac57806370a08231146104755780637165485d146104315780637284e4161461041657806379cc6790146103e457806395d89b41146102f0578063a9059cbb146102bf578063abb1dc44146101aa578063d5f3948814610166578063dd62ed3e146101165763fb7f21eb146100df575f80fd5b34610112575f3660031901126101125761010e6100fa6108dc565b60405191829160208352602083019061076c565b0390f35b5f80fd5b346101125760403660031901126101125761012f610790565b6101376107a6565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610112575f36600319011261011257606060806040516101ca816107bc565b828152826020820152826040820152828082015201526102446101eb6108dc565b61010e6101f661080e565b610252610201610a3e565b9160405195869560018060a01b037f000000000000000000000000000000000000000000000000000000000000000016875260806020880152608087019061076c565b90858203604087015261076c565b838103606085015260806102ae61029c61028a610278865160a0875260a087019061076c565b6020870151868203602088015261076c565b6040860151858203604087015261076c565b6060850151848203606086015261076c565b92015190608081840391015261076c565b34610112576040366003190112610112576102e56102db610790565b6024359033610b39565b602060405160018152f35b34610112575f366003190112610112576040515f6004548060011c906001811680156103da575b6020831081146103c6578285529081156103a25750600114610344575b61010e836100fa818503826107ec565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610388575090915081016020016100fa610334565b919260018160209254838588010152019101909291610370565b60ff191660208086019190915291151560051b840190910191506100fa9050610334565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610317565b3461011257604036600319011261011257610414610400610790565b6024359061040f823383610a96565b610bf6565b005b34610112575f3660031901126101125761010e6100fa61080e565b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610112576020366003190112610112576001600160a01b03610496610790565b165f525f602052602060405f2054604051908152f35b34610112575f366003190112610112576105006104c7610a3e565b61010e81519161052a60208201519161051c604082015161050e6080606085015194015195604051998a9960a08b5260a08b019061076c565b9089820360208b015261076c565b90878203604089015261076c565b90858203606087015261076c565b90838203608085015261076c565b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101125760203660031901126101125761041460043533610bf6565b34610112575f36600319011261011257602060405160128152f35b34610112576060366003190112610112576102e56105d0610790565b6105d86107a6565b604435916105e7833383610a96565b610b39565b34610112575f366003190112610112576020600254604051908152f35b3461011257604036600319011261011257610622610790565b60243590331561069e576001600160a01b031690811561068b57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b34610112575f366003190112610112576040515f6003548060011c90600181168015610762575b6020831081146103c6578285529081156103a257506001146107045761010e836100fa818503826107ec565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610748575090915081016020016100fa610334565b919260018160209254838588010152019101909291610730565b91607f16916106d8565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361011257565b602435906001600160a01b038216820361011257565b60a0810190811067ffffffffffffffff8211176107d857604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107d857604052565b604051905f6006548060011c91600182169182156108d2575b6020841083146103c65783865285929081156108b35750600114610854575b610852925003836107ec565b565b5060065f90815290917ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b81831061089757505090602061085292820101610846565b602091935080600191548385890101520191019091849261087f565b6020925061085294915060ff191682840152151560051b820101610846565b92607f1692610827565b604051905f6005548060011c916001821691821561097e575b6020841083146103c65783865285929081156108b3575060011461091f57610852925003836107ec565b5060055f90815290917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b81831061096257505090602061085292820101610846565b602091935080600191548385890101520191019091849261094a565b92607f16926108f5565b90604051915f8154908160011c9260018316928315610a34575b6020851084146103c6578487528693908115610a1257506001146109ce575b50610852925003836107ec565b90505f9291925260205f20905f915b8183106109f6575050906020610852928201015f6109c1565b60209193508060019154838589010152019101909184926109dd565b90506020925061085294915060ff191682840152151560051b8201015f6109c1565b93607f16936109a2565b60405190610a4b826107bc565b81610a566007610988565b8152610a626008610988565b6020820152610a716009610988565b6040820152610a80600a610988565b60608201526080610a91600b610988565b910152565b6001600160a01b039081165f818152600160209081526040808320948616835293905291909120549291905f198410610ad0575b50505050565b828410610b1657801561069e576001600160a01b0382161561068b575f52600160205260405f209060018060a01b03165f5260205260405f20910390555f808080610aca565b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b0316908115610be3576001600160a01b0316918215610bd057815f525f60205260405f2054818110610bb757817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b9091906001600160a01b03168015610be357805f525f60205260405f2054838110610c60576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587528684520360408620558060025403600255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffdfea26469706673582212205b69a4c6d3de5081d5dc10419b6e7f3fff48efa253a6ed487df140ecf31dacfa64736f6c63430008230033a2646970667358221220c779bb5dbc77ae7d319928b4de3be0686647eb9c5ba2faf660fe346fa008c47f64736f6c63430008230033",
      "runtime": "0x60806040526004361015610011575f80fd5b5f3560e01c80632bc63e611461027657806378b98955146100825763c45a01551461003a575f80fd5b3461007e575f36600319011261007e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461007e57610090366102b9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036102675760406100d061024083018361058c565b905011801561024e575b8015610234575b801561021a575b610177576102c0810161010061010761010183856105bf565b8061058c565b9050119081156101f5575b81156101d0575b81156101ab575b8115610186575b506101775761015a61013882610338565b61015461014d61014785610387565b83610842565b8094610626565b90610842565b604080516001600160a01b03928316815292909116602083015290f35b63216e38bd60e21b5f5260045ffd5b61010091506101986101a291846105bf565b608081019061058c565b90501182610127565b90506101006101c76101bd83856105bf565b606081019061058c565b90501190610120565b90506101006101ec6101e283856105bf565b604081019061058c565b90501190610119565b905061010061021161020783856105bf565b602081019061058c565b90501190610112565b5061080061022c6102a083018361058c565b9050116100e8565b5061020061024661028083018361058c565b9050116100e1565b50601061025f61026083018361058c565b9050116100da565b631966391b60e11b5f5260045ffd5b3461007e57610284366102b9565b61015a61029082610338565b6102ac61014d61029f85610387565b6020815191012083610562565b6020815191012090610562565b602060031982011261007e576004359067ffffffffffffffff821161007e576102e090829003600319011261007e5760040190565b356001600160a01b038116810361007e5790565b90601f8019910116810190811067ffffffffffffffff82111761032457604052565b634e487b7160e01b5f52604160045260245ffd5b610344604082016102ee565b604080516001600160a01b039092166020830190815261022090930135828201528152610372606082610302565b51902090565b359061ffff8216820361007e57565b612d799060405161039b6020840182610302565b828152602081019261089384396103b1826102ee565b6103bd602084016102ee565b60608401356001600160a01b03811692919083900361007e576101208501356001600160a01b038116939084900361007e576101408601356001600160a01b038116969087900361007e576101c08101359182151580930361007e57604080516001600160a01b0396871660208201908152958716918101919091527f000000000000000000000000000000000000000000000000000000000000000086166060820152608080820192909252939490820135908116929083900361007e5761055f976020966101e09460a087015261ffff61049b60a08601610378565b1660c087015261ffff6104b060c08601610378565b1660e087015261ffff6104c560e08601610378565b1661010087015261ffff6104dc6101008601610378565b166101208701526101408601526101608501526101608201356101808501526101808201356101a08501526101a08201356101c0850152828401520135610200820152610200815261053061022082610302565b6040519586945180918587015e840190838201905f8252519283915e01015f815203601f198101835282610302565b90565b90600b9160405191604083015260208201523081520160ff8153605590206001600160a01b031690565b903590601e198136030182121561007e570180359067ffffffffffffffff821161007e5760200191813603831361007e57565b903590609e198136030182121561007e570190565b908060209392818452848401375f828201840152601f01601f1916010190565b9035601e198236030181121561007e57016020813591019167ffffffffffffffff821161007e57813603831361007e57565b611c0a91604051916020840161063c9084610302565b838352602083019361360c853961065761024082018261058c565b9261066661026084018461058c565b93909161067761028083018361058c565b906106866102a085018561058c565b90916106966102c08701876105bf565b936106a3604088016102ee565b976040519a8b9a60208c019d6101208f526101408d01906106c3926105d4565b90601f198c83030160408d01526106d9926105d4565b90601f198a83030160608b01526106ef926105d4565b90601f19888303016080890152610705926105d4565b858103601f190160a08701529061071c81806105f4565b60a0845260a084019061072e926105d4565b61073b60208301836105f4565b848303602086015261074d92916105d4565b61075a60408301836105f4565b848303604086015261076c92916105d4565b61077960608301836105f4565b848303606086015261078b92916105d4565b9060808101610799916105f4565b909280830390608001526107ac926105d4565b6001600160a01b0393841660c086015290831660e08501527f0000000000000000000000000000000000000000000000000000000000000000909216610100840152610200013561012083015203601f198101825261080b9082610302565b604051938493518091602086015e83019060208201905f8252519283915e016020015f815203601f198101825261055f9082610302565b90805115610883576020815191015ff5906001600160a01b0382161561086457565b3d6108785763b06ebf3d60e01b5f5260045ffd5b6040513d5f823e3d90fd5b631328927760e21b5f5260045ffdfe610240604052346104a757604051612d7938819003601f8101601f191683016001600160401b038111848210176104ab578392829160405283398101039061020082126104a75761004f816104bf565b9161005c602083016104bf565b91610069604082016104bf565b606082015190926001600160a01b03821682036104a75760a090607f1901126104a75760405160a081016001600160401b038111828210176104ab576040526100b4608084016104bf565b81526100c260a084016104d3565b60208201526100d360c084016104d3565b60408201526100e460e084016104d3565b60608201526100f661010084016104d3565b6080820152610120830151956001600160a01b03871687036104a757610140840151926001600160a01b03841684036104a75761016085015191610180860151936101a0870151956101c08801519788151589036104a7576101e0015160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00559a6001600160a01b038b16158015610496575b610476576001600160a01b038516158015610485575b610476576001600160a01b038216156104765782516001600160a01b0316158015610463575b8015610450575b8015610440575b801561042c575b61040957878701808811610418576107d0106104095761ffff9460809485526001549a60a05260c05260e0526101005260018060a01b03815116610120528861014052826020820151166101605282604082015116610180520151166101a0526101c0526101e0526102005260ff60a01b90151560a01b169160018060a01b03169060018060a81b03191617176001556102205260405161289690816104e3823960805181818161042f0152818161170e015281816120690152818161210e01526126b5015260a051818181610230015281816107b001528181610af401528181610bc101528181610d7f015281816110ef015281816114b701526118e6015260c051818181610d1901526117b9015260e051818181610aaf015281816126e601526127870152610100518181816103a90152611d0e015261012051818181610e510152818161158c0152818161160001528181611cc601528181611da001526120320152610140518181816117520152611d78015261016051818181610ca40152818161150c01528181611bd701528181611f7801526122e40152610180518181816116b8015261231601526101a051818181610c650152611e9601526101c0518181816107710152818161083901528181610ee70152611a6501526101e05181818161059201528181610f36015281816113ff01526119720152610200518181816105c601528181610b3b01528181610f68015261143101526102205181818161085d0152610ce00152f35b637a34030f60e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5061271061ffff60808501511610156101db565b5061ffff608084015116156101d4565b5061271061ffff604085015116116101cd565b5061271061ffff602085015116116101c6565b63d92e233d60e01b5f5260045ffd5b506001600160a01b038116156101a0565b506001600160a01b038a161561018a565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036104a757565b519061ffff821682036104a75756fe60806040526004361015610011575f80fd5b5f5f3560e01c80630902f1ac146119d757806315a55347146119ba578063160d0da51461199557806324a9d8531461195b57806331ff7f22146118cb5780633729bb9a146117815780633cd1fb8f1461173d5780633de35b79146116f95780633f7ed6b7146116dc57806349127e2a1461169e5780634c37ef23146116815780634f1f58fd1461165d57806350e25ac21461164057806352920587146114a557806359a87bc114610e8057806364df049e14610e3b5780636783774b14610e1d5780637809452a14610dff5780637b04ea6214610d63578063808bcddc14610d485780638258903814610d035780638b0bc50114610cc85780639040f86614610c8957806390addc1e14610c4a5780639a9b567d14610ba05780639da771f414610b7c578063bf56b37114610b5e578063c1bb890114610b23578063c45a015514610ade578063c4b7de9714610a99578063c4d66de814610794578063c57eadfc14610759578063c68360a514610734578063ca52b0b714610716578063cbcb3171146106f1578063d04c698314610511578063d44bdfe7146104d2578063d5f39488146104a9578063d7e1ef391461047d578063db2bd5331461045f578063dc08e09414610419578063e7c2b772146103f6578063ed479c47146103d8578063f1f5c99314610393578063fc0c546a1461036c5763ff6d8d0514610214575f80fd5b346103695760203660031901126103695761022d6119fd565b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361035a576007549160ff831661034b576001600160a01b03811692831561033c57610283611b03565b1561032a57606060409460017ff8d37a90738ae063b8b8058b66f5880cf3cf7ab0c5d4fa78219696591dfbfb679360ff1916176007556102c1611f58565b60055494806005556006548095826006558761031b575b816102fe575b50505085519081528460208201528386820152a182519182526020820152f35b915461031392906001600160a01b0316612353565b5f84816102de565b6103258882612067565b6102d8565b6001620b9b5560e31b03198352600483fd5b63d92e233d60e01b8352600483fd5b63e6a0d45f60e01b8252600482fd5b631966391b60e11b8152600490fd5b80fd5b5034610369578060031936011261036957546040516001600160a01b039091168152602090f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346103695780600319360112610369576020600254604051908152f35b5034610369578060031936011261036957602060ff600754166040519015158152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158152602090f35b50346103695780600319360112610369576020600454604051908152f35b50346103695760203660031901126103695760206104a161049c6119fd565b611b1d565b604051908152f35b50346103695780600319360112610369576001546040516001600160a01b039091168152602090f35b50346103695760203660031901126103695760209060ff906040906001600160a01b036104fd6119fd565b168152600d84522054166040519015158152f35b50346103695761052036611a13565b909161052a611b87565b83546001600160a01b03169384156106e25760ff6007541680156106d4575b6106c55781156106b6576001600160a01b0383169283156106a7576105896105f99684610583610577611a57565b92909330903390612513565b8561224a565b916127106105b77f000000000000000000000000000000000000000000000000000000000000000085611ac6565b049687936105f46127106105eb7f000000000000000000000000000000000000000000000000000000000000000084611ac6565b04998a92611a4a565b611a4a565b9580871061068f575050948161065a86602098610637857f8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df97612299565b61064382600554611a4a565b60055561065287600654611a3d565b600655612067565b604080519485526020850187905284015260608301523391608090a360015f5160206128415f395f51905f5255604051908152f35b6371c4efed60e01b8252600487905260245260449150fd5b63d92e233d60e01b8252600482fd5b631f2a200560e01b8152600490fd5b63012d60bf60e11b8152600490fd5b506106dd611b03565b610549565b6321c4e35760e21b8152600490fd5b5034610369578060031936011261036957602061070c611a57565b9050604051908152f35b50346103695780600319360112610369576020600554604051908152f35b5034610369578060031936011261036957602061074f611b03565b6040519015158152f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610369576020366003190112610369576107ae6119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633819003610a8a578254916001600160a01b038316610a7c576001600160a01b0316918215610a6d576001600160a01b031916821783556040516318160ddd60e01b8152602081600481865afa908115610a17578491610a3b575b506108897f00000000000000000000000000000000000000000000000000000000000000006108827f000000000000000000000000000000000000000000000000000000000000000082611a3d565b9083612475565b80158015610a31575b610a225760085560095542600a556040516328712d6160e11b8152602081600481855afa908115610a175784916109e4575b50600b55604051636783774b60e01b815290602090829060049082905afa9081156109a75783916109b2575b50600c556040516370a0823160e01b8152306004820152602081602481855afa9081156109a7578391610951575b507f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e691602091600655604051908152a180f35b90506020813d60201161099f575b8161096c60209383611a90565b8101031261099b57517f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e661091e565b5f80fd5b3d915061095f565b6040513d85823e3d90fd5b90506020813d6020116109dc575b816109cd60209383611a90565b8101031261099b57515f6108f0565b3d91506109c0565b90506020813d602011610a0f575b816109ff60209383611a90565b8101031261099b575160046108c4565b3d91506109f2565b6040513d86823e3d90fd5b63bc0ecfe360e01b8552600485fd5b5081811015610892565b90506020813d602011610a65575b81610a5660209383611a90565b8101031261099b57515f610833565b3d9150610a49565b63d92e233d60e01b8452600484fd5b62dc149f60e41b8452600484fd5b631966391b60e11b8352600483fd5b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103695780600319360112610369576020600a54604051908152f35b50346103695780600319360112610369576020610b97611a57565b50604051908152f35b503461036957602036600319011261036957600435801515809103610c46577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610c37576001805460ff60a01b191660a083901b60ff60a01b161790556040519081527fbfe799fb5e0148a5f2590ff531306d42a5d512b74a5029ceb805abb808b0f1a090602090a180f35b631966391b60e11b8252600482fd5b5080fd5b5034610369578060031936011261036957602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610369578060031936011261036957602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461036957806003193601126103695760206104a1611ae3565b503461036957602036600319011261036957610d7d6119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610c37576001600160a01b031680156106a757600154816001600160a01b0382167f2cc664e1ac1e2d05c0d4637bb63ec8189113b6ac39276be8977e26216a8cdd198580a36001600160a01b0319161760015580f35b50346103695780600319360112610369576020600354604051908152f35b50346103695780600319360112610369576020600c54604051908152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50610e8a36611a13565b610e95929192611b87565b5f546001600160a01b0316156114965760ff600754166113e6576001600160a01b03811691821561148757610ec99061210c565b80156114785760ff600754166113e657610f1d610f14610f0b6005547f0000000000000000000000000000000000000000000000000000000000000000611a3d565b60025490611a4a565b60045490611a4a565b9360065494610f2b84611b1d565b92836113fd575b80947f000000000000000000000000000000000000000000000000000000000000000093610f608584611ac6565b6127109004937f000000000000000000000000000000000000000000000000000000000000000095610f928786611ac6565b612710900497610fa28187611ac6565b612710900497838d8a8c610fb68c8c611a4a565b90610fc091611a4a565b90610fca91611a4a565b91610fd49261224a565b9c6008548082115f146113f557610feb9082611a4a565b905b81156113e657818f116112bf575b50505050505061100b8188611ac6565b6110158a85611ac6565b106112a957509161108d8685936105f48b61109e9761105f8b61105a7fec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc4559d9c8a611a3d565b612299565b61106b85600554611a3d565b60055561107a82600654611a4a565b6006555f546001600160a01b0316612353565b8061126d575b508161123d57611a3d565b604080519485526020850187905284015260608301523391608090a36110c2611b03565b6110e3575b60209060015f5160206128415f395f51905f5255604051908152f35b5f546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116813b1561099b576040519063ff6d8d0560e01b825260048201525f8160248183865af19081611228575b5061118057509054602091906001600160a01b03167fe2cd2f31ebc05ec28640102987f4c8fc5f20e269e1b3aa82577f3f2f0e35c7c6835a604051908152a26110c7565b60208391602460018060a01b038454166040519687938492632f53ef2f60e01b845260048401525af1806111f6575b602093506111f057546001600160a01b03167fe2cd2f31ebc05ec28640102987f4c8fc5f20e269e1b3aa82577f3f2f0e35c7c6835a604051908152a26110c7565b506110c7565b6020843d602011611220575b8161120f60209383611a90565b8101031261099b57602093506111af565b3d9150611202565b6112359194505f90611a90565b5f925f61113c565b867f3bc39a5562b28f5fe8f36cecabfbaa12bb969acf05717994709225fc412a99346020604051858152a2611a3d565b6112a3906040518181527fa69e8258ccc7b9bbb70ab953fc2d1062b4ee28b8ca827534097e1732e87b026260203392a233612067565b5f611093565b886371c4efed60e01b5f5260045260245260445ffd5b949d509498509650975097508199801580156113dc575b6113cd576112e49083611ac6565b9161271083029280840461271014901517156113b95761130391611a4a565b61271081029080820461271014901517156113b95761132191611ad9565b600181018091116113b957866127100361271081116113b957866105f48661134893611a4a565b61135281836123d4565b9080156113a5576113906127106113886113786113989583979584809709151590611a3d565b8880821091180288189b8c611ac6565b04968a611ac6565b049688611ac6565b04935f8080808080610ffb565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b63bb55fd2760e01b5f5260045ffd5b50828211156112d6565b63012d60bf60e11b5f5260045ffd5b505f90610fed565b7f00000000000000000000000000000000000000000000000000000000000000006127100361271081116113b957611456907f000000000000000000000000000000000000000000000000000000000000000090611a4a565b60631981019081116113b957808511611470575b50610f32565b93505f61146a565b631f2a200560e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b6321c4e35760e21b5f5260045ffd5b3461099b575f36600319011261099b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036116315760025460045490801580611629575b6114785761153f60409261153a61271061153261ffff7f00000000000000000000000000000000000000000000000000000000000000001686611ac6565b048094611a4a565b611a3d565b5f6002555f6003555f6004556115606115588284611a3d565b600554611a4a565b600555816115fa575b806115de575b6001548351838152602081018390526001600160a01b03918216917f000000000000000000000000000000000000000000000000000000000000000016907f6460dc5c867a0678a8bcc5e64f629fae539901c53a4a8b42fe21d7a6c5e6437d908690a382519182526020820152f35b6001546115f59082906001600160a01b0316612067565b61156f565b611624827f0000000000000000000000000000000000000000000000000000000000000000612067565b611569565b5081156114f4565b631966391b60e11b5f5260045ffd5b3461099b575f36600319011261099b576020600b54604051908152f35b3461099b575f36600319011261099b5760206104a1610f1460055460025490611a4a565b3461099b575f36600319011261099b576020600654604051908152f35b3461099b575f36600319011261099b57602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461099b575f36600319011261099b576020600954604051908152f35b3461099b575f36600319011261099b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461099b575f36600319011261099b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461099b57602036600319011261099b5761179a611b87565b60ff600754166118bc57604051638a36a6bb60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156118b1575f9161186f575b506001600160a01b0316331415808061185a575b61184b5780611840575b6118315761181e600435611bbf565b60015f5160206128415f395f51905f5255005b630c736d4160e21b5f5260045ffd5b50600354151561180f565b63235084c360e21b5f5260045ffd5b506001546001600160a01b0316331415611805565b90506020813d6020116118a9575b8161188a60209383611a90565b8101031261099b57516001600160a01b038116810361099b57816117f1565b3d915061187d565b6040513d5f823e3d90fd5b63e6a0d45f60e01b5f5260045ffd5b3461099b57602036600319011261099b576118e46119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303611631576001600160a01b03165f818152600d60205260408120805460ff191660011790557fe4b7e48fbd47c2f602bacadee76ad33b16542ddb4997cfc0de04c311adcfa8c79080a2005b3461099b575f36600319011261099b5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461099b575f36600319011261099b57602060ff60015460a01c166040519015158152f35b3461099b575f36600319011261099b576020600854604051908152f35b3461099b575f36600319011261099b5760406119f1611a57565b82519182526020820152f35b600435906001600160a01b038216820361099b57565b606090600319011261099b5760043590602435906044356001600160a01b038116810361099b5790565b919082018092116113b957565b919082039182116113b957565b611a89610f14610f0b6005547f0000000000000000000000000000000000000000000000000000000000000000611a3d565b9060065490565b90601f8019910116810190811067ffffffffffffffff821117611ab257604052565b634e487b7160e01b5f52604160045260245ffd5b818102929181159184041417156113b957565b81156113a5570490565b60065460085480821115611afd57611afa91611a4a565b90565b50505f90565b60ff60075416611b1957611b15611ae3565b1590565b5f90565b6001600160a01b03165f908152600d602052604090205460ff16611b1957600b548015611b8257611b50600a5442611a4a565b600c5480821015611b7b57600e820291808304600e14901517156113b957611b7791611ad9565b1c90565b5050505f90565b505f90565b60025f5160206128415f395f51905f525414611bb05760025f5160206128415f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b60025490600454821580611f50575b611f4b5761ffff7f000000000000000000000000000000000000000000000000000000000000000016611c0f612710611c078387611ac6565b048095611a4a565b600354818082109118029384821890611c2d829561153a8486611a4a565b955f93148015611e54575b5050505f6002555f6003555f600455611c546115588587611a3d565b60055580611cef575b5050916060917f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f9382611cc0575b81611ca4575b60405192835260208301526040820152a1565b600154611cbb9083906001600160a01b03166126b0565b611c91565b611cea837f00000000000000000000000000000000000000000000000000000000000000006126b0565b611c8b565b92909391611cff84600654611a4a565b6006555f546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169691611d3f9187918991166125bb565b5f546001600160a01b031690863b1561099b5760405163892823f760e01b81526004810192909252602482018690526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660448401527f00000000000000000000000000000000000000000000000000000000000000001660648301526084820152945f90869060a490829084905af19485156118b15760406060957f5feba9b0d52c92ada4b9c571c2bee52390c54f2947208ab250221e6ee32f12ff927f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f98611e44575b508151908482526020820152a19193819350611c5d565b5f611e4e91611a90565b5f611e2d565b8196939592949615611f3c57611e68611a57565b90916127108702908782046127101417156113b957611e9190611e8b8885611a3d565b90611ad9565b61ffff7f0000000000000000000000000000000000000000000000000000000000000000161015611f05575b505084611edc57505090611ed091611a3d565b915f915b5f8080611c38565b848192959396945010611eef5750611ed4565b906371c4efed60e01b5f5260045260245260445ffd5b611f0f918661257c565b80151580611f2b575b611f23575b80611ebd565b94505f611f1d565b50611f34611ae3565b811115611f18565b633672d25f60e01b5f5260045ffd5b505050565b508015611bce565b60025460045481158061205f575b61205b57611fa6612710611f9e61ffff7f00000000000000000000000000000000000000000000000000000000000000001685611ac6565b048093611a4a565b91611fd46060927f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f94611a3d565b5f6002555f6003555f600455611fed6115588284611a3d565b6005558161202c575b80612010575b6040519182525f60208301526040820152a1565b6001546120279082906001600160a01b03166126b0565b611ffc565b612056827f00000000000000000000000000000000000000000000000000000000000000006126b0565b611ff6565b5050565b508015611f66565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316919082156120a4576120a292612353565b565b5f9250829182918291906001600160a01b03165af13d15612107573d67ffffffffffffffff8111611ab257604051906120e7601f8201601f191660200183611a90565b81525f60203d92013e5b156120f857565b6312171d8360e31b5f5260045ffd5b6120f1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169081156122285734612219576040516370a0823160e01b815230600482015290602082602481865afa9182156118b1575f926121e4575b5060249261217f602092303384612513565b6040516370a0823160e01b815230600482015293849182905afa80156118b1575f906121b0575b611afa9250611a4a565b506020823d6020116121dc575b816121ca60209383611a90565b8101031261099b57611afa91516121a6565b3d91506121bd565b9091506020813d602011612211575b8161220060209383611a90565b8101031261099b575190602461216d565b3d91506121f3565b63e0aeda7d60e01b5f5260045ffd5b80915034036122345790565b635e3b067f60e11b5f523460045260245260445ffd5b9091811561228a5782158015612282575b6113cd5761226a925f926127f8565b90811561227357565b6342301c2360e01b5f5260045ffd5b50801561225b565b63098fb56160e01b5f5260045ffd5b906122b5906122aa83600254611a3d565b600255600454611a3d565b60045560ff60015460a01c168061234a575b6122ce5750565b61271061233c612311612345938361230a61ffff7f00000000000000000000000000000000000000000000000000000000000000001683611ac6565b0490611a4a565b61ffff7f00000000000000000000000000000000000000000000000000000000000000001690611ac6565b04600354611a3d565b600355565b508015156122c7565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f51148216156123b3575b604052156123935750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b9060018115166123cb57823b15153d15161690612388565b503d5f823e3d90fd5b5f19612710820991612710820291828085109403938085039414612469578382111561245157612710829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b5090611afa9250611ad9565b90915f19838309928083029283808610950394808603951461250657848311156124ee5790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b82634e487b715f52156003026011186020526024601cfd5b505090611afa9250611ad9565b6040516323b872dd60e01b5f9081526001600160a01b039384166004529290931660245260449390935260209060648180865af19060015f5114821615612564575b6040525f606052156123935750565b9060018115166123cb57823b15153d15161690612555565b9091811580156125b3575b80156125ab575b80156125a4575b611b7b57611afa925f926127f8565b505f612595565b50801561258e565b508215612587565b916040519163095ea7b360e01b5f5260018060a01b031691826004528160245260205f60448180885af19060015f51148216156126a1575b6040521561260057505050565b60405163095ea7b360e01b5f52826004525f60245260205f60448180885af19060015f5114821615612689575b6040521561266b576040519163095ea7b360e01b5f5260045260245260205f60448180865af19060015f51148216156123b357604052156123935750565b635274afe760e01b5f9081526001600160a01b038416600452602490fd5b9060018115166123cb57843b15153d1516169061262d565b90843b15153d151616906125f3565b5f91907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316908115612781577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127198482856125bb565b803b1561277d578492918360649260405196879586946309ad4dd960e01b865260018060a01b03166004860152602485015260448401525af1801561277257612760575050565b61276b828092611a90565b6103695750565b6040513d84823e3d90fd5b8480fd5b919250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b1561099b576040516301aba89b60e71b81526001600160a01b03909216600483015290915f9183916024918391905af180156118b1576127ee5750565b5f6120a291611a90565b909192612710039061271082116113b95761281d9161281691611ac6565b9283611ac6565b9061271081029080820461271014901517156113b957611afa92611e8b91611a3d56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122090d551ca074a98195b1f59f2f6d365d2327eadf9b689d09c96dc1c9ec364991664736f6c6343000823003360e060405234610ecb57611c0a8038038061001981610ecf565b928339810161012082820312610ecb5781516001600160401b038111610ecb5781610045918401610ef4565b60208301516001600160401b038111610ecb5782610064918501610ef4565b60408401519092906001600160401b038111610ecb5781610086918601610ef4565b60608501516001600160401b038111610ecb57826100a5918701610ef4565b60808601519091906001600160401b038111610ecb5786019160a083850312610ecb576040519060a082016001600160401b038111838210176107255760405283516001600160401b038111610ecb5785610101918601610ef4565b825260208401516001600160401b038111610ecb5785610122918601610ef4565b6020830190815260408501519093906001600160401b038111610ecb578661014b918701610ef4565b6040840190815260608601519095906001600160401b038111610ecb5787610174918301610ef4565b6060850190815260808201519097906001600160401b038111610ecb5761019b9201610ef4565b9860808401998a526101af60a08201610f45565b6101bb60c08301610f45565b996101006101cb60e08501610f45565b9301518a51909a6001600160401b0382116107255760035490600182811c92168015610ec1575b60208310146107075781601f849311610e4b575b50602090601f8311600114610de5575f92610dda575b50508160011b915f199060031b1c1916176003555b8051906001600160401b0382116107255760045490600182811c92168015610dd0575b60208310146107075781601f849311610d5a575b50602090601f8311600114610cf4575f92610ce9575b50508160011b915f199060031b1c1916176004555b6001600160a01b038116158015610cd8575b8015610cc7575b610cb85760805260a05260c08890528051906001600160401b0382116107255760055490600182811c92168015610cae575b60208310146107075781601f849311610c54575b50602090601f8311600114610bee575f92610be3575b50508160011b915f199060031b1c1916176005555b8051906001600160401b0382116107255760065490600182811c92168015610bd9575b60208310146107075781601f849311610b63575b50602090601f8311600114610afd575f92610af2575b50508160011b915f199060031b1c1916176006555b518051906001600160401b0382116107255760075490600182811c92168015610ae8575b60208310146107075781601f849311610a72575b50602090601f8311600114610a0c575f92610a01575b50508160011b915f199060031b1c1916176007555b518051906001600160401b0382116107255760085490600182811c921680156109f7575b60208310146107075781601f849311610981575b50602090601f831160011461091b575f92610910575b50508160011b915f199060031b1c1916176008555b518051906001600160401b0382116107255760095490600182811c92168015610906575b60208310146107075781601f849311610890575b50602090601f831160011461082a575f9261081f575b50508160011b915f199060031b1c1916176009555b5180519093906001600160401b03811161072557600a54600181811c91168015610815575b602082101461070757601f81116107a7575b50602094601f8211600114610744579481929394955f92610739575b50508160011b915f199060031b1c191617600a555b5180519092906001600160401b03811161072557600b54600181811c9116801561071b575b602082101461070757601f8111610699575b506020601f821160011461063657819293945f9261062b575b50508160011b915f199060031b1c191617600b555b6001600160a01b031690811561061857600254908082018092116106045760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f9360025584845283825260408420818154019055604051908152a3604051610cb09081610f5a823960805181818161017b0152610211015260a0518161054d015260c051816104460152f35b634e487b7160e01b5f52601160045260245ffd5b63ec442f0560e01b5f525f60045260245ffd5b015190505f80610560565b601f19821690600b5f52805f20915f5b81811061068157509583600195969710610669575b505050811b01600b55610575565b01515f1960f88460031b161c191690555f808061065b565b9192602060018192868b015181550194019201610646565b8181111561054757600b5f52601f820160051c7f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9602084106106ff575b81601f9101920160051c03905f5b8281106106f2575050610547565b5f828201556001016106e4565b5f91506106d6565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610535565b634e487b7160e01b5f52604160045260245ffd5b015190505f806104fb565b601f19821695600a5f52805f20915f5b88811061078f57508360019596979810610777575b505050811b01600a55610510565b01515f1960f88460031b161c191690555f8080610769565b91926020600181928685015181550194019201610754565b818111156104df57600a5f52601f820160051c7fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a86020841061080d575b81601f9101920160051c03905f5b8281106108005750506104df565b5f828201556001016107f2565b5f91506107e4565b90607f16906104cd565b015190505f80610493565b60095f9081528281209350601f198516905b8181106108785750908460019594939210610860575b505050811b016009556104a8565b01515f1960f88460031b161c191690555f8080610852565b9293602060018192878601518155019501930161083c565b8281111561047d5760095f52909150601f830160051c7f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af602085106108fe575b849392601f0160051c82900391015f5b8281106108ee57505061047d565b5f818301558594506001016108e0565b5f91506108d0565b91607f1691610469565b015190505f80610430565b60085f9081528281209350601f198516905b8181106109695750908460019594939210610951575b505050811b01600855610445565b01515f1960f88460031b161c191690555f8080610943565b9293602060018192878601518155019501930161092d565b8281111561041a5760085f52909150601f830160051c7ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3602085106109ef575b849392601f0160051c82900391015f5b8281106109df57505061041a565b5f818301558594506001016109d1565b5f91506109c1565b91607f1691610406565b015190505f806103cd565b60075f9081528281209350601f198516905b818110610a5a5750908460019594939210610a42575b505050811b016007556103e2565b01515f1960f88460031b161c191690555f8080610a34565b92936020600181928786015181550195019301610a1e565b828111156103b75760075f52909150601f830160051c7fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68860208510610ae0575b849392601f0160051c82900391015f5b828110610ad05750506103b7565b5f81830155859450600101610ac2565b5f9150610ab2565b91607f16916103a3565b015190505f8061036a565b60065f9081528281209350601f198516905b818110610b4b5750908460019594939210610b33575b505050811b0160065561037f565b01515f1960f88460031b161c191690555f8080610b25565b92936020600181928786015181550195019301610b0f565b828111156103545760065f52909150601f830160051c7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f60208510610bd1575b849392601f0160051c82900391015f5b828110610bc1575050610354565b5f81830155859450600101610bb3565b5f9150610ba3565b91607f1691610340565b015190505f80610308565b60055f9081528281209350601f198516905b818110610c3c5750908460019594939210610c24575b505050811b0160055561031d565b01515f1960f88460031b161c191690555f8080610c16565b92936020600181928786015181550195019301610c00565b828111156102f25790915060055f5260205f20601f840160051c9060208510610ca6575b849392601f0160051c82900391015f5b828110610c965750506102f2565b5f81830155859450600101610c88565b5f9150610c78565b91607f16916102de565b63d92e233d60e01b5f5260045ffd5b506001600160a01b038216156102ac565b506001600160a01b038a16156102a5565b015190505f8061027e565b60045f9081528281209350601f198516905b818110610d425750908460019594939210610d2a575b505050811b01600455610293565b01515f1960f88460031b161c191690555f8080610d1c565b92936020600181928786015181550195019301610d06565b828111156102685760045f52909150601f830160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b60208510610dc8575b849392601f0160051c82900391015f5b828110610db8575050610268565b5f81830155859450600101610daa565b5f9150610d9a565b91607f1691610254565b015190505f8061021c565b60035f9081528281209350601f198516905b818110610e335750908460019594939210610e1b575b505050811b01600355610231565b01515f1960f88460031b161c191690555f8080610e0d565b92936020600181928786015181550195019301610df7565b828111156102065760035f52909150601f830160051c7fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60208510610eb9575b849392601f0160051c82900391015f5b828110610ea9575050610206565b5f81830155859450600101610e9b565b5f9150610e8b565b91607f16916101f2565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761072557604052565b81601f82011215610ecb578051906001600160401b03821161072557610f23601f8301601f1916602001610ecf565b9282845260208383010111610ecb57815f9260208093018386015e8301015290565b51906001600160a01b0382168203610ecb5756fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146106b1578063095ea7b31461060957806318160ddd146105ec57806323b872dd146105b4578063313ce5671461059957806342966c681461057c578063536dac9b1461053857806353cd512a146104ac57806370a08231146104755780637165485d146104315780637284e4161461041657806379cc6790146103e457806395d89b41146102f0578063a9059cbb146102bf578063abb1dc44146101aa578063d5f3948814610166578063dd62ed3e146101165763fb7f21eb146100df575f80fd5b34610112575f3660031901126101125761010e6100fa6108dc565b60405191829160208352602083019061076c565b0390f35b5f80fd5b346101125760403660031901126101125761012f610790565b6101376107a6565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610112575f36600319011261011257606060806040516101ca816107bc565b828152826020820152826040820152828082015201526102446101eb6108dc565b61010e6101f661080e565b610252610201610a3e565b9160405195869560018060a01b037f000000000000000000000000000000000000000000000000000000000000000016875260806020880152608087019061076c565b90858203604087015261076c565b838103606085015260806102ae61029c61028a610278865160a0875260a087019061076c565b6020870151868203602088015261076c565b6040860151858203604087015261076c565b6060850151848203606086015261076c565b92015190608081840391015261076c565b34610112576040366003190112610112576102e56102db610790565b6024359033610b39565b602060405160018152f35b34610112575f366003190112610112576040515f6004548060011c906001811680156103da575b6020831081146103c6578285529081156103a25750600114610344575b61010e836100fa818503826107ec565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610388575090915081016020016100fa610334565b919260018160209254838588010152019101909291610370565b60ff191660208086019190915291151560051b840190910191506100fa9050610334565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610317565b3461011257604036600319011261011257610414610400610790565b6024359061040f823383610a96565b610bf6565b005b34610112575f3660031901126101125761010e6100fa61080e565b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610112576020366003190112610112576001600160a01b03610496610790565b165f525f602052602060405f2054604051908152f35b34610112575f366003190112610112576105006104c7610a3e565b61010e81519161052a60208201519161051c604082015161050e6080606085015194015195604051998a9960a08b5260a08b019061076c565b9089820360208b015261076c565b90878203604089015261076c565b90858203606087015261076c565b90838203608085015261076c565b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101125760203660031901126101125761041460043533610bf6565b34610112575f36600319011261011257602060405160128152f35b34610112576060366003190112610112576102e56105d0610790565b6105d86107a6565b604435916105e7833383610a96565b610b39565b34610112575f366003190112610112576020600254604051908152f35b3461011257604036600319011261011257610622610790565b60243590331561069e576001600160a01b031690811561068b57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b34610112575f366003190112610112576040515f6003548060011c90600181168015610762575b6020831081146103c6578285529081156103a257506001146107045761010e836100fa818503826107ec565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610748575090915081016020016100fa610334565b919260018160209254838588010152019101909291610730565b91607f16916106d8565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361011257565b602435906001600160a01b038216820361011257565b60a0810190811067ffffffffffffffff8211176107d857604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107d857604052565b604051905f6006548060011c91600182169182156108d2575b6020841083146103c65783865285929081156108b35750600114610854575b610852925003836107ec565b565b5060065f90815290917ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b81831061089757505090602061085292820101610846565b602091935080600191548385890101520191019091849261087f565b6020925061085294915060ff191682840152151560051b820101610846565b92607f1692610827565b604051905f6005548060011c916001821691821561097e575b6020841083146103c65783865285929081156108b3575060011461091f57610852925003836107ec565b5060055f90815290917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b81831061096257505090602061085292820101610846565b602091935080600191548385890101520191019091849261094a565b92607f16926108f5565b90604051915f8154908160011c9260018316928315610a34575b6020851084146103c6578487528693908115610a1257506001146109ce575b50610852925003836107ec565b90505f9291925260205f20905f915b8183106109f6575050906020610852928201015f6109c1565b60209193508060019154838589010152019101909184926109dd565b90506020925061085294915060ff191682840152151560051b8201015f6109c1565b93607f16936109a2565b60405190610a4b826107bc565b81610a566007610988565b8152610a626008610988565b6020820152610a716009610988565b6040820152610a80600a610988565b60608201526080610a91600b610988565b910152565b6001600160a01b039081165f818152600160209081526040808320948616835293905291909120549291905f198410610ad0575b50505050565b828410610b1657801561069e576001600160a01b0382161561068b575f52600160205260405f209060018060a01b03165f5260205260405f20910390555f808080610aca565b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b0316908115610be3576001600160a01b0316918215610bd057815f525f60205260405f2054818110610bb757817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b9091906001600160a01b03168015610be357805f525f60205260405f2054838110610c60576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587528684520360408620558060025403600255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffdfea26469706673582212205b69a4c6d3de5081d5dc10419b6e7f3fff48efa253a6ed487df140ecf31dacfa64736f6c63430008230033a2646970667358221220c779bb5dbc77ae7d319928b4de3be0686647eb9c5ba2faf660fe346fa008c47f64736f6c63430008230033",
      "immutableReferences": {
        "44409": [
          {
            "start": 79,
            "length": 32
          },
          {
            "start": 146,
            "length": 32
          },
          {
            "start": 1083,
            "length": 32
          },
          {
            "start": 1990,
            "length": 32
          }
        ]
      },
      "creationHash": "0xf5a952fb662649473bed6f798a0c14e24b9c4e435ce218d3b85d0c0fcba6b097",
      "runtimeBytes": 21067,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/ShilloV2LaunchDeployer.sol": "ShilloV2LaunchDeployer"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloV2BondingCurve.sol": {
          "keccak256": "0x9a10d71081c96d09069fbbb8b6b9d0d023facef3270bac374c170c9d4e724aa2",
          "urls": [
            "bzz-raw://cd74b4475b93009c3583bf7dd321cd15ba3513eafbce643b36481d1c58727cbf",
            "dweb:/ipfs/QmUwEdXtpPAy6afsGo9UpbDvy2MWD7hTkY6YzJ9CF9KoJo"
          ],
          "license": "MIT"
        },
        "src/ShilloV2BuybackVault.sol": {
          "keccak256": "0x241b48e899062f8f35b0bc3819863422405fc90573ecc01d0b427d6e2862be29",
          "urls": [
            "bzz-raw://3844ce8d72c6eabe595de4a9fbd8db9eb99cc7eb3eed93186b60c2765c158113",
            "dweb:/ipfs/QmdvT7ogvx87SMBPqHC6AZ7ymgvaxP9AqEwSZyddP7Y2bY"
          ],
          "license": "MIT"
        },
        "src/ShilloV2LaunchDeployer.sol": {
          "keccak256": "0x489e004ab318b5e95d7de96ed23b0012cab7df714717b96dd5670a009e1b093a",
          "urls": [
            "bzz-raw://24baec1125b56ff4da9723d591a34fe00c4b309e8ff37eee046ae91130bb8cb9",
            "dweb:/ipfs/QmaiH2gcRYZsLqfz59XGZiTsbRjNTiDfK59bBECgSosriE"
          ],
          "license": "MIT"
        },
        "src/ShilloV2LauncherToken.sol": {
          "keccak256": "0x34398ca7ef811f6a3ea27f22e23a9d4bf7f6a2b73accf00a1efb6d3a85c10d9e",
          "urls": [
            "bzz-raw://add53dba4381fd2dfcbe33b5c6b4cafb4b05c8a25e0444ed324fe305d6868367",
            "dweb:/ipfs/QmbkTS88J96KqVYZfPPYWfR5J1e9Ht5RPVdR7dm7MwHsRQ"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2.sol": {
          "keccak256": "0xa11234bcbb18e4b7ecc2a74ab571fac55c93be48e4e2940d56d8c365e7b58671",
          "urls": [
            "bzz-raw://05b58e8f851021be44e1523b78550ac00d5f043114fbd0a99199424401b7efc1",
            "dweb:/ipfs/QmPAViXH1FUydKFrLY9V1RaxQ7iZwF258Mx4PT76w6SvDn"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2Graduation.sol": {
          "keccak256": "0xd1a62a75cf9d34adbb7a40a3d0d34d0a40e4f6063a04f11c106764447fa33348",
          "urls": [
            "bzz-raw://568d591a7fc57fa0be15c5597cadbbb83e12db1d4bfee6bf95c1baa9886b5baa",
            "dweb:/ipfs/QmcpmqcV4AhXkGuK2ZfCC9Xexm64cVPeSpirgFYQcrRu7n"
          ],
          "license": "MIT"
        },
        "src/libraries/ShilloV2BondingCurveMath.sol": {
          "keccak256": "0xf239685c9667677db519fe47ceaa463131d2e247cfc90770a87e12c192c576a8",
          "urls": [
            "bzz-raw://3e1dd46b609d0f9010c4c2a1c85333f00936063316f8ebd363f7a8ff6fee4bdf",
            "dweb:/ipfs/QmWimP5ypMjjyRkYmCNsqURpsKJB987EPFMUH7b1Xtpzem"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
          "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
          "urls": [
            "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
            "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
          "keccak256": "0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c",
          "urls": [
            "bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0",
            "dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
          "keccak256": "0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d",
          "urls": [
            "bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100",
            "dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
          "keccak256": "0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc",
          "urls": [
            "bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037",
            "dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
          "keccak256": "0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44",
          "urls": [
            "bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d",
            "dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol": {
          "keccak256": "0xd735962e3d6660884153ba8a972b5f100dde4c482f2ff1c525ba7fdefb154cbd",
          "urls": [
            "bzz-raw://5a264d17b093f585844b0d977e9f60555b8c8d6513b304fde863cdf652a0d336",
            "dweb:/ipfs/QmWXfaJisjVnrjTUjZGryZpMob9wKivvtbodLS3PTc1ttq"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol": {
          "keccak256": "0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998",
          "urls": [
            "bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c",
            "dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol": {
          "keccak256": "0x669464167428061ee0f8618b73b3ee90aff8405683e7ddde8cd77dadaa1afe29",
          "urls": [
            "bzz-raw://0dda78587a7358b4fdf6b9fca0fde5a5e34930f36d5268a16028627fc0170195",
            "dweb:/ipfs/QmQ1b6cCceDRWNxti9HifsTCzmVP25Haxs1bWugm52vTqH"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
          "keccak256": "0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2",
          "urls": [
            "bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303",
            "dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol": {
          "keccak256": "0x2659248df25e34000ed214b3dc8da2160bc39874c992b477d9e2b1b3283dc073",
          "urls": [
            "bzz-raw://c345af1b0e7ea28d1216d6a04ab28f5534a5229b9edf9ca3cd0e84950ae58d26",
            "dweb:/ipfs/QmY63jtSrYpLRe8Gj1ep2vMDCKxGNNG3hnNVKBVnrs2nmA"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
          "keccak256": "0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f",
          "urls": [
            "bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e",
            "dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
          "keccak256": "0x377051c0c17a28038c32f58d76a42817eb3b24f2b4c6a2e788a9544e856d738d",
          "urls": [
            "bzz-raw://c5365fead4a20b84662284c97c07d707c67f5bc9e07b371980aba8c3c6e83661",
            "dweb:/ipfs/QmYrYoLPEADtXoCu9ZBnwkXdNB9D9FPHuhS9pWaQW4nYx5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol": {
          "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
          "urls": [
            "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
            "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Create2.sol": {
          "keccak256": "0xe06ddfff69f3ba154d92102d9a85db2780e045303a587360cf12195216e851ca",
          "urls": [
            "bzz-raw://ac19cc390a227758c239c06d3a11d0a2c40c8f58eabb034154b661269d4a0851",
            "dweb:/ipfs/QmdSsfYsPX5RyAXSfHRvR5zdY9MffAgZVa3vdxQUypFBa5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Errors.sol": {
          "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
          "urls": [
            "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
            "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol": {
          "keccak256": "0x6ba3db1346fc75a832aa6cd075e12f6f1fa172fa2122a020f324c319fe5be75e",
          "urls": [
            "bzz-raw://ab92e9e1cb08144c43fa3a383a87c48f49a652d51156950b928c2a50bee6b3a5",
            "dweb:/ipfs/QmWeKkKZBgLDKgRFGKCzsKybYF7C8g9ysg5kU1b1p7QFBi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Panic.sol": {
          "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
          "urls": [
            "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
            "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol": {
          "keccak256": "0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53",
          "urls": [
            "bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99",
            "dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
          "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97",
          "urls": [
            "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b",
            "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
          "keccak256": "0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c",
          "urls": [
            "bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617",
            "dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
          "keccak256": "0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857",
          "urls": [
            "bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5",
            "dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": {
          "keccak256": "0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083",
          "urls": [
            "bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9",
            "dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif"
          ],
          "license": "MIT"
        }
      }
    },
    "ShilloV2BondingCurve": {
      "abi": [
        {
          "type": "constructor",
          "inputs": [
            {
              "name": "pairToken_",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "deployer_",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "factory_",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "feePolicy_",
              "type": "address",
              "internalType": "contract IShilloV2FeePolicy"
            },
            {
              "name": "policy_",
              "type": "tuple",
              "internalType": "struct FeePolicySnapshot",
              "components": [
                {
                  "name": "protocolFeeRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "protocolFeeShareBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "buybackBurnBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "hookFeeBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "maxInternalPriceImpactBps",
                  "type": "uint16",
                  "internalType": "uint16"
                }
              ]
            },
            {
              "name": "feeEscrow_",
              "type": "address",
              "internalType": "contract IShilloV2FeeEscrow"
            },
            {
              "name": "buybackVault_",
              "type": "address",
              "internalType": "contract ShilloV2BuybackVault"
            },
            {
              "name": "phantomQuote_",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "feeBps_",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "creatorTaxBps_",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "buybackEnabled_",
              "type": "bool",
              "internalType": "bool"
            },
            {
              "name": "graduationThreshold_",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "buy",
          "inputs": [
            {
              "name": "quoteIn",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "minTokensOut",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "recipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "tokensOut",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "payable"
        },
        {
          "type": "function",
          "name": "buybackBurnBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint16",
              "internalType": "uint16"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "buybackCreatorRecipient",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "buybackEnabled",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "buybackQuoteBalance",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "buybackVault",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract ShilloV2BuybackVault"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "creatorTaxBalance",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "creatorTaxBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "currentSnipeTaxBps",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "deployer",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "exemptFromSnipeTax",
          "inputs": [
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "factory",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "feeBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "feeEscrow",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IShilloV2FeeEscrow"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "feePolicy",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IShilloV2FeePolicy"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "getReserves",
          "inputs": [],
          "outputs": [
            {
              "name": "quoteReserve_",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "tokenReserve_",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "graduate",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "quoteOut",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "tokenOut",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "graduated",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "graduationThreshold",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "initialize",
          "inputs": [
            {
              "name": "token_",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "isNativeQuote",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchSupply",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchedAt",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "maxInternalPriceImpactBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint16",
              "internalType": "uint16"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pairToken",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "phantomQuote",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "protocolFeeRecipient",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "protocolFeeShareBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint16",
              "internalType": "uint16"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "quoteFeeBalance",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "quoteReserve",
          "inputs": [],
          "outputs": [
            {
              "name": "quoteReserve_",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "readyToGraduate",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "realQuoteReserve",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "rescueFees",
          "inputs": [],
          "outputs": [
            {
              "name": "protocolAmount",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "creatorAmount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "reservedTokens",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "sell",
          "inputs": [
            {
              "name": "tokensIn",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "minQuoteOut",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "recipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "quoteOut",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "sellableTokens",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "setBuybackEnabled",
          "inputs": [
            {
              "name": "enabled",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setCreatorFeeRecipient",
          "inputs": [
            {
              "name": "newRecipient",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "snipeTaxExempt",
          "inputs": [
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "exempt",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "snipeTaxSeconds",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "snipeTaxStartBps",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "sweepFees",
          "inputs": [
            {
              "name": "minBuybackTokensOut",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "token",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "tokenReserve",
          "inputs": [],
          "outputs": [
            {
              "name": "tokenReserve_",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "trackedQuote",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "trackedTokens",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "event",
          "name": "AutoGraduationFailed",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "gasRemaining",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "BuybackEnabledUpdated",
          "inputs": [
            {
              "name": "enabled",
              "type": "bool",
              "indexed": false,
              "internalType": "bool"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "BuybackLocked",
          "inputs": [
            {
              "name": "quoteSpent",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tokensLocked",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "CreatorFeeRecipientUpdated",
          "inputs": [
            {
              "name": "previousRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "CurveBuy",
          "inputs": [
            {
              "name": "buyer",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "recipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "quoteIn",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tokensOut",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "fee",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tax",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "CurveBuyRefunded",
          "inputs": [
            {
              "name": "buyer",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "refund",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "CurveCompleted",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            },
            {
              "name": "quoteOut",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tokenOut",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "CurveSell",
          "inputs": [
            {
              "name": "seller",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "recipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "tokensIn",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "quoteOut",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "fee",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tax",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "FeesRescued",
          "inputs": [
            {
              "name": "protocolRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "creatorRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "protocolAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "creatorAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "FeesSwept",
          "inputs": [
            {
              "name": "protocolAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "buybackAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "creatorAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "Initialized",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "SnipeTaxCharged",
          "inputs": [
            {
              "name": "recipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "amount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "SnipeTaxExempted",
          "inputs": [
            {
              "name": "account",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "AlreadyGraduated",
          "inputs": []
        },
        {
          "type": "error",
          "name": "AlreadyInitialized",
          "inputs": []
        },
        {
          "type": "error",
          "name": "CurveGraduated",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InsufficientInputAmount",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InsufficientLiquidity",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InsufficientOutputAmount",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InternalSwapRequiresOperator",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidFeePolicy",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidLaunchEconomics",
          "inputs": []
        },
        {
          "type": "error",
          "name": "MinimumOutputRequired",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NativeValueMismatch",
          "inputs": [
            {
              "name": "supplied",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "expected",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "NotFactory",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotFeeSweepOperator",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotInitialized",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotReadyToGraduate",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ReentrancyGuardReentrantCall",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SafeERC20FailedOperation",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "SlippageExceeded",
          "inputs": [
            {
              "name": "actual",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "minimum",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "TransferFailed",
          "inputs": []
        },
        {
          "type": "error",
          "name": "UnexpectedNativeValue",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ZeroAddress",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ZeroAmount",
          "inputs": []
        }
      ],
      "bytecode": "0x610240604052346104a757604051612d7938819003601f8101601f191683016001600160401b038111848210176104ab578392829160405283398101039061020082126104a75761004f816104bf565b9161005c602083016104bf565b91610069604082016104bf565b606082015190926001600160a01b03821682036104a75760a090607f1901126104a75760405160a081016001600160401b038111828210176104ab576040526100b4608084016104bf565b81526100c260a084016104d3565b60208201526100d360c084016104d3565b60408201526100e460e084016104d3565b60608201526100f661010084016104d3565b6080820152610120830151956001600160a01b03871687036104a757610140840151926001600160a01b03841684036104a75761016085015191610180860151936101a0870151956101c08801519788151589036104a7576101e0015160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00559a6001600160a01b038b16158015610496575b610476576001600160a01b038516158015610485575b610476576001600160a01b038216156104765782516001600160a01b0316158015610463575b8015610450575b8015610440575b801561042c575b61040957878701808811610418576107d0106104095761ffff9460809485526001549a60a05260c05260e0526101005260018060a01b03815116610120528861014052826020820151166101605282604082015116610180520151166101a0526101c0526101e0526102005260ff60a01b90151560a01b169160018060a01b03169060018060a81b03191617176001556102205260405161289690816104e3823960805181818161042f0152818161170e015281816120690152818161210e01526126b5015260a051818181610230015281816107b001528181610af401528181610bc101528181610d7f015281816110ef015281816114b701526118e6015260c051818181610d1901526117b9015260e051818181610aaf015281816126e601526127870152610100518181816103a90152611d0e015261012051818181610e510152818161158c0152818161160001528181611cc601528181611da001526120320152610140518181816117520152611d78015261016051818181610ca40152818161150c01528181611bd701528181611f7801526122e40152610180518181816116b8015261231601526101a051818181610c650152611e9601526101c0518181816107710152818161083901528181610ee70152611a6501526101e05181818161059201528181610f36015281816113ff01526119720152610200518181816105c601528181610b3b01528181610f68015261143101526102205181818161085d0152610ce00152f35b637a34030f60e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5061271061ffff60808501511610156101db565b5061ffff608084015116156101d4565b5061271061ffff604085015116116101cd565b5061271061ffff602085015116116101c6565b63d92e233d60e01b5f5260045ffd5b506001600160a01b038116156101a0565b506001600160a01b038a161561018a565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036104a757565b519061ffff821682036104a75756fe60806040526004361015610011575f80fd5b5f5f3560e01c80630902f1ac146119d757806315a55347146119ba578063160d0da51461199557806324a9d8531461195b57806331ff7f22146118cb5780633729bb9a146117815780633cd1fb8f1461173d5780633de35b79146116f95780633f7ed6b7146116dc57806349127e2a1461169e5780634c37ef23146116815780634f1f58fd1461165d57806350e25ac21461164057806352920587146114a557806359a87bc114610e8057806364df049e14610e3b5780636783774b14610e1d5780637809452a14610dff5780637b04ea6214610d63578063808bcddc14610d485780638258903814610d035780638b0bc50114610cc85780639040f86614610c8957806390addc1e14610c4a5780639a9b567d14610ba05780639da771f414610b7c578063bf56b37114610b5e578063c1bb890114610b23578063c45a015514610ade578063c4b7de9714610a99578063c4d66de814610794578063c57eadfc14610759578063c68360a514610734578063ca52b0b714610716578063cbcb3171146106f1578063d04c698314610511578063d44bdfe7146104d2578063d5f39488146104a9578063d7e1ef391461047d578063db2bd5331461045f578063dc08e09414610419578063e7c2b772146103f6578063ed479c47146103d8578063f1f5c99314610393578063fc0c546a1461036c5763ff6d8d0514610214575f80fd5b346103695760203660031901126103695761022d6119fd565b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361035a576007549160ff831661034b576001600160a01b03811692831561033c57610283611b03565b1561032a57606060409460017ff8d37a90738ae063b8b8058b66f5880cf3cf7ab0c5d4fa78219696591dfbfb679360ff1916176007556102c1611f58565b60055494806005556006548095826006558761031b575b816102fe575b50505085519081528460208201528386820152a182519182526020820152f35b915461031392906001600160a01b0316612353565b5f84816102de565b6103258882612067565b6102d8565b6001620b9b5560e31b03198352600483fd5b63d92e233d60e01b8352600483fd5b63e6a0d45f60e01b8252600482fd5b631966391b60e11b8152600490fd5b80fd5b5034610369578060031936011261036957546040516001600160a01b039091168152602090f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346103695780600319360112610369576020600254604051908152f35b5034610369578060031936011261036957602060ff600754166040519015158152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158152602090f35b50346103695780600319360112610369576020600454604051908152f35b50346103695760203660031901126103695760206104a161049c6119fd565b611b1d565b604051908152f35b50346103695780600319360112610369576001546040516001600160a01b039091168152602090f35b50346103695760203660031901126103695760209060ff906040906001600160a01b036104fd6119fd565b168152600d84522054166040519015158152f35b50346103695761052036611a13565b909161052a611b87565b83546001600160a01b03169384156106e25760ff6007541680156106d4575b6106c55781156106b6576001600160a01b0383169283156106a7576105896105f99684610583610577611a57565b92909330903390612513565b8561224a565b916127106105b77f000000000000000000000000000000000000000000000000000000000000000085611ac6565b049687936105f46127106105eb7f000000000000000000000000000000000000000000000000000000000000000084611ac6565b04998a92611a4a565b611a4a565b9580871061068f575050948161065a86602098610637857f8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df97612299565b61064382600554611a4a565b60055561065287600654611a3d565b600655612067565b604080519485526020850187905284015260608301523391608090a360015f5160206128415f395f51905f5255604051908152f35b6371c4efed60e01b8252600487905260245260449150fd5b63d92e233d60e01b8252600482fd5b631f2a200560e01b8152600490fd5b63012d60bf60e11b8152600490fd5b506106dd611b03565b610549565b6321c4e35760e21b8152600490fd5b5034610369578060031936011261036957602061070c611a57565b9050604051908152f35b50346103695780600319360112610369576020600554604051908152f35b5034610369578060031936011261036957602061074f611b03565b6040519015158152f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610369576020366003190112610369576107ae6119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633819003610a8a578254916001600160a01b038316610a7c576001600160a01b0316918215610a6d576001600160a01b031916821783556040516318160ddd60e01b8152602081600481865afa908115610a17578491610a3b575b506108897f00000000000000000000000000000000000000000000000000000000000000006108827f000000000000000000000000000000000000000000000000000000000000000082611a3d565b9083612475565b80158015610a31575b610a225760085560095542600a556040516328712d6160e11b8152602081600481855afa908115610a175784916109e4575b50600b55604051636783774b60e01b815290602090829060049082905afa9081156109a75783916109b2575b50600c556040516370a0823160e01b8152306004820152602081602481855afa9081156109a7578391610951575b507f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e691602091600655604051908152a180f35b90506020813d60201161099f575b8161096c60209383611a90565b8101031261099b57517f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e661091e565b5f80fd5b3d915061095f565b6040513d85823e3d90fd5b90506020813d6020116109dc575b816109cd60209383611a90565b8101031261099b57515f6108f0565b3d91506109c0565b90506020813d602011610a0f575b816109ff60209383611a90565b8101031261099b575160046108c4565b3d91506109f2565b6040513d86823e3d90fd5b63bc0ecfe360e01b8552600485fd5b5081811015610892565b90506020813d602011610a65575b81610a5660209383611a90565b8101031261099b57515f610833565b3d9150610a49565b63d92e233d60e01b8452600484fd5b62dc149f60e41b8452600484fd5b631966391b60e11b8352600483fd5b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103695780600319360112610369576020600a54604051908152f35b50346103695780600319360112610369576020610b97611a57565b50604051908152f35b503461036957602036600319011261036957600435801515809103610c46577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610c37576001805460ff60a01b191660a083901b60ff60a01b161790556040519081527fbfe799fb5e0148a5f2590ff531306d42a5d512b74a5029ceb805abb808b0f1a090602090a180f35b631966391b60e11b8252600482fd5b5080fd5b5034610369578060031936011261036957602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610369578060031936011261036957602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461036957806003193601126103695760206104a1611ae3565b503461036957602036600319011261036957610d7d6119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610c37576001600160a01b031680156106a757600154816001600160a01b0382167f2cc664e1ac1e2d05c0d4637bb63ec8189113b6ac39276be8977e26216a8cdd198580a36001600160a01b0319161760015580f35b50346103695780600319360112610369576020600354604051908152f35b50346103695780600319360112610369576020600c54604051908152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50610e8a36611a13565b610e95929192611b87565b5f546001600160a01b0316156114965760ff600754166113e6576001600160a01b03811691821561148757610ec99061210c565b80156114785760ff600754166113e657610f1d610f14610f0b6005547f0000000000000000000000000000000000000000000000000000000000000000611a3d565b60025490611a4a565b60045490611a4a565b9360065494610f2b84611b1d565b92836113fd575b80947f000000000000000000000000000000000000000000000000000000000000000093610f608584611ac6565b6127109004937f000000000000000000000000000000000000000000000000000000000000000095610f928786611ac6565b612710900497610fa28187611ac6565b612710900497838d8a8c610fb68c8c611a4a565b90610fc091611a4a565b90610fca91611a4a565b91610fd49261224a565b9c6008548082115f146113f557610feb9082611a4a565b905b81156113e657818f116112bf575b50505050505061100b8188611ac6565b6110158a85611ac6565b106112a957509161108d8685936105f48b61109e9761105f8b61105a7fec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc4559d9c8a611a3d565b612299565b61106b85600554611a3d565b60055561107a82600654611a4a565b6006555f546001600160a01b0316612353565b8061126d575b508161123d57611a3d565b604080519485526020850187905284015260608301523391608090a36110c2611b03565b6110e3575b60209060015f5160206128415f395f51905f5255604051908152f35b5f546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116813b1561099b576040519063ff6d8d0560e01b825260048201525f8160248183865af19081611228575b5061118057509054602091906001600160a01b03167fe2cd2f31ebc05ec28640102987f4c8fc5f20e269e1b3aa82577f3f2f0e35c7c6835a604051908152a26110c7565b60208391602460018060a01b038454166040519687938492632f53ef2f60e01b845260048401525af1806111f6575b602093506111f057546001600160a01b03167fe2cd2f31ebc05ec28640102987f4c8fc5f20e269e1b3aa82577f3f2f0e35c7c6835a604051908152a26110c7565b506110c7565b6020843d602011611220575b8161120f60209383611a90565b8101031261099b57602093506111af565b3d9150611202565b6112359194505f90611a90565b5f925f61113c565b867f3bc39a5562b28f5fe8f36cecabfbaa12bb969acf05717994709225fc412a99346020604051858152a2611a3d565b6112a3906040518181527fa69e8258ccc7b9bbb70ab953fc2d1062b4ee28b8ca827534097e1732e87b026260203392a233612067565b5f611093565b886371c4efed60e01b5f5260045260245260445ffd5b949d509498509650975097508199801580156113dc575b6113cd576112e49083611ac6565b9161271083029280840461271014901517156113b95761130391611a4a565b61271081029080820461271014901517156113b95761132191611ad9565b600181018091116113b957866127100361271081116113b957866105f48661134893611a4a565b61135281836123d4565b9080156113a5576113906127106113886113786113989583979584809709151590611a3d565b8880821091180288189b8c611ac6565b04968a611ac6565b049688611ac6565b04935f8080808080610ffb565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b63bb55fd2760e01b5f5260045ffd5b50828211156112d6565b63012d60bf60e11b5f5260045ffd5b505f90610fed565b7f00000000000000000000000000000000000000000000000000000000000000006127100361271081116113b957611456907f000000000000000000000000000000000000000000000000000000000000000090611a4a565b60631981019081116113b957808511611470575b50610f32565b93505f61146a565b631f2a200560e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b6321c4e35760e21b5f5260045ffd5b3461099b575f36600319011261099b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036116315760025460045490801580611629575b6114785761153f60409261153a61271061153261ffff7f00000000000000000000000000000000000000000000000000000000000000001686611ac6565b048094611a4a565b611a3d565b5f6002555f6003555f6004556115606115588284611a3d565b600554611a4a565b600555816115fa575b806115de575b6001548351838152602081018390526001600160a01b03918216917f000000000000000000000000000000000000000000000000000000000000000016907f6460dc5c867a0678a8bcc5e64f629fae539901c53a4a8b42fe21d7a6c5e6437d908690a382519182526020820152f35b6001546115f59082906001600160a01b0316612067565b61156f565b611624827f0000000000000000000000000000000000000000000000000000000000000000612067565b611569565b5081156114f4565b631966391b60e11b5f5260045ffd5b3461099b575f36600319011261099b576020600b54604051908152f35b3461099b575f36600319011261099b5760206104a1610f1460055460025490611a4a565b3461099b575f36600319011261099b576020600654604051908152f35b3461099b575f36600319011261099b57602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461099b575f36600319011261099b576020600954604051908152f35b3461099b575f36600319011261099b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461099b575f36600319011261099b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461099b57602036600319011261099b5761179a611b87565b60ff600754166118bc57604051638a36a6bb60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156118b1575f9161186f575b506001600160a01b0316331415808061185a575b61184b5780611840575b6118315761181e600435611bbf565b60015f5160206128415f395f51905f5255005b630c736d4160e21b5f5260045ffd5b50600354151561180f565b63235084c360e21b5f5260045ffd5b506001546001600160a01b0316331415611805565b90506020813d6020116118a9575b8161188a60209383611a90565b8101031261099b57516001600160a01b038116810361099b57816117f1565b3d915061187d565b6040513d5f823e3d90fd5b63e6a0d45f60e01b5f5260045ffd5b3461099b57602036600319011261099b576118e46119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303611631576001600160a01b03165f818152600d60205260408120805460ff191660011790557fe4b7e48fbd47c2f602bacadee76ad33b16542ddb4997cfc0de04c311adcfa8c79080a2005b3461099b575f36600319011261099b5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461099b575f36600319011261099b57602060ff60015460a01c166040519015158152f35b3461099b575f36600319011261099b576020600854604051908152f35b3461099b575f36600319011261099b5760406119f1611a57565b82519182526020820152f35b600435906001600160a01b038216820361099b57565b606090600319011261099b5760043590602435906044356001600160a01b038116810361099b5790565b919082018092116113b957565b919082039182116113b957565b611a89610f14610f0b6005547f0000000000000000000000000000000000000000000000000000000000000000611a3d565b9060065490565b90601f8019910116810190811067ffffffffffffffff821117611ab257604052565b634e487b7160e01b5f52604160045260245ffd5b818102929181159184041417156113b957565b81156113a5570490565b60065460085480821115611afd57611afa91611a4a565b90565b50505f90565b60ff60075416611b1957611b15611ae3565b1590565b5f90565b6001600160a01b03165f908152600d602052604090205460ff16611b1957600b548015611b8257611b50600a5442611a4a565b600c5480821015611b7b57600e820291808304600e14901517156113b957611b7791611ad9565b1c90565b5050505f90565b505f90565b60025f5160206128415f395f51905f525414611bb05760025f5160206128415f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b60025490600454821580611f50575b611f4b5761ffff7f000000000000000000000000000000000000000000000000000000000000000016611c0f612710611c078387611ac6565b048095611a4a565b600354818082109118029384821890611c2d829561153a8486611a4a565b955f93148015611e54575b5050505f6002555f6003555f600455611c546115588587611a3d565b60055580611cef575b5050916060917f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f9382611cc0575b81611ca4575b60405192835260208301526040820152a1565b600154611cbb9083906001600160a01b03166126b0565b611c91565b611cea837f00000000000000000000000000000000000000000000000000000000000000006126b0565b611c8b565b92909391611cff84600654611a4a565b6006555f546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169691611d3f9187918991166125bb565b5f546001600160a01b031690863b1561099b5760405163892823f760e01b81526004810192909252602482018690526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660448401527f00000000000000000000000000000000000000000000000000000000000000001660648301526084820152945f90869060a490829084905af19485156118b15760406060957f5feba9b0d52c92ada4b9c571c2bee52390c54f2947208ab250221e6ee32f12ff927f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f98611e44575b508151908482526020820152a19193819350611c5d565b5f611e4e91611a90565b5f611e2d565b8196939592949615611f3c57611e68611a57565b90916127108702908782046127101417156113b957611e9190611e8b8885611a3d565b90611ad9565b61ffff7f0000000000000000000000000000000000000000000000000000000000000000161015611f05575b505084611edc57505090611ed091611a3d565b915f915b5f8080611c38565b848192959396945010611eef5750611ed4565b906371c4efed60e01b5f5260045260245260445ffd5b611f0f918661257c565b80151580611f2b575b611f23575b80611ebd565b94505f611f1d565b50611f34611ae3565b811115611f18565b633672d25f60e01b5f5260045ffd5b505050565b508015611bce565b60025460045481158061205f575b61205b57611fa6612710611f9e61ffff7f00000000000000000000000000000000000000000000000000000000000000001685611ac6565b048093611a4a565b91611fd46060927f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f94611a3d565b5f6002555f6003555f600455611fed6115588284611a3d565b6005558161202c575b80612010575b6040519182525f60208301526040820152a1565b6001546120279082906001600160a01b03166126b0565b611ffc565b612056827f00000000000000000000000000000000000000000000000000000000000000006126b0565b611ff6565b5050565b508015611f66565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316919082156120a4576120a292612353565b565b5f9250829182918291906001600160a01b03165af13d15612107573d67ffffffffffffffff8111611ab257604051906120e7601f8201601f191660200183611a90565b81525f60203d92013e5b156120f857565b6312171d8360e31b5f5260045ffd5b6120f1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169081156122285734612219576040516370a0823160e01b815230600482015290602082602481865afa9182156118b1575f926121e4575b5060249261217f602092303384612513565b6040516370a0823160e01b815230600482015293849182905afa80156118b1575f906121b0575b611afa9250611a4a565b506020823d6020116121dc575b816121ca60209383611a90565b8101031261099b57611afa91516121a6565b3d91506121bd565b9091506020813d602011612211575b8161220060209383611a90565b8101031261099b575190602461216d565b3d91506121f3565b63e0aeda7d60e01b5f5260045ffd5b80915034036122345790565b635e3b067f60e11b5f523460045260245260445ffd5b9091811561228a5782158015612282575b6113cd5761226a925f926127f8565b90811561227357565b6342301c2360e01b5f5260045ffd5b50801561225b565b63098fb56160e01b5f5260045ffd5b906122b5906122aa83600254611a3d565b600255600454611a3d565b60045560ff60015460a01c168061234a575b6122ce5750565b61271061233c612311612345938361230a61ffff7f00000000000000000000000000000000000000000000000000000000000000001683611ac6565b0490611a4a565b61ffff7f00000000000000000000000000000000000000000000000000000000000000001690611ac6565b04600354611a3d565b600355565b508015156122c7565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f51148216156123b3575b604052156123935750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b9060018115166123cb57823b15153d15161690612388565b503d5f823e3d90fd5b5f19612710820991612710820291828085109403938085039414612469578382111561245157612710829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b5090611afa9250611ad9565b90915f19838309928083029283808610950394808603951461250657848311156124ee5790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b82634e487b715f52156003026011186020526024601cfd5b505090611afa9250611ad9565b6040516323b872dd60e01b5f9081526001600160a01b039384166004529290931660245260449390935260209060648180865af19060015f5114821615612564575b6040525f606052156123935750565b9060018115166123cb57823b15153d15161690612555565b9091811580156125b3575b80156125ab575b80156125a4575b611b7b57611afa925f926127f8565b505f612595565b50801561258e565b508215612587565b916040519163095ea7b360e01b5f5260018060a01b031691826004528160245260205f60448180885af19060015f51148216156126a1575b6040521561260057505050565b60405163095ea7b360e01b5f52826004525f60245260205f60448180885af19060015f5114821615612689575b6040521561266b576040519163095ea7b360e01b5f5260045260245260205f60448180865af19060015f51148216156123b357604052156123935750565b635274afe760e01b5f9081526001600160a01b038416600452602490fd5b9060018115166123cb57843b15153d1516169061262d565b90843b15153d151616906125f3565b5f91907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316908115612781577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127198482856125bb565b803b1561277d578492918360649260405196879586946309ad4dd960e01b865260018060a01b03166004860152602485015260448401525af1801561277257612760575050565b61276b828092611a90565b6103695750565b6040513d84823e3d90fd5b8480fd5b919250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b1561099b576040516301aba89b60e71b81526001600160a01b03909216600483015290915f9183916024918391905af180156118b1576127ee5750565b5f6120a291611a90565b909192612710039061271082116113b95761281d9161281691611ac6565b9283611ac6565b9061271081029080820461271014901517156113b957611afa92611e8b91611a3d56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122090d551ca074a98195b1f59f2f6d365d2327eadf9b689d09c96dc1c9ec364991664736f6c63430008230033",
      "runtime": "0x60806040526004361015610011575f80fd5b5f5f3560e01c80630902f1ac146119d757806315a55347146119ba578063160d0da51461199557806324a9d8531461195b57806331ff7f22146118cb5780633729bb9a146117815780633cd1fb8f1461173d5780633de35b79146116f95780633f7ed6b7146116dc57806349127e2a1461169e5780634c37ef23146116815780634f1f58fd1461165d57806350e25ac21461164057806352920587146114a557806359a87bc114610e8057806364df049e14610e3b5780636783774b14610e1d5780637809452a14610dff5780637b04ea6214610d63578063808bcddc14610d485780638258903814610d035780638b0bc50114610cc85780639040f86614610c8957806390addc1e14610c4a5780639a9b567d14610ba05780639da771f414610b7c578063bf56b37114610b5e578063c1bb890114610b23578063c45a015514610ade578063c4b7de9714610a99578063c4d66de814610794578063c57eadfc14610759578063c68360a514610734578063ca52b0b714610716578063cbcb3171146106f1578063d04c698314610511578063d44bdfe7146104d2578063d5f39488146104a9578063d7e1ef391461047d578063db2bd5331461045f578063dc08e09414610419578063e7c2b772146103f6578063ed479c47146103d8578063f1f5c99314610393578063fc0c546a1461036c5763ff6d8d0514610214575f80fd5b346103695760203660031901126103695761022d6119fd565b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361035a576007549160ff831661034b576001600160a01b03811692831561033c57610283611b03565b1561032a57606060409460017ff8d37a90738ae063b8b8058b66f5880cf3cf7ab0c5d4fa78219696591dfbfb679360ff1916176007556102c1611f58565b60055494806005556006548095826006558761031b575b816102fe575b50505085519081528460208201528386820152a182519182526020820152f35b915461031392906001600160a01b0316612353565b5f84816102de565b6103258882612067565b6102d8565b6001620b9b5560e31b03198352600483fd5b63d92e233d60e01b8352600483fd5b63e6a0d45f60e01b8252600482fd5b631966391b60e11b8152600490fd5b80fd5b5034610369578060031936011261036957546040516001600160a01b039091168152602090f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346103695780600319360112610369576020600254604051908152f35b5034610369578060031936011261036957602060ff600754166040519015158152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158152602090f35b50346103695780600319360112610369576020600454604051908152f35b50346103695760203660031901126103695760206104a161049c6119fd565b611b1d565b604051908152f35b50346103695780600319360112610369576001546040516001600160a01b039091168152602090f35b50346103695760203660031901126103695760209060ff906040906001600160a01b036104fd6119fd565b168152600d84522054166040519015158152f35b50346103695761052036611a13565b909161052a611b87565b83546001600160a01b03169384156106e25760ff6007541680156106d4575b6106c55781156106b6576001600160a01b0383169283156106a7576105896105f99684610583610577611a57565b92909330903390612513565b8561224a565b916127106105b77f000000000000000000000000000000000000000000000000000000000000000085611ac6565b049687936105f46127106105eb7f000000000000000000000000000000000000000000000000000000000000000084611ac6565b04998a92611a4a565b611a4a565b9580871061068f575050948161065a86602098610637857f8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df97612299565b61064382600554611a4a565b60055561065287600654611a3d565b600655612067565b604080519485526020850187905284015260608301523391608090a360015f5160206128415f395f51905f5255604051908152f35b6371c4efed60e01b8252600487905260245260449150fd5b63d92e233d60e01b8252600482fd5b631f2a200560e01b8152600490fd5b63012d60bf60e11b8152600490fd5b506106dd611b03565b610549565b6321c4e35760e21b8152600490fd5b5034610369578060031936011261036957602061070c611a57565b9050604051908152f35b50346103695780600319360112610369576020600554604051908152f35b5034610369578060031936011261036957602061074f611b03565b6040519015158152f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610369576020366003190112610369576107ae6119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633819003610a8a578254916001600160a01b038316610a7c576001600160a01b0316918215610a6d576001600160a01b031916821783556040516318160ddd60e01b8152602081600481865afa908115610a17578491610a3b575b506108897f00000000000000000000000000000000000000000000000000000000000000006108827f000000000000000000000000000000000000000000000000000000000000000082611a3d565b9083612475565b80158015610a31575b610a225760085560095542600a556040516328712d6160e11b8152602081600481855afa908115610a175784916109e4575b50600b55604051636783774b60e01b815290602090829060049082905afa9081156109a75783916109b2575b50600c556040516370a0823160e01b8152306004820152602081602481855afa9081156109a7578391610951575b507f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e691602091600655604051908152a180f35b90506020813d60201161099f575b8161096c60209383611a90565b8101031261099b57517f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e661091e565b5f80fd5b3d915061095f565b6040513d85823e3d90fd5b90506020813d6020116109dc575b816109cd60209383611a90565b8101031261099b57515f6108f0565b3d91506109c0565b90506020813d602011610a0f575b816109ff60209383611a90565b8101031261099b575160046108c4565b3d91506109f2565b6040513d86823e3d90fd5b63bc0ecfe360e01b8552600485fd5b5081811015610892565b90506020813d602011610a65575b81610a5660209383611a90565b8101031261099b57515f610833565b3d9150610a49565b63d92e233d60e01b8452600484fd5b62dc149f60e41b8452600484fd5b631966391b60e11b8352600483fd5b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103695780600319360112610369576020600a54604051908152f35b50346103695780600319360112610369576020610b97611a57565b50604051908152f35b503461036957602036600319011261036957600435801515809103610c46577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610c37576001805460ff60a01b191660a083901b60ff60a01b161790556040519081527fbfe799fb5e0148a5f2590ff531306d42a5d512b74a5029ceb805abb808b0f1a090602090a180f35b631966391b60e11b8252600482fd5b5080fd5b5034610369578060031936011261036957602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610369578060031936011261036957602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461036957806003193601126103695760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461036957806003193601126103695760206104a1611ae3565b503461036957602036600319011261036957610d7d6119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610c37576001600160a01b031680156106a757600154816001600160a01b0382167f2cc664e1ac1e2d05c0d4637bb63ec8189113b6ac39276be8977e26216a8cdd198580a36001600160a01b0319161760015580f35b50346103695780600319360112610369576020600354604051908152f35b50346103695780600319360112610369576020600c54604051908152f35b50346103695780600319360112610369576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50610e8a36611a13565b610e95929192611b87565b5f546001600160a01b0316156114965760ff600754166113e6576001600160a01b03811691821561148757610ec99061210c565b80156114785760ff600754166113e657610f1d610f14610f0b6005547f0000000000000000000000000000000000000000000000000000000000000000611a3d565b60025490611a4a565b60045490611a4a565b9360065494610f2b84611b1d565b92836113fd575b80947f000000000000000000000000000000000000000000000000000000000000000093610f608584611ac6565b6127109004937f000000000000000000000000000000000000000000000000000000000000000095610f928786611ac6565b612710900497610fa28187611ac6565b612710900497838d8a8c610fb68c8c611a4a565b90610fc091611a4a565b90610fca91611a4a565b91610fd49261224a565b9c6008548082115f146113f557610feb9082611a4a565b905b81156113e657818f116112bf575b50505050505061100b8188611ac6565b6110158a85611ac6565b106112a957509161108d8685936105f48b61109e9761105f8b61105a7fec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc4559d9c8a611a3d565b612299565b61106b85600554611a3d565b60055561107a82600654611a4a565b6006555f546001600160a01b0316612353565b8061126d575b508161123d57611a3d565b604080519485526020850187905284015260608301523391608090a36110c2611b03565b6110e3575b60209060015f5160206128415f395f51905f5255604051908152f35b5f546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116813b1561099b576040519063ff6d8d0560e01b825260048201525f8160248183865af19081611228575b5061118057509054602091906001600160a01b03167fe2cd2f31ebc05ec28640102987f4c8fc5f20e269e1b3aa82577f3f2f0e35c7c6835a604051908152a26110c7565b60208391602460018060a01b038454166040519687938492632f53ef2f60e01b845260048401525af1806111f6575b602093506111f057546001600160a01b03167fe2cd2f31ebc05ec28640102987f4c8fc5f20e269e1b3aa82577f3f2f0e35c7c6835a604051908152a26110c7565b506110c7565b6020843d602011611220575b8161120f60209383611a90565b8101031261099b57602093506111af565b3d9150611202565b6112359194505f90611a90565b5f925f61113c565b867f3bc39a5562b28f5fe8f36cecabfbaa12bb969acf05717994709225fc412a99346020604051858152a2611a3d565b6112a3906040518181527fa69e8258ccc7b9bbb70ab953fc2d1062b4ee28b8ca827534097e1732e87b026260203392a233612067565b5f611093565b886371c4efed60e01b5f5260045260245260445ffd5b949d509498509650975097508199801580156113dc575b6113cd576112e49083611ac6565b9161271083029280840461271014901517156113b95761130391611a4a565b61271081029080820461271014901517156113b95761132191611ad9565b600181018091116113b957866127100361271081116113b957866105f48661134893611a4a565b61135281836123d4565b9080156113a5576113906127106113886113786113989583979584809709151590611a3d565b8880821091180288189b8c611ac6565b04968a611ac6565b049688611ac6565b04935f8080808080610ffb565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b63bb55fd2760e01b5f5260045ffd5b50828211156112d6565b63012d60bf60e11b5f5260045ffd5b505f90610fed565b7f00000000000000000000000000000000000000000000000000000000000000006127100361271081116113b957611456907f000000000000000000000000000000000000000000000000000000000000000090611a4a565b60631981019081116113b957808511611470575b50610f32565b93505f61146a565b631f2a200560e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b6321c4e35760e21b5f5260045ffd5b3461099b575f36600319011261099b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036116315760025460045490801580611629575b6114785761153f60409261153a61271061153261ffff7f00000000000000000000000000000000000000000000000000000000000000001686611ac6565b048094611a4a565b611a3d565b5f6002555f6003555f6004556115606115588284611a3d565b600554611a4a565b600555816115fa575b806115de575b6001548351838152602081018390526001600160a01b03918216917f000000000000000000000000000000000000000000000000000000000000000016907f6460dc5c867a0678a8bcc5e64f629fae539901c53a4a8b42fe21d7a6c5e6437d908690a382519182526020820152f35b6001546115f59082906001600160a01b0316612067565b61156f565b611624827f0000000000000000000000000000000000000000000000000000000000000000612067565b611569565b5081156114f4565b631966391b60e11b5f5260045ffd5b3461099b575f36600319011261099b576020600b54604051908152f35b3461099b575f36600319011261099b5760206104a1610f1460055460025490611a4a565b3461099b575f36600319011261099b576020600654604051908152f35b3461099b575f36600319011261099b57602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461099b575f36600319011261099b576020600954604051908152f35b3461099b575f36600319011261099b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461099b575f36600319011261099b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461099b57602036600319011261099b5761179a611b87565b60ff600754166118bc57604051638a36a6bb60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156118b1575f9161186f575b506001600160a01b0316331415808061185a575b61184b5780611840575b6118315761181e600435611bbf565b60015f5160206128415f395f51905f5255005b630c736d4160e21b5f5260045ffd5b50600354151561180f565b63235084c360e21b5f5260045ffd5b506001546001600160a01b0316331415611805565b90506020813d6020116118a9575b8161188a60209383611a90565b8101031261099b57516001600160a01b038116810361099b57816117f1565b3d915061187d565b6040513d5f823e3d90fd5b63e6a0d45f60e01b5f5260045ffd5b3461099b57602036600319011261099b576118e46119fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303611631576001600160a01b03165f818152600d60205260408120805460ff191660011790557fe4b7e48fbd47c2f602bacadee76ad33b16542ddb4997cfc0de04c311adcfa8c79080a2005b3461099b575f36600319011261099b5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461099b575f36600319011261099b57602060ff60015460a01c166040519015158152f35b3461099b575f36600319011261099b576020600854604051908152f35b3461099b575f36600319011261099b5760406119f1611a57565b82519182526020820152f35b600435906001600160a01b038216820361099b57565b606090600319011261099b5760043590602435906044356001600160a01b038116810361099b5790565b919082018092116113b957565b919082039182116113b957565b611a89610f14610f0b6005547f0000000000000000000000000000000000000000000000000000000000000000611a3d565b9060065490565b90601f8019910116810190811067ffffffffffffffff821117611ab257604052565b634e487b7160e01b5f52604160045260245ffd5b818102929181159184041417156113b957565b81156113a5570490565b60065460085480821115611afd57611afa91611a4a565b90565b50505f90565b60ff60075416611b1957611b15611ae3565b1590565b5f90565b6001600160a01b03165f908152600d602052604090205460ff16611b1957600b548015611b8257611b50600a5442611a4a565b600c5480821015611b7b57600e820291808304600e14901517156113b957611b7791611ad9565b1c90565b5050505f90565b505f90565b60025f5160206128415f395f51905f525414611bb05760025f5160206128415f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b60025490600454821580611f50575b611f4b5761ffff7f000000000000000000000000000000000000000000000000000000000000000016611c0f612710611c078387611ac6565b048095611a4a565b600354818082109118029384821890611c2d829561153a8486611a4a565b955f93148015611e54575b5050505f6002555f6003555f600455611c546115588587611a3d565b60055580611cef575b5050916060917f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f9382611cc0575b81611ca4575b60405192835260208301526040820152a1565b600154611cbb9083906001600160a01b03166126b0565b611c91565b611cea837f00000000000000000000000000000000000000000000000000000000000000006126b0565b611c8b565b92909391611cff84600654611a4a565b6006555f546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169691611d3f9187918991166125bb565b5f546001600160a01b031690863b1561099b5760405163892823f760e01b81526004810192909252602482018690526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660448401527f00000000000000000000000000000000000000000000000000000000000000001660648301526084820152945f90869060a490829084905af19485156118b15760406060957f5feba9b0d52c92ada4b9c571c2bee52390c54f2947208ab250221e6ee32f12ff927f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f98611e44575b508151908482526020820152a19193819350611c5d565b5f611e4e91611a90565b5f611e2d565b8196939592949615611f3c57611e68611a57565b90916127108702908782046127101417156113b957611e9190611e8b8885611a3d565b90611ad9565b61ffff7f0000000000000000000000000000000000000000000000000000000000000000161015611f05575b505084611edc57505090611ed091611a3d565b915f915b5f8080611c38565b848192959396945010611eef5750611ed4565b906371c4efed60e01b5f5260045260245260445ffd5b611f0f918661257c565b80151580611f2b575b611f23575b80611ebd565b94505f611f1d565b50611f34611ae3565b811115611f18565b633672d25f60e01b5f5260045ffd5b505050565b508015611bce565b60025460045481158061205f575b61205b57611fa6612710611f9e61ffff7f00000000000000000000000000000000000000000000000000000000000000001685611ac6565b048093611a4a565b91611fd46060927f9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f94611a3d565b5f6002555f6003555f600455611fed6115588284611a3d565b6005558161202c575b80612010575b6040519182525f60208301526040820152a1565b6001546120279082906001600160a01b03166126b0565b611ffc565b612056827f00000000000000000000000000000000000000000000000000000000000000006126b0565b611ff6565b5050565b508015611f66565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316919082156120a4576120a292612353565b565b5f9250829182918291906001600160a01b03165af13d15612107573d67ffffffffffffffff8111611ab257604051906120e7601f8201601f191660200183611a90565b81525f60203d92013e5b156120f857565b6312171d8360e31b5f5260045ffd5b6120f1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169081156122285734612219576040516370a0823160e01b815230600482015290602082602481865afa9182156118b1575f926121e4575b5060249261217f602092303384612513565b6040516370a0823160e01b815230600482015293849182905afa80156118b1575f906121b0575b611afa9250611a4a565b506020823d6020116121dc575b816121ca60209383611a90565b8101031261099b57611afa91516121a6565b3d91506121bd565b9091506020813d602011612211575b8161220060209383611a90565b8101031261099b575190602461216d565b3d91506121f3565b63e0aeda7d60e01b5f5260045ffd5b80915034036122345790565b635e3b067f60e11b5f523460045260245260445ffd5b9091811561228a5782158015612282575b6113cd5761226a925f926127f8565b90811561227357565b6342301c2360e01b5f5260045ffd5b50801561225b565b63098fb56160e01b5f5260045ffd5b906122b5906122aa83600254611a3d565b600255600454611a3d565b60045560ff60015460a01c168061234a575b6122ce5750565b61271061233c612311612345938361230a61ffff7f00000000000000000000000000000000000000000000000000000000000000001683611ac6565b0490611a4a565b61ffff7f00000000000000000000000000000000000000000000000000000000000000001690611ac6565b04600354611a3d565b600355565b508015156122c7565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f51148216156123b3575b604052156123935750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b9060018115166123cb57823b15153d15161690612388565b503d5f823e3d90fd5b5f19612710820991612710820291828085109403938085039414612469578382111561245157612710829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b5090611afa9250611ad9565b90915f19838309928083029283808610950394808603951461250657848311156124ee5790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b82634e487b715f52156003026011186020526024601cfd5b505090611afa9250611ad9565b6040516323b872dd60e01b5f9081526001600160a01b039384166004529290931660245260449390935260209060648180865af19060015f5114821615612564575b6040525f606052156123935750565b9060018115166123cb57823b15153d15161690612555565b9091811580156125b3575b80156125ab575b80156125a4575b611b7b57611afa925f926127f8565b505f612595565b50801561258e565b508215612587565b916040519163095ea7b360e01b5f5260018060a01b031691826004528160245260205f60448180885af19060015f51148216156126a1575b6040521561260057505050565b60405163095ea7b360e01b5f52826004525f60245260205f60448180885af19060015f5114821615612689575b6040521561266b576040519163095ea7b360e01b5f5260045260245260205f60448180865af19060015f51148216156123b357604052156123935750565b635274afe760e01b5f9081526001600160a01b038416600452602490fd5b9060018115166123cb57843b15153d1516169061262d565b90843b15153d151616906125f3565b5f91907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316908115612781577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127198482856125bb565b803b1561277d578492918360649260405196879586946309ad4dd960e01b865260018060a01b03166004860152602485015260448401525af1801561277257612760575050565b61276b828092611a90565b6103695750565b6040513d84823e3d90fd5b8480fd5b919250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b1561099b576040516301aba89b60e71b81526001600160a01b03909216600483015290915f9183916024918391905af180156118b1576127ee5750565b5f6120a291611a90565b909192612710039061271082116113b95761281d9161281691611ac6565b9283611ac6565b9061271081029080820461271014901517156113b957611afa92611e8b91611a3d56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122090d551ca074a98195b1f59f2f6d365d2327eadf9b689d09c96dc1c9ec364991664736f6c63430008230033",
      "immutableReferences": {
        "40329": [
          {
            "start": 1071,
            "length": 32
          },
          {
            "start": 5902,
            "length": 32
          },
          {
            "start": 8297,
            "length": 32
          },
          {
            "start": 8462,
            "length": 32
          },
          {
            "start": 9909,
            "length": 32
          }
        ],
        "40333": [
          {
            "start": 560,
            "length": 32
          },
          {
            "start": 1968,
            "length": 32
          },
          {
            "start": 2804,
            "length": 32
          },
          {
            "start": 3009,
            "length": 32
          },
          {
            "start": 3455,
            "length": 32
          },
          {
            "start": 4335,
            "length": 32
          },
          {
            "start": 5303,
            "length": 32
          },
          {
            "start": 6374,
            "length": 32
          }
        ],
        "40336": [
          {
            "start": 3353,
            "length": 32
          },
          {
            "start": 6073,
            "length": 32
          }
        ],
        "40339": [
          {
            "start": 2735,
            "length": 32
          },
          {
            "start": 9958,
            "length": 32
          },
          {
            "start": 10119,
            "length": 32
          }
        ],
        "40342": [
          {
            "start": 937,
            "length": 32
          },
          {
            "start": 7438,
            "length": 32
          }
        ],
        "40344": [
          {
            "start": 3665,
            "length": 32
          },
          {
            "start": 5516,
            "length": 32
          },
          {
            "start": 5632,
            "length": 32
          },
          {
            "start": 7366,
            "length": 32
          },
          {
            "start": 7584,
            "length": 32
          },
          {
            "start": 8242,
            "length": 32
          }
        ],
        "40346": [
          {
            "start": 5970,
            "length": 32
          },
          {
            "start": 7544,
            "length": 32
          }
        ],
        "40348": [
          {
            "start": 3236,
            "length": 32
          },
          {
            "start": 5388,
            "length": 32
          },
          {
            "start": 7127,
            "length": 32
          },
          {
            "start": 8056,
            "length": 32
          },
          {
            "start": 8932,
            "length": 32
          }
        ],
        "40350": [
          {
            "start": 5816,
            "length": 32
          },
          {
            "start": 8982,
            "length": 32
          }
        ],
        "40352": [
          {
            "start": 3173,
            "length": 32
          },
          {
            "start": 7830,
            "length": 32
          }
        ],
        "40354": [
          {
            "start": 1905,
            "length": 32
          },
          {
            "start": 2105,
            "length": 32
          },
          {
            "start": 3815,
            "length": 32
          },
          {
            "start": 6757,
            "length": 32
          }
        ],
        "40356": [
          {
            "start": 1426,
            "length": 32
          },
          {
            "start": 3894,
            "length": 32
          },
          {
            "start": 5119,
            "length": 32
          },
          {
            "start": 6514,
            "length": 32
          }
        ],
        "40358": [
          {
            "start": 1478,
            "length": 32
          },
          {
            "start": 2875,
            "length": 32
          },
          {
            "start": 3944,
            "length": 32
          },
          {
            "start": 5169,
            "length": 32
          }
        ],
        "40360": [
          {
            "start": 2141,
            "length": 32
          },
          {
            "start": 3296,
            "length": 32
          }
        ]
      },
      "creationHash": "0x578491ed78a4a6d6a10e705c58dece78bca2ed61a12b78566b895e7dc255d4e9",
      "runtimeBytes": 10390,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/ShilloV2BondingCurve.sol": "ShilloV2BondingCurve"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloV2BondingCurve.sol": {
          "keccak256": "0x9a10d71081c96d09069fbbb8b6b9d0d023facef3270bac374c170c9d4e724aa2",
          "urls": [
            "bzz-raw://cd74b4475b93009c3583bf7dd321cd15ba3513eafbce643b36481d1c58727cbf",
            "dweb:/ipfs/QmUwEdXtpPAy6afsGo9UpbDvy2MWD7hTkY6YzJ9CF9KoJo"
          ],
          "license": "MIT"
        },
        "src/ShilloV2BuybackVault.sol": {
          "keccak256": "0x241b48e899062f8f35b0bc3819863422405fc90573ecc01d0b427d6e2862be29",
          "urls": [
            "bzz-raw://3844ce8d72c6eabe595de4a9fbd8db9eb99cc7eb3eed93186b60c2765c158113",
            "dweb:/ipfs/QmdvT7ogvx87SMBPqHC6AZ7ymgvaxP9AqEwSZyddP7Y2bY"
          ],
          "license": "MIT"
        },
        "src/ShilloV2LauncherToken.sol": {
          "keccak256": "0x34398ca7ef811f6a3ea27f22e23a9d4bf7f6a2b73accf00a1efb6d3a85c10d9e",
          "urls": [
            "bzz-raw://add53dba4381fd2dfcbe33b5c6b4cafb4b05c8a25e0444ed324fe305d6868367",
            "dweb:/ipfs/QmbkTS88J96KqVYZfPPYWfR5J1e9Ht5RPVdR7dm7MwHsRQ"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2.sol": {
          "keccak256": "0xa11234bcbb18e4b7ecc2a74ab571fac55c93be48e4e2940d56d8c365e7b58671",
          "urls": [
            "bzz-raw://05b58e8f851021be44e1523b78550ac00d5f043114fbd0a99199424401b7efc1",
            "dweb:/ipfs/QmPAViXH1FUydKFrLY9V1RaxQ7iZwF258Mx4PT76w6SvDn"
          ],
          "license": "MIT"
        },
        "src/interfaces/ILaunchpadV2Graduation.sol": {
          "keccak256": "0xd1a62a75cf9d34adbb7a40a3d0d34d0a40e4f6063a04f11c106764447fa33348",
          "urls": [
            "bzz-raw://568d591a7fc57fa0be15c5597cadbbb83e12db1d4bfee6bf95c1baa9886b5baa",
            "dweb:/ipfs/QmcpmqcV4AhXkGuK2ZfCC9Xexm64cVPeSpirgFYQcrRu7n"
          ],
          "license": "MIT"
        },
        "src/libraries/ShilloV2BondingCurveMath.sol": {
          "keccak256": "0xf239685c9667677db519fe47ceaa463131d2e247cfc90770a87e12c192c576a8",
          "urls": [
            "bzz-raw://3e1dd46b609d0f9010c4c2a1c85333f00936063316f8ebd363f7a8ff6fee4bdf",
            "dweb:/ipfs/QmWimP5ypMjjyRkYmCNsqURpsKJB987EPFMUH7b1Xtpzem"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
          "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
          "urls": [
            "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
            "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
          "keccak256": "0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c",
          "urls": [
            "bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0",
            "dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
          "keccak256": "0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d",
          "urls": [
            "bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100",
            "dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
          "keccak256": "0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc",
          "urls": [
            "bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037",
            "dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
          "keccak256": "0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44",
          "urls": [
            "bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d",
            "dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol": {
          "keccak256": "0xd735962e3d6660884153ba8a972b5f100dde4c482f2ff1c525ba7fdefb154cbd",
          "urls": [
            "bzz-raw://5a264d17b093f585844b0d977e9f60555b8c8d6513b304fde863cdf652a0d336",
            "dweb:/ipfs/QmWXfaJisjVnrjTUjZGryZpMob9wKivvtbodLS3PTc1ttq"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol": {
          "keccak256": "0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998",
          "urls": [
            "bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c",
            "dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol": {
          "keccak256": "0x669464167428061ee0f8618b73b3ee90aff8405683e7ddde8cd77dadaa1afe29",
          "urls": [
            "bzz-raw://0dda78587a7358b4fdf6b9fca0fde5a5e34930f36d5268a16028627fc0170195",
            "dweb:/ipfs/QmQ1b6cCceDRWNxti9HifsTCzmVP25Haxs1bWugm52vTqH"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
          "keccak256": "0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2",
          "urls": [
            "bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303",
            "dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol": {
          "keccak256": "0x2659248df25e34000ed214b3dc8da2160bc39874c992b477d9e2b1b3283dc073",
          "urls": [
            "bzz-raw://c345af1b0e7ea28d1216d6a04ab28f5534a5229b9edf9ca3cd0e84950ae58d26",
            "dweb:/ipfs/QmY63jtSrYpLRe8Gj1ep2vMDCKxGNNG3hnNVKBVnrs2nmA"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
          "keccak256": "0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f",
          "urls": [
            "bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e",
            "dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
          "keccak256": "0x377051c0c17a28038c32f58d76a42817eb3b24f2b4c6a2e788a9544e856d738d",
          "urls": [
            "bzz-raw://c5365fead4a20b84662284c97c07d707c67f5bc9e07b371980aba8c3c6e83661",
            "dweb:/ipfs/QmYrYoLPEADtXoCu9ZBnwkXdNB9D9FPHuhS9pWaQW4nYx5"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol": {
          "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
          "urls": [
            "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
            "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Panic.sol": {
          "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
          "urls": [
            "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
            "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol": {
          "keccak256": "0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53",
          "urls": [
            "bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99",
            "dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
          "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97",
          "urls": [
            "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b",
            "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
          "keccak256": "0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c",
          "urls": [
            "bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617",
            "dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
          "keccak256": "0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857",
          "urls": [
            "bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5",
            "dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": {
          "keccak256": "0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083",
          "urls": [
            "bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9",
            "dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif"
          ],
          "license": "MIT"
        }
      }
    },
    "ShilloV2LauncherToken": {
      "abi": [
        {
          "type": "constructor",
          "inputs": [
            {
              "name": "name_",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "symbol_",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "logo_",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "description_",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "socials_",
              "type": "tuple",
              "internalType": "struct ShilloV2LauncherToken.Socials",
              "components": [
                {
                  "name": "twitter",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "telegram",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "discord",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "website",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "farcaster",
                  "type": "string",
                  "internalType": "string"
                }
              ]
            },
            {
              "name": "deployer_",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "curve_",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "launchFactory_",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "supply_",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "allowance",
          "inputs": [
            {
              "name": "owner",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "spender",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "approve",
          "inputs": [
            {
              "name": "spender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "value",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "balanceOf",
          "inputs": [
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "burn",
          "inputs": [
            {
              "name": "value",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "burnFrom",
          "inputs": [
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "value",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "curve",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "decimals",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint8",
              "internalType": "uint8"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "deployer",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "description",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "string",
              "internalType": "string"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "getTokenInfo",
          "inputs": [],
          "outputs": [
            {
              "name": "tokenDeployer",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "tokenLogo",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "tokenDescription",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "tokenSocials",
              "type": "tuple",
              "internalType": "struct ShilloV2LauncherToken.Socials",
              "components": [
                {
                  "name": "twitter",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "telegram",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "discord",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "website",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "farcaster",
                  "type": "string",
                  "internalType": "string"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchFactory",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "logo",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "string",
              "internalType": "string"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "name",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "string",
              "internalType": "string"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "socials",
          "inputs": [],
          "outputs": [
            {
              "name": "twitter",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "telegram",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "discord",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "website",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "farcaster",
              "type": "string",
              "internalType": "string"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "symbol",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "string",
              "internalType": "string"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "totalSupply",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "transfer",
          "inputs": [
            {
              "name": "to",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "value",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "transferFrom",
          "inputs": [
            {
              "name": "from",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "to",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "value",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "event",
          "name": "Approval",
          "inputs": [
            {
              "name": "owner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "spender",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "value",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "Transfer",
          "inputs": [
            {
              "name": "from",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "to",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "value",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "ERC20InsufficientAllowance",
          "inputs": [
            {
              "name": "spender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "allowance",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "needed",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "ERC20InsufficientBalance",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "balance",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "needed",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "type": "error",
          "name": "ERC20InvalidApprover",
          "inputs": [
            {
              "name": "approver",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "ERC20InvalidReceiver",
          "inputs": [
            {
              "name": "receiver",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "ERC20InvalidSender",
          "inputs": [
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "ERC20InvalidSpender",
          "inputs": [
            {
              "name": "spender",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "ZeroAddress",
          "inputs": []
        }
      ],
      "bytecode": "0x60e060405234610ecb57611c0a8038038061001981610ecf565b928339810161012082820312610ecb5781516001600160401b038111610ecb5781610045918401610ef4565b60208301516001600160401b038111610ecb5782610064918501610ef4565b60408401519092906001600160401b038111610ecb5781610086918601610ef4565b60608501516001600160401b038111610ecb57826100a5918701610ef4565b60808601519091906001600160401b038111610ecb5786019160a083850312610ecb576040519060a082016001600160401b038111838210176107255760405283516001600160401b038111610ecb5785610101918601610ef4565b825260208401516001600160401b038111610ecb5785610122918601610ef4565b6020830190815260408501519093906001600160401b038111610ecb578661014b918701610ef4565b6040840190815260608601519095906001600160401b038111610ecb5787610174918301610ef4565b6060850190815260808201519097906001600160401b038111610ecb5761019b9201610ef4565b9860808401998a526101af60a08201610f45565b6101bb60c08301610f45565b996101006101cb60e08501610f45565b9301518a51909a6001600160401b0382116107255760035490600182811c92168015610ec1575b60208310146107075781601f849311610e4b575b50602090601f8311600114610de5575f92610dda575b50508160011b915f199060031b1c1916176003555b8051906001600160401b0382116107255760045490600182811c92168015610dd0575b60208310146107075781601f849311610d5a575b50602090601f8311600114610cf4575f92610ce9575b50508160011b915f199060031b1c1916176004555b6001600160a01b038116158015610cd8575b8015610cc7575b610cb85760805260a05260c08890528051906001600160401b0382116107255760055490600182811c92168015610cae575b60208310146107075781601f849311610c54575b50602090601f8311600114610bee575f92610be3575b50508160011b915f199060031b1c1916176005555b8051906001600160401b0382116107255760065490600182811c92168015610bd9575b60208310146107075781601f849311610b63575b50602090601f8311600114610afd575f92610af2575b50508160011b915f199060031b1c1916176006555b518051906001600160401b0382116107255760075490600182811c92168015610ae8575b60208310146107075781601f849311610a72575b50602090601f8311600114610a0c575f92610a01575b50508160011b915f199060031b1c1916176007555b518051906001600160401b0382116107255760085490600182811c921680156109f7575b60208310146107075781601f849311610981575b50602090601f831160011461091b575f92610910575b50508160011b915f199060031b1c1916176008555b518051906001600160401b0382116107255760095490600182811c92168015610906575b60208310146107075781601f849311610890575b50602090601f831160011461082a575f9261081f575b50508160011b915f199060031b1c1916176009555b5180519093906001600160401b03811161072557600a54600181811c91168015610815575b602082101461070757601f81116107a7575b50602094601f8211600114610744579481929394955f92610739575b50508160011b915f199060031b1c191617600a555b5180519092906001600160401b03811161072557600b54600181811c9116801561071b575b602082101461070757601f8111610699575b506020601f821160011461063657819293945f9261062b575b50508160011b915f199060031b1c191617600b555b6001600160a01b031690811561061857600254908082018092116106045760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f9360025584845283825260408420818154019055604051908152a3604051610cb09081610f5a823960805181818161017b0152610211015260a0518161054d015260c051816104460152f35b634e487b7160e01b5f52601160045260245ffd5b63ec442f0560e01b5f525f60045260245ffd5b015190505f80610560565b601f19821690600b5f52805f20915f5b81811061068157509583600195969710610669575b505050811b01600b55610575565b01515f1960f88460031b161c191690555f808061065b565b9192602060018192868b015181550194019201610646565b8181111561054757600b5f52601f820160051c7f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9602084106106ff575b81601f9101920160051c03905f5b8281106106f2575050610547565b5f828201556001016106e4565b5f91506106d6565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610535565b634e487b7160e01b5f52604160045260245ffd5b015190505f806104fb565b601f19821695600a5f52805f20915f5b88811061078f57508360019596979810610777575b505050811b01600a55610510565b01515f1960f88460031b161c191690555f8080610769565b91926020600181928685015181550194019201610754565b818111156104df57600a5f52601f820160051c7fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a86020841061080d575b81601f9101920160051c03905f5b8281106108005750506104df565b5f828201556001016107f2565b5f91506107e4565b90607f16906104cd565b015190505f80610493565b60095f9081528281209350601f198516905b8181106108785750908460019594939210610860575b505050811b016009556104a8565b01515f1960f88460031b161c191690555f8080610852565b9293602060018192878601518155019501930161083c565b8281111561047d5760095f52909150601f830160051c7f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af602085106108fe575b849392601f0160051c82900391015f5b8281106108ee57505061047d565b5f818301558594506001016108e0565b5f91506108d0565b91607f1691610469565b015190505f80610430565b60085f9081528281209350601f198516905b8181106109695750908460019594939210610951575b505050811b01600855610445565b01515f1960f88460031b161c191690555f8080610943565b9293602060018192878601518155019501930161092d565b8281111561041a5760085f52909150601f830160051c7ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3602085106109ef575b849392601f0160051c82900391015f5b8281106109df57505061041a565b5f818301558594506001016109d1565b5f91506109c1565b91607f1691610406565b015190505f806103cd565b60075f9081528281209350601f198516905b818110610a5a5750908460019594939210610a42575b505050811b016007556103e2565b01515f1960f88460031b161c191690555f8080610a34565b92936020600181928786015181550195019301610a1e565b828111156103b75760075f52909150601f830160051c7fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68860208510610ae0575b849392601f0160051c82900391015f5b828110610ad05750506103b7565b5f81830155859450600101610ac2565b5f9150610ab2565b91607f16916103a3565b015190505f8061036a565b60065f9081528281209350601f198516905b818110610b4b5750908460019594939210610b33575b505050811b0160065561037f565b01515f1960f88460031b161c191690555f8080610b25565b92936020600181928786015181550195019301610b0f565b828111156103545760065f52909150601f830160051c7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f60208510610bd1575b849392601f0160051c82900391015f5b828110610bc1575050610354565b5f81830155859450600101610bb3565b5f9150610ba3565b91607f1691610340565b015190505f80610308565b60055f9081528281209350601f198516905b818110610c3c5750908460019594939210610c24575b505050811b0160055561031d565b01515f1960f88460031b161c191690555f8080610c16565b92936020600181928786015181550195019301610c00565b828111156102f25790915060055f5260205f20601f840160051c9060208510610ca6575b849392601f0160051c82900391015f5b828110610c965750506102f2565b5f81830155859450600101610c88565b5f9150610c78565b91607f16916102de565b63d92e233d60e01b5f5260045ffd5b506001600160a01b038216156102ac565b506001600160a01b038a16156102a5565b015190505f8061027e565b60045f9081528281209350601f198516905b818110610d425750908460019594939210610d2a575b505050811b01600455610293565b01515f1960f88460031b161c191690555f8080610d1c565b92936020600181928786015181550195019301610d06565b828111156102685760045f52909150601f830160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b60208510610dc8575b849392601f0160051c82900391015f5b828110610db8575050610268565b5f81830155859450600101610daa565b5f9150610d9a565b91607f1691610254565b015190505f8061021c565b60035f9081528281209350601f198516905b818110610e335750908460019594939210610e1b575b505050811b01600355610231565b01515f1960f88460031b161c191690555f8080610e0d565b92936020600181928786015181550195019301610df7565b828111156102065760035f52909150601f830160051c7fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60208510610eb9575b849392601f0160051c82900391015f5b828110610ea9575050610206565b5f81830155859450600101610e9b565b5f9150610e8b565b91607f16916101f2565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761072557604052565b81601f82011215610ecb578051906001600160401b03821161072557610f23601f8301601f1916602001610ecf565b9282845260208383010111610ecb57815f9260208093018386015e8301015290565b51906001600160a01b0382168203610ecb5756fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146106b1578063095ea7b31461060957806318160ddd146105ec57806323b872dd146105b4578063313ce5671461059957806342966c681461057c578063536dac9b1461053857806353cd512a146104ac57806370a08231146104755780637165485d146104315780637284e4161461041657806379cc6790146103e457806395d89b41146102f0578063a9059cbb146102bf578063abb1dc44146101aa578063d5f3948814610166578063dd62ed3e146101165763fb7f21eb146100df575f80fd5b34610112575f3660031901126101125761010e6100fa6108dc565b60405191829160208352602083019061076c565b0390f35b5f80fd5b346101125760403660031901126101125761012f610790565b6101376107a6565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610112575f36600319011261011257606060806040516101ca816107bc565b828152826020820152826040820152828082015201526102446101eb6108dc565b61010e6101f661080e565b610252610201610a3e565b9160405195869560018060a01b037f000000000000000000000000000000000000000000000000000000000000000016875260806020880152608087019061076c565b90858203604087015261076c565b838103606085015260806102ae61029c61028a610278865160a0875260a087019061076c565b6020870151868203602088015261076c565b6040860151858203604087015261076c565b6060850151848203606086015261076c565b92015190608081840391015261076c565b34610112576040366003190112610112576102e56102db610790565b6024359033610b39565b602060405160018152f35b34610112575f366003190112610112576040515f6004548060011c906001811680156103da575b6020831081146103c6578285529081156103a25750600114610344575b61010e836100fa818503826107ec565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610388575090915081016020016100fa610334565b919260018160209254838588010152019101909291610370565b60ff191660208086019190915291151560051b840190910191506100fa9050610334565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610317565b3461011257604036600319011261011257610414610400610790565b6024359061040f823383610a96565b610bf6565b005b34610112575f3660031901126101125761010e6100fa61080e565b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610112576020366003190112610112576001600160a01b03610496610790565b165f525f602052602060405f2054604051908152f35b34610112575f366003190112610112576105006104c7610a3e565b61010e81519161052a60208201519161051c604082015161050e6080606085015194015195604051998a9960a08b5260a08b019061076c565b9089820360208b015261076c565b90878203604089015261076c565b90858203606087015261076c565b90838203608085015261076c565b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101125760203660031901126101125761041460043533610bf6565b34610112575f36600319011261011257602060405160128152f35b34610112576060366003190112610112576102e56105d0610790565b6105d86107a6565b604435916105e7833383610a96565b610b39565b34610112575f366003190112610112576020600254604051908152f35b3461011257604036600319011261011257610622610790565b60243590331561069e576001600160a01b031690811561068b57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b34610112575f366003190112610112576040515f6003548060011c90600181168015610762575b6020831081146103c6578285529081156103a257506001146107045761010e836100fa818503826107ec565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610748575090915081016020016100fa610334565b919260018160209254838588010152019101909291610730565b91607f16916106d8565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361011257565b602435906001600160a01b038216820361011257565b60a0810190811067ffffffffffffffff8211176107d857604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107d857604052565b604051905f6006548060011c91600182169182156108d2575b6020841083146103c65783865285929081156108b35750600114610854575b610852925003836107ec565b565b5060065f90815290917ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b81831061089757505090602061085292820101610846565b602091935080600191548385890101520191019091849261087f565b6020925061085294915060ff191682840152151560051b820101610846565b92607f1692610827565b604051905f6005548060011c916001821691821561097e575b6020841083146103c65783865285929081156108b3575060011461091f57610852925003836107ec565b5060055f90815290917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b81831061096257505090602061085292820101610846565b602091935080600191548385890101520191019091849261094a565b92607f16926108f5565b90604051915f8154908160011c9260018316928315610a34575b6020851084146103c6578487528693908115610a1257506001146109ce575b50610852925003836107ec565b90505f9291925260205f20905f915b8183106109f6575050906020610852928201015f6109c1565b60209193508060019154838589010152019101909184926109dd565b90506020925061085294915060ff191682840152151560051b8201015f6109c1565b93607f16936109a2565b60405190610a4b826107bc565b81610a566007610988565b8152610a626008610988565b6020820152610a716009610988565b6040820152610a80600a610988565b60608201526080610a91600b610988565b910152565b6001600160a01b039081165f818152600160209081526040808320948616835293905291909120549291905f198410610ad0575b50505050565b828410610b1657801561069e576001600160a01b0382161561068b575f52600160205260405f209060018060a01b03165f5260205260405f20910390555f808080610aca565b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b0316908115610be3576001600160a01b0316918215610bd057815f525f60205260405f2054818110610bb757817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b9091906001600160a01b03168015610be357805f525f60205260405f2054838110610c60576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587528684520360408620558060025403600255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffdfea26469706673582212205b69a4c6d3de5081d5dc10419b6e7f3fff48efa253a6ed487df140ecf31dacfa64736f6c63430008230033",
      "runtime": "0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146106b1578063095ea7b31461060957806318160ddd146105ec57806323b872dd146105b4578063313ce5671461059957806342966c681461057c578063536dac9b1461053857806353cd512a146104ac57806370a08231146104755780637165485d146104315780637284e4161461041657806379cc6790146103e457806395d89b41146102f0578063a9059cbb146102bf578063abb1dc44146101aa578063d5f3948814610166578063dd62ed3e146101165763fb7f21eb146100df575f80fd5b34610112575f3660031901126101125761010e6100fa6108dc565b60405191829160208352602083019061076c565b0390f35b5f80fd5b346101125760403660031901126101125761012f610790565b6101376107a6565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610112575f36600319011261011257606060806040516101ca816107bc565b828152826020820152826040820152828082015201526102446101eb6108dc565b61010e6101f661080e565b610252610201610a3e565b9160405195869560018060a01b037f000000000000000000000000000000000000000000000000000000000000000016875260806020880152608087019061076c565b90858203604087015261076c565b838103606085015260806102ae61029c61028a610278865160a0875260a087019061076c565b6020870151868203602088015261076c565b6040860151858203604087015261076c565b6060850151848203606086015261076c565b92015190608081840391015261076c565b34610112576040366003190112610112576102e56102db610790565b6024359033610b39565b602060405160018152f35b34610112575f366003190112610112576040515f6004548060011c906001811680156103da575b6020831081146103c6578285529081156103a25750600114610344575b61010e836100fa818503826107ec565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610388575090915081016020016100fa610334565b919260018160209254838588010152019101909291610370565b60ff191660208086019190915291151560051b840190910191506100fa9050610334565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610317565b3461011257604036600319011261011257610414610400610790565b6024359061040f823383610a96565b610bf6565b005b34610112575f3660031901126101125761010e6100fa61080e565b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610112576020366003190112610112576001600160a01b03610496610790565b165f525f602052602060405f2054604051908152f35b34610112575f366003190112610112576105006104c7610a3e565b61010e81519161052a60208201519161051c604082015161050e6080606085015194015195604051998a9960a08b5260a08b019061076c565b9089820360208b015261076c565b90878203604089015261076c565b90858203606087015261076c565b90838203608085015261076c565b34610112575f366003190112610112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101125760203660031901126101125761041460043533610bf6565b34610112575f36600319011261011257602060405160128152f35b34610112576060366003190112610112576102e56105d0610790565b6105d86107a6565b604435916105e7833383610a96565b610b39565b34610112575f366003190112610112576020600254604051908152f35b3461011257604036600319011261011257610622610790565b60243590331561069e576001600160a01b031690811561068b57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b34610112575f366003190112610112576040515f6003548060011c90600181168015610762575b6020831081146103c6578285529081156103a257506001146107045761010e836100fa818503826107ec565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610748575090915081016020016100fa610334565b919260018160209254838588010152019101909291610730565b91607f16916106d8565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361011257565b602435906001600160a01b038216820361011257565b60a0810190811067ffffffffffffffff8211176107d857604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107d857604052565b604051905f6006548060011c91600182169182156108d2575b6020841083146103c65783865285929081156108b35750600114610854575b610852925003836107ec565b565b5060065f90815290917ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b81831061089757505090602061085292820101610846565b602091935080600191548385890101520191019091849261087f565b6020925061085294915060ff191682840152151560051b820101610846565b92607f1692610827565b604051905f6005548060011c916001821691821561097e575b6020841083146103c65783865285929081156108b3575060011461091f57610852925003836107ec565b5060055f90815290917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b81831061096257505090602061085292820101610846565b602091935080600191548385890101520191019091849261094a565b92607f16926108f5565b90604051915f8154908160011c9260018316928315610a34575b6020851084146103c6578487528693908115610a1257506001146109ce575b50610852925003836107ec565b90505f9291925260205f20905f915b8183106109f6575050906020610852928201015f6109c1565b60209193508060019154838589010152019101909184926109dd565b90506020925061085294915060ff191682840152151560051b8201015f6109c1565b93607f16936109a2565b60405190610a4b826107bc565b81610a566007610988565b8152610a626008610988565b6020820152610a716009610988565b6040820152610a80600a610988565b60608201526080610a91600b610988565b910152565b6001600160a01b039081165f818152600160209081526040808320948616835293905291909120549291905f198410610ad0575b50505050565b828410610b1657801561069e576001600160a01b0382161561068b575f52600160205260405f209060018060a01b03165f5260205260405f20910390555f808080610aca565b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b0316908115610be3576001600160a01b0316918215610bd057815f525f60205260405f2054818110610bb757817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b9091906001600160a01b03168015610be357805f525f60205260405f2054838110610c60576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587528684520360408620558060025403600255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffdfea26469706673582212205b69a4c6d3de5081d5dc10419b6e7f3fff48efa253a6ed487df140ecf31dacfa64736f6c63430008230033",
      "immutableReferences": {
        "8800": [
          {
            "start": 379,
            "length": 32
          },
          {
            "start": 529,
            "length": 32
          }
        ],
        "8802": [
          {
            "start": 1357,
            "length": 32
          }
        ],
        "8804": [
          {
            "start": 1094,
            "length": 32
          }
        ]
      },
      "creationHash": "0xf0e1fde3f988809cb3311190bc86d652244cb18f0f7d17127798de64938f8f03",
      "runtimeBytes": 3248,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/ShilloV2LauncherToken.sol": "ShilloV2LauncherToken"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloV2LauncherToken.sol": {
          "keccak256": "0x34398ca7ef811f6a3ea27f22e23a9d4bf7f6a2b73accf00a1efb6d3a85c10d9e",
          "urls": [
            "bzz-raw://add53dba4381fd2dfcbe33b5c6b4cafb4b05c8a25e0444ed324fe305d6868367",
            "dweb:/ipfs/QmbkTS88J96KqVYZfPPYWfR5J1e9Ht5RPVdR7dm7MwHsRQ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol": {
          "keccak256": "0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998",
          "urls": [
            "bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c",
            "dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol": {
          "keccak256": "0x669464167428061ee0f8618b73b3ee90aff8405683e7ddde8cd77dadaa1afe29",
          "urls": [
            "bzz-raw://0dda78587a7358b4fdf6b9fca0fde5a5e34930f36d5268a16028627fc0170195",
            "dweb:/ipfs/QmQ1b6cCceDRWNxti9HifsTCzmVP25Haxs1bWugm52vTqH"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
          "keccak256": "0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2",
          "urls": [
            "bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303",
            "dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol": {
          "keccak256": "0x2659248df25e34000ed214b3dc8da2160bc39874c992b477d9e2b1b3283dc073",
          "urls": [
            "bzz-raw://c345af1b0e7ea28d1216d6a04ab28f5534a5229b9edf9ca3cd0e84950ae58d26",
            "dweb:/ipfs/QmY63jtSrYpLRe8Gj1ep2vMDCKxGNNG3hnNVKBVnrs2nmA"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
          "keccak256": "0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f",
          "urls": [
            "bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e",
            "dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol": {
          "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
          "urls": [
            "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
            "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
          ],
          "license": "MIT"
        }
      }
    },
    "ShilloV2GraduationGuard": {
      "abi": [
        {
          "type": "function",
          "name": "assertSeedable",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "pairToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "tickSpacing",
              "type": "int24",
              "internalType": "int24"
            },
            {
              "name": "quoteAmount",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "tokenAmount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "pure"
        },
        {
          "type": "function",
          "name": "assertSeedableEitherOrdering",
          "inputs": [
            {
              "name": "tickSpacing",
              "type": "int24",
              "internalType": "int24"
            },
            {
              "name": "quoteAmount",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "tokenAmount",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [],
          "stateMutability": "pure"
        },
        {
          "type": "error",
          "name": "GraduationSeedNotViable",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SqrtPriceOutOfBounds",
          "inputs": []
        },
        {
          "type": "error",
          "name": "UnsupportedPrice",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ZeroAmount",
          "inputs": []
        }
      ],
      "bytecode": "0x60808060405234601557610b50908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80636de06dc9146100e05763bcebea9f1461002f575f80fd5b346100dc5760a03660031901126100dc576004356001600160a01b038116908190036100dc576024356001600160a01b03811691908290036100dc57604435908160020b82036100dc5760643560843591801580156100cc575b80156100bc575b6100ad576100a59410156100a757909161013d565b005b9161013d565b632c37d0eb60e01b5f5260045ffd5b5060016001607f1b038311610090565b5060016001607f1b038211610089565b5f80fd5b346100dc5760603660031901126100dc576004358060020b81036100dc5760243560443560016001607f1b038211801561012d575b6100ad578261012882846100a59661013d565b61013d565b5060016001607f1b038111610115565b91909161014a82846102c4565b6001600160a01b0381166401000276a381118015906102a6575b610297578260020b948515610283576001600160801b039286620d89e719059561018e868861035f565b906101b16101ab6101a58b620d89e805998a61035f565b9361038a565b9261038a565b9283836001600160a01b0380831690821611610278575b50506001600160a01b03831686116102255750506101e69350610aaa565b169081159283156101fd575b50505090506100ad57565b6001600160801b0393505f60019395620d89e7190712900390030181041610805f80806101f2565b919490939192906001600160a01b038216111561026c57829161024c916102529594610aaa565b93610a70565b808316828416101561026557505b6101e6565b90506101e6565b91505061026092610a70565b945092505f806101c8565b634e487b7160e01b5f52601260045260245ffd5b63582157bb60e01b5f5260045ffd5b5073fffd8963efd1fc6a506488495d951d5263988d26811015610164565b9081158015610357575b610348576102dc81836106b7565b61032d576102ea8183610a5b565b1561031e57610301916102fc9161075d565b610936565b6001600160801b03811161031e5760201b6001600160a01b031690565b63375cdf9f60e21b5f5260045ffd5b6001600160a01b0391610344916102fc91906106d3565b1690565b631f2a200560e01b5f5260045ffd5b5080156102ce565b9060020b9060020b02908160020b91820361037657565b634e487b7160e01b5f52601160045260245ffd5b60020b908160ff1d82810118620d89e881116106a45763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116610688575b6004811661066c575b60088116610650575b60108116610634575b60208116610618575b604081166105fc575b608081166105e0575b61010081166105c4575b61020081166105a8575b610400811661058c575b6108008116610570575b6110008116610554575b6120008116610538575b614000811661051c575b6180008116610500575b6201000081166104e4575b6202000081166104c9575b6204000081166104ae575b6208000016610495575b5f1261048d575b0160201c90565b5f1904610486565b6b048a170391f7dc42444e8fa290910260801c9061047f565b6d2216e584f5fa1ea926041bedfe9890920260801c91610475565b916e5d6af8dedb81196699c329225ee6040260801c9161046a565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161045f565b916f31be135f97d08fd981231505542fcfa60260801c91610454565b916f70d869a156d2a1b890bb3df62baf32f70260801c9161044a565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91610440565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91610436565b916fe7159475a2c29b7443b29c7fa6e889d90260801c9161042c565b916ff3392b0822b70005940c7a398e4b70f30260801c91610422565b916ff987a7253ac413176f2b074cf7815e540260801c91610418565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161040e565b916ffe5dee046a99a2a811c461f1969c30530260801c91610404565b916fff2ea16466c96a3843ec78b326b528610260801c916103fb565b916fff973b41fa98c081472e6896dfb254c00260801c916103f2565b916fffcb9843d60f6159c9db58835c9266440260801c916103e9565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916103e0565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916103d7565b916ffff97272373d413259a46990580e213a0260801c916103ce565b826345c3193d60e11b5f5260045260245ffd5b6001600160c01b0381116106cc5760401b1190565b5050600190565b9060c082901b905f19600160c01b8409928280851094039380850394858411156100dc5714610756578190600160c01b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b90608082901b905f19600160801b8409928280851094039380850394858411156100dc5714610756578190600160801b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b90606082901b905f19600160601b8409928280851094039380850394858411156100dc5714610756578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b81810291905f1982820991838084109303928084039384600160601b11156100dc57146108a357600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f19818509938380861095039480860395868511156100dc5714610924579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b8115610283570490565b6001811115610a5857806001600160801b821015610a47575b600482600160401b6109f9941015610a3a575b640100000000811015610a2d575b62010000811015610a20575b610100811015610a14575b6010811015610a08575b1015610a00575b60030260011c6109a8818461092c565b0160011c6109b6818461092c565b0160011c6109c4818461092c565b0160011c6109d2818461092c565b0160011c6109e0818461092c565b0160011c6109ee818461092c565b0160011c809261092c565b8111900390565b60011b610998565b811c9160021b91610991565b60081c91811b91610987565b60101c9160081b9161097c565b60201c9160101b91610970565b60401c9160201b91610962565b5050608081901c600160401b61094f565b90565b6001600160801b0381116106cc5760801b1190565b610a5892610a9f9290916001600160a01b0380831690821611610aa4575b90036001600160a01b0316906107e0565b610af7565b90610a8e565b610a5892610a9f929091906001600160a01b0380821690831611610af1575b610adf6001600160a01b03828116908416610863565b9190036001600160a01b0316916108ac565b90610ac9565b906001600160801b038216809203610b0b57565b6393dafdf160e01b5f5260045ffdfea264697066735822122081e2231b13e1746a95e27b586bbd17bffe4b8ca7542ef9809af596a98c84f4ee64736f6c63430008230033",
      "runtime": "0x60806040526004361015610011575f80fd5b5f3560e01c80636de06dc9146100e05763bcebea9f1461002f575f80fd5b346100dc5760a03660031901126100dc576004356001600160a01b038116908190036100dc576024356001600160a01b03811691908290036100dc57604435908160020b82036100dc5760643560843591801580156100cc575b80156100bc575b6100ad576100a59410156100a757909161013d565b005b9161013d565b632c37d0eb60e01b5f5260045ffd5b5060016001607f1b038311610090565b5060016001607f1b038211610089565b5f80fd5b346100dc5760603660031901126100dc576004358060020b81036100dc5760243560443560016001607f1b038211801561012d575b6100ad578261012882846100a59661013d565b61013d565b5060016001607f1b038111610115565b91909161014a82846102c4565b6001600160a01b0381166401000276a381118015906102a6575b610297578260020b948515610283576001600160801b039286620d89e719059561018e868861035f565b906101b16101ab6101a58b620d89e805998a61035f565b9361038a565b9261038a565b9283836001600160a01b0380831690821611610278575b50506001600160a01b03831686116102255750506101e69350610aaa565b169081159283156101fd575b50505090506100ad57565b6001600160801b0393505f60019395620d89e7190712900390030181041610805f80806101f2565b919490939192906001600160a01b038216111561026c57829161024c916102529594610aaa565b93610a70565b808316828416101561026557505b6101e6565b90506101e6565b91505061026092610a70565b945092505f806101c8565b634e487b7160e01b5f52601260045260245ffd5b63582157bb60e01b5f5260045ffd5b5073fffd8963efd1fc6a506488495d951d5263988d26811015610164565b9081158015610357575b610348576102dc81836106b7565b61032d576102ea8183610a5b565b1561031e57610301916102fc9161075d565b610936565b6001600160801b03811161031e5760201b6001600160a01b031690565b63375cdf9f60e21b5f5260045ffd5b6001600160a01b0391610344916102fc91906106d3565b1690565b631f2a200560e01b5f5260045ffd5b5080156102ce565b9060020b9060020b02908160020b91820361037657565b634e487b7160e01b5f52601160045260245ffd5b60020b908160ff1d82810118620d89e881116106a45763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116610688575b6004811661066c575b60088116610650575b60108116610634575b60208116610618575b604081166105fc575b608081166105e0575b61010081166105c4575b61020081166105a8575b610400811661058c575b6108008116610570575b6110008116610554575b6120008116610538575b614000811661051c575b6180008116610500575b6201000081166104e4575b6202000081166104c9575b6204000081166104ae575b6208000016610495575b5f1261048d575b0160201c90565b5f1904610486565b6b048a170391f7dc42444e8fa290910260801c9061047f565b6d2216e584f5fa1ea926041bedfe9890920260801c91610475565b916e5d6af8dedb81196699c329225ee6040260801c9161046a565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161045f565b916f31be135f97d08fd981231505542fcfa60260801c91610454565b916f70d869a156d2a1b890bb3df62baf32f70260801c9161044a565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91610440565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91610436565b916fe7159475a2c29b7443b29c7fa6e889d90260801c9161042c565b916ff3392b0822b70005940c7a398e4b70f30260801c91610422565b916ff987a7253ac413176f2b074cf7815e540260801c91610418565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161040e565b916ffe5dee046a99a2a811c461f1969c30530260801c91610404565b916fff2ea16466c96a3843ec78b326b528610260801c916103fb565b916fff973b41fa98c081472e6896dfb254c00260801c916103f2565b916fffcb9843d60f6159c9db58835c9266440260801c916103e9565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916103e0565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916103d7565b916ffff97272373d413259a46990580e213a0260801c916103ce565b826345c3193d60e11b5f5260045260245ffd5b6001600160c01b0381116106cc5760401b1190565b5050600190565b9060c082901b905f19600160c01b8409928280851094039380850394858411156100dc5714610756578190600160c01b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b90608082901b905f19600160801b8409928280851094039380850394858411156100dc5714610756578190600160801b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b90606082901b905f19600160601b8409928280851094039380850394858411156100dc5714610756578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b81810291905f1982820991838084109303928084039384600160601b11156100dc57146108a357600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f19818509938380861095039480860395868511156100dc5714610924579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b8115610283570490565b6001811115610a5857806001600160801b821015610a47575b600482600160401b6109f9941015610a3a575b640100000000811015610a2d575b62010000811015610a20575b610100811015610a14575b6010811015610a08575b1015610a00575b60030260011c6109a8818461092c565b0160011c6109b6818461092c565b0160011c6109c4818461092c565b0160011c6109d2818461092c565b0160011c6109e0818461092c565b0160011c6109ee818461092c565b0160011c809261092c565b8111900390565b60011b610998565b811c9160021b91610991565b60081c91811b91610987565b60101c9160081b9161097c565b60201c9160101b91610970565b60401c9160201b91610962565b5050608081901c600160401b61094f565b90565b6001600160801b0381116106cc5760801b1190565b610a5892610a9f9290916001600160a01b0380831690821611610aa4575b90036001600160a01b0316906107e0565b610af7565b90610a8e565b610a5892610a9f929091906001600160a01b0380821690831611610af1575b610adf6001600160a01b03828116908416610863565b9190036001600160a01b0316916108ac565b90610ac9565b906001600160801b038216809203610b0b57565b6393dafdf160e01b5f5260045ffdfea264697066735822122081e2231b13e1746a95e27b586bbd17bffe4b8ca7542ef9809af596a98c84f4ee64736f6c63430008230033",
      "immutableReferences": {},
      "creationHash": "0x2e4199ab0473ad37e8f66cb81c8c37ce7f70b94d92668836cb4a3d3356d076c9",
      "runtimeBytes": 2896,
      "compiler": "0.8.35+commit.47b9dedd",
      "settings": {
        "remappings": [
          "@ensdomains/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/@ensdomains/",
          "@openzeppelin/contracts/=vendor/contracts/lib/openzeppelin-contracts/contracts/",
          "@uniswap/v4-core/=vendor/contracts/lib/v4-core/",
          "@uniswap/v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/",
          "@uniswap/v4-periphery/=vendor/contracts/lib/v4-periphery/",
          "ds-test/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/forge-std/lib/ds-test/src/",
          "erc4626-tests/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
          "forge-gas-snapshot/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
          "forge-std/=../lib/v4-core/lib/forge-std/src/",
          "hardhat/=/Users/rega/Projects/shillo/contracts/lib/v4-core/node_modules/hardhat/",
          "openzeppelin-contracts/=/Users/rega/Projects/shillo/contracts/lib/v4-core/lib/openzeppelin-contracts/",
          "permit2/=vendor/contracts/lib/v4-periphery/lib/permit2/",
          "solmate/=vendor/contracts/lib/v4-core/lib/solmate/",
          "v4-core/=/Users/rega/Projects/shillo/contracts/lib/v4-core/src/",
          "v4-hooks-public/=vendor/contracts/lib/v4-hooks-public/src/",
          "v4-periphery/=/Users/rega/Projects/shillo/contracts/lib/v4-periphery/src/"
        ],
        "optimizer": {
          "enabled": true,
          "runs": 200
        },
        "metadata": {
          "bytecodeHash": "ipfs"
        },
        "compilationTarget": {
          "src/ShilloV2GraduationGuard.sol": "ShilloV2GraduationGuard"
        },
        "evmVersion": "cancun",
        "libraries": {},
        "viaIR": true
      },
      "sources": {
        "src/ShilloV2GraduationGuard.sol": {
          "keccak256": "0xeaec2513923f8f3f14a4df2e6f12ee2ced301f805241eca434c23c71eaf0e3c3",
          "urls": [
            "bzz-raw://499fd0cfab8c0ed0eb61aba11aa7ca93f206aa14bba1579152ed4eb9e6f53ce8",
            "dweb:/ipfs/QmekbzRjrhpy4cdybXDC1syCCD95kp4ULKgNxYtowKjX2v"
          ],
          "license": "MIT"
        },
        "src/libraries/ShilloV2GraduationMath.sol": {
          "keccak256": "0x03db7deed43a8249861f9783f5831e54f623715c35bf9289021ea4f05b469b7e",
          "urls": [
            "bzz-raw://8cc2ece4cd493620a9b89057a9f5cb09e40fefc08e90b908abd43d37f2b4fd37",
            "dweb:/ipfs/QmYNnYpzQdmPTHbc5kyxVae6juFBCn7aszJHajUDr4Soij"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/Panic.sol": {
          "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
          "urls": [
            "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
            "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
          "keccak256": "0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857",
          "urls": [
            "bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5",
            "dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": {
          "keccak256": "0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083",
          "urls": [
            "bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9",
            "dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/BitMath.sol": {
          "keccak256": "0x51b9be4f5c4fd3e80cbc9631a65244a2eb2be250b6b7f128a2035080e18aee8d",
          "urls": [
            "bzz-raw://fe98bbd5498e912146b9319827fc63621eb66ff55d5baae0fa02a7a972ab8d1e",
            "dweb:/ipfs/QmY5hCuyrtgsJtk4AavrxcvBkRrChfr4N6ZnhdC8roPpNi"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/CustomRevert.sol": {
          "keccak256": "0x111ed3031b6990c80a93ae35dde6b6ac0b7e6af471388fdd7461e91edda9b7de",
          "urls": [
            "bzz-raw://c9ea883c98d6ae1829160d0977bb5195761cfd5bc81692d0a941f45717f594cd",
            "dweb:/ipfs/QmZPwxzaeMNv536wzrAMrMswu7vMHuqPVpjcqL3YvCMoxt"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/FixedPoint128.sol": {
          "keccak256": "0xad236e10853f4b4b20a35a9bb52b857c4fc79874846b7e444e06ead7f2630542",
          "urls": [
            "bzz-raw://0de1f9a06520b1a689660943faa14fc0b8344ab41fab9e6012ea34bff4b9b3eb",
            "dweb:/ipfs/QmRNMPTyko7W6d6KxuTsnDBa9oZgDK4xiwRRq3H9ASTbwy"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/FixedPoint96.sol": {
          "keccak256": "0xef5c3fd41aee26bb12aa1c32873cfee88e67eddfe7c2b32283786265ac669741",
          "urls": [
            "bzz-raw://4de298d02f662a1c36c7be0a150f18c2a161408a5d3e48432e707efd01fac9a4",
            "dweb:/ipfs/QmSiM4oeMmLVKmAtJXz2feYkv4R9ZcyBpkTRW5Nhw5KDyJ"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/FullMath.sol": {
          "keccak256": "0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2",
          "urls": [
            "bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52",
            "dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/LPFeeLibrary.sol": {
          "keccak256": "0xbf6914e01014e7c1044111feb7df7a3d96bb503b3da827ad8464b1955580d13b",
          "urls": [
            "bzz-raw://33823c20a91882c9aacdcbb02f0558c05209f4d5954aa6dd4fa17c95664db475",
            "dweb:/ipfs/QmR7owkFgpfztpp1QUg3ut3nw9iPVQqLGP4hzgmZtRUQ2J"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/LiquidityMath.sol": {
          "keccak256": "0x000ef2eadcc1eb7b2c18a77655f94e76e0e860f605783484657ef65fd6eda353",
          "urls": [
            "bzz-raw://a766b620a7a22798b43c6c1f23b5c6cff0ebf588deb89842bad05208d448cd99",
            "dweb:/ipfs/QmVKjaFJdzkqA3ey2Byum8iTCMssWVD8MmVC8rw62Tj5WD"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/Pool.sol": {
          "keccak256": "0xb8191707c5913f5e2f589cec5167e3fac4a5b86bd84f61fdba0fbe6a8ce8a3a0",
          "urls": [
            "bzz-raw://a609f9c365f05becf61877d9dc767e7825bce8c34607dbfc0f0437a71f6ff407",
            "dweb:/ipfs/QmThDUzLePs2Hbp6XTpRSHT67rdsjQLhdmS6krm8cpKSey"
          ],
          "license": "BUSL-1.1"
        },
        "vendor/contracts/lib/v4-core/src/libraries/Position.sol": {
          "keccak256": "0xddab2a831f1befb6abf5567e77c4582169ca8156cf69eb4f22d8e87f7226a3f9",
          "urls": [
            "bzz-raw://c79fe61b50f3b70cff503abfa6f5643fcbefb9b794855bee1019b1e6d9c083b2",
            "dweb:/ipfs/QmbKmYNQesaMz8bo1b7TMHQcAwaDd3eDPrE5pAdPPZTtk5"
          ],
          "license": "BUSL-1.1"
        },
        "vendor/contracts/lib/v4-core/src/libraries/ProtocolFeeLibrary.sol": {
          "keccak256": "0xf483001899229ab10f5a626fe1c5866134d9e965b48ce6cf55ce0d7f74f7d8ec",
          "urls": [
            "bzz-raw://6ba9211a7f69bbb44649c35211eb29d193c09032ec600064ef9d04b4625dd8ba",
            "dweb:/ipfs/QmQSjQvtguYgMJSkkKRhHjxasfX9xfTbrbcZ1QmjUVb787"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/SafeCast.sol": {
          "keccak256": "0x42c4a24f996a14d358be397b71f7ec9d7daf666aaec78002c63315a6ee67aa86",
          "urls": [
            "bzz-raw://c3db86e2ba3679105fc32edec656c70282e1fede6cab11217702443f6c26fa59",
            "dweb:/ipfs/QmX4yaaSPdKQzYNRsezjTvZKsubzS8JRTEGFD3fPpTTCcj"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/SqrtPriceMath.sol": {
          "keccak256": "0xf8079fe6e3460db495451d06b1705e18f1c4075c1af96a31ad313545f7082982",
          "urls": [
            "bzz-raw://582fc51546723a0a8acccf782f69b530bacf9b3ef929458e82569b7121f0b138",
            "dweb:/ipfs/QmSBXcmqZdFsM7M4sRaiyQAxykCeMNFKyKgBcwSMTw1bcF"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/SwapMath.sol": {
          "keccak256": "0x6baa782ae523269c079cc763639a9b91a25fcfa1743c049c76e43741ef494bd9",
          "urls": [
            "bzz-raw://035c337e62e05262a5bd5d3bc85bc9a383c1013001216b429f49cf1e129a0812",
            "dweb:/ipfs/QmU7s4h58Fh2A6mM8yeorZ2ygwEJMQw8zdZLLkHeDoSWxD"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/TickBitmap.sol": {
          "keccak256": "0x6779f89e28a0b4af6e09d518caf014b7e8fc627400f5561f86fed11635b1458a",
          "urls": [
            "bzz-raw://a64dee983106de3be3f968be94368c1e37592f5418aa2a39e8dd358d5a962b0d",
            "dweb:/ipfs/QmYuECZTiEeQVxDLYx6pBSSnVrg56Apw75bugQiM3FmGwy"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/TickMath.sol": {
          "keccak256": "0x4e1a11e154eb06106cb1c4598f06cca5f5ca16eaa33494ba2f0e74981123eca8",
          "urls": [
            "bzz-raw://a79a57f7b240783b045168d1c4f774ac1812caf8f9a83cb6959a86b0b07b6c70",
            "dweb:/ipfs/QmTb5kvxwDNW8jDuQaqdJ445cCFejNkUqEB17Bjo8UBiva"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/libraries/UnsafeMath.sol": {
          "keccak256": "0xa6e55e0a43a15df2df471d9972cd48f613d07c663ecb8bbeaf7623f6f99bcce4",
          "urls": [
            "bzz-raw://02ea6e13879fc5a5f35149a2f1cd8af3a1f0877ff69101dad53841d16f515572",
            "dweb:/ipfs/QmcpL4gdG6hL2w1wqs2Vw4J1EFCwBs9T1Qd4p16CtECQkn"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/BalanceDelta.sol": {
          "keccak256": "0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f",
          "urls": [
            "bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9",
            "dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-core/src/types/Slot0.sol": {
          "keccak256": "0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b",
          "urls": [
            "bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8",
            "dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C"
          ],
          "license": "MIT"
        },
        "vendor/contracts/lib/v4-periphery/src/libraries/LiquidityAmounts.sol": {
          "keccak256": "0xc1ed6daa98eee0330327cf8b98ded5172f904a0db107258f9ce571144803773d",
          "urls": [
            "bzz-raw://32285a7dd49dbc48e89157e6d064fbbe292de673baf7b00776f2d86fb8484e00",
            "dweb:/ipfs/QmQLmrc9KrTofxYzgmpqKfXEY351RzQAVKs1t3HTVWQdP5"
          ],
          "license": "MIT"
        }
      }
    }
  },
  "verification": {
    "chainId": 4663,
    "blockNumber": "107919230",
    "blockHash": "0x66ad5b494b65f694e27a3e3d2f62ea7a436d2bde9485ca523367d754d125cee8",
    "observedAt": "2026-11-06T22:07:43.963Z",
    "scope": "Local fork of canonical Robinhood Uniswap contracts; no live transactions",
    "cases": [
      {
        "name": "testApprovedSixDecimalPairGraduatesAndPaysInQuoteAsset()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 5163191
          }
        }
      },
      {
        "name": "testCreatorTransferAndCtoTimelock()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 3638673
          }
        }
      },
      {
        "name": "testCurveBuySellAndClaims()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 3719618
          }
        }
      },
      {
        "name": "testCurveBuybackLocksAndVestsOverFiveYears()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 4018470
          }
        }
      },
      {
        "name": "testDelayedRescueCannotRunEarlyOrTwice()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 4145533
          }
        }
      },
      {
        "name": "testEconomicsDigestIncludesOpeningPolicyAndTreasury()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 78005
          }
        }
      },
      {
        "name": "testFullGraduationAndLockedNftOnCanonicalContracts()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 4491181
          }
        }
      },
      {
        "name": "testFuzzCurveRoundTripDoesNotCreateQuote(uint96)",
        "status": "Success",
        "kind": {
          "Fuzz": {
            "first_case": {
              "gas": 3712880,
              "stipend": 21300
            },
            "runs": 512,
            "mean_gas": 3691499,
            "median_gas": 3691558,
            "failed_corpus_replays": 0
          }
        }
      },
      {
        "name": "testGraduatedSwapFeesAndBuybackVesting()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 5589572
          }
        }
      },
      {
        "name": "testInitializationGuardBlocksFrontRun()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 3576421
          }
        }
      },
      {
        "name": "testMintFailurePreservesReservesAndPermissionlessRetry()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 4866790
          }
        }
      },
      {
        "name": "testOpeningTaxSnapshotsAndCreatorExemption()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 3590294
          }
        }
      },
      {
        "name": "testOwnerCannotEnableCreatorsBuyback()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 3596649
          }
        }
      },
      {
        "name": "testRepeatedSaltAndDisabledPublicLaunchRevert()",
        "status": "Success",
        "kind": {
          "Unit": {
            "gas": 1008395776
          }
        }
      }
    ]
  },
  "independentAudit": false
}
