{
  "_format": "hh-sol-artifact-1",
  "contractName": "StargateNFT",
  "sourceName": "contracts/mocks/Stargate/StargateNFT/StargateNFT.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AddressCannotBeZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ArrayCannotHaveZeroLength",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ArraysLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC721EnumerableForbiddenBatchMint",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC721IncorrectOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721InsufficientApproval",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "approver",
          "type": "address"
        }
      ],
      "name": "ERC721InvalidApprover",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "ERC721InvalidOperator",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC721InvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "ERC721InvalidReceiver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ERC721InvalidSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721NonexistentToken",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "ERC721OutOfBoundsIndex",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "EnforcedPause",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ExpectedPause",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedInnerCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "contractBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "InsufficientContractBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReentrancyGuardReentrantCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "StringCannotBeEmpty",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "UnauthorizedCaller",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ValueCannotBeZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VetTransferFailed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "oldBaseURI",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "newBaseURI",
          "type": "string"
        }
      ],
      "name": "BaseURIUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "BaseVTHORewardsClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "levelId",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldBoostPricePerBlock",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBoostPricePerBlock",
          "type": "uint256"
        }
      ],
      "name": "LevelBoostPricePerBlockUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "levelId",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "oldCap",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "newCap",
          "type": "uint32"
        }
      ],
      "name": "LevelCapUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "levelId",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint208",
          "name": "oldCirculatingSupply",
          "type": "uint208"
        },
        {
          "indexed": false,
          "internalType": "uint208",
          "name": "newCirculatingSupply",
          "type": "uint208"
        }
      ],
      "name": "LevelCirculatingSupplyUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "levelId",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isX",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "maturityBlocks",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "scaledRewardFactor",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "vetAmountRequiredToStake",
          "type": "uint256"
        }
      ],
      "name": "LevelUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "levelId",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "vetAmountStaked",
          "type": "uint256"
        }
      ],
      "name": "TokenBurned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "manager",
          "type": "address"
        }
      ],
      "name": "TokenManagerAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "manager",
          "type": "address"
        }
      ],
      "name": "TokenManagerRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "levelId",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "migrated",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "vetAmountStaked",
          "type": "uint256"
        }
      ],
      "name": "TokenMinted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "oldVthoGenerationEndTimestamp",
          "type": "uint48"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "newVthoGenerationEndTimestamp",
          "type": "uint48"
        }
      ],
      "name": "VthoGenerationEndTimestampSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "WhitelistEntryRemoved",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CLOCK_MODE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LEVEL_OPERATOR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MANAGER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PAUSER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REWARD_MULTIPLIER_SCALING_FACTOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TOKEN_MANAGER_MIGRATOR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WHITELISTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "_burnCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "_safeMintCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "bool",
                  "name": "isX",
                  "type": "bool"
                },
                {
                  "internalType": "uint8",
                  "name": "id",
                  "type": "uint8"
                },
                {
                  "internalType": "uint64",
                  "name": "maturityBlocks",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "scaledRewardFactor",
                  "type": "uint64"
                },
                {
                  "internalType": "uint256",
                  "name": "vetAmountRequiredToStake",
                  "type": "uint256"
                }
              ],
              "internalType": "struct DataTypes.Level",
              "name": "level",
              "type": "tuple"
            },
            {
              "internalType": "uint208",
              "name": "circulatingSupply",
              "type": "uint208"
            },
            {
              "internalType": "uint32",
              "name": "cap",
              "type": "uint32"
            }
          ],
          "internalType": "struct DataTypes.LevelAndSupply",
          "name": "_levelAndSupply",
          "type": "tuple"
        }
      ],
      "name": "addLevel",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_manager",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "addTokenManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "boost",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "boostAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_levelId",
          "type": "uint8"
        }
      ],
      "name": "boostAmountOfLevel",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "boostOnBehalfOf",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_levelId",
          "type": "uint8"
        }
      ],
      "name": "boostPricePerBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clock",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_levelId",
          "type": "uint8"
        },
        {
          "internalType": "uint48",
          "name": "_blockNumber",
          "type": "uint48"
        }
      ],
      "name": "getCirculatingSupplyAtBlock",
      "outputs": [
        {
          "internalType": "uint208",
          "name": "",
          "type": "uint208"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCurrentTokenId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_levelId",
          "type": "uint8"
        }
      ],
      "name": "getLevel",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "bool",
              "name": "isX",
              "type": "bool"
            },
            {
              "internalType": "uint8",
              "name": "id",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "maturityBlocks",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "scaledRewardFactor",
              "type": "uint64"
            },
            {
              "internalType": "uint256",
              "name": "vetAmountRequiredToStake",
              "type": "uint256"
            }
          ],
          "internalType": "struct DataTypes.Level",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLevelIds",
      "outputs": [
        {
          "internalType": "uint8[]",
          "name": "",
          "type": "uint8[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_levelId",
          "type": "uint8"
        }
      ],
      "name": "getLevelSupply",
      "outputs": [
        {
          "internalType": "uint208",
          "name": "circulating",
          "type": "uint208"
        },
        {
          "internalType": "uint32",
          "name": "cap",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLevels",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "bool",
              "name": "isX",
              "type": "bool"
            },
            {
              "internalType": "uint8",
              "name": "id",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "maturityBlocks",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "scaledRewardFactor",
              "type": "uint64"
            },
            {
              "internalType": "uint256",
              "name": "vetAmountRequiredToStake",
              "type": "uint256"
            }
          ],
          "internalType": "struct DataTypes.Level[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLevelsCirculatingSupplies",
      "outputs": [
        {
          "internalType": "uint208[]",
          "name": "",
          "type": "uint208[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint48",
          "name": "_blockNumber",
          "type": "uint48"
        }
      ],
      "name": "getLevelsCirculatingSuppliesAtBlock",
      "outputs": [
        {
          "internalType": "uint208[]",
          "name": "",
          "type": "uint208[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getStargate",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "getToken",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "levelId",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "mintedAtBlock",
              "type": "uint64"
            },
            {
              "internalType": "uint256",
              "name": "vetAmountStaked",
              "type": "uint256"
            },
            {
              "internalType": "uint48",
              "name": "lastVetGeneratedVthoClaimTimestamp_deprecated",
              "type": "uint48"
            }
          ],
          "internalType": "struct DataTypes.Token",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "getTokenLevel",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "getTokenManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVthoTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "idsManagedBy",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "idsOwnedBy",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "tokenCollectionName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "tokenCollectionSymbol",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "baseTokenURI",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "admin",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "upgrader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "pauser",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "levelOperator",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "legacyNodes",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stargateDelegation",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "vthoToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "legacyLastTokenId",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "bool",
                      "name": "isX",
                      "type": "bool"
                    },
                    {
                      "internalType": "uint8",
                      "name": "id",
                      "type": "uint8"
                    },
                    {
                      "internalType": "uint64",
                      "name": "maturityBlocks",
                      "type": "uint64"
                    },
                    {
                      "internalType": "uint64",
                      "name": "scaledRewardFactor",
                      "type": "uint64"
                    },
                    {
                      "internalType": "uint256",
                      "name": "vetAmountRequiredToStake",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct DataTypes.Level",
                  "name": "level",
                  "type": "tuple"
                },
                {
                  "internalType": "uint208",
                  "name": "circulatingSupply",
                  "type": "uint208"
                },
                {
                  "internalType": "uint32",
                  "name": "cap",
                  "type": "uint32"
                }
              ],
              "internalType": "struct DataTypes.LevelAndSupply[]",
              "name": "levelsAndSupplies",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct DataTypes.StargateNFTInitParams",
          "name": "_initParams",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "levelId",
              "type": "uint8"
            }
          ],
          "internalType": "struct DataTypes.WhitelistEntryInit[]",
          "name": "_whitelistEntries",
          "type": "tuple[]"
        }
      ],
      "name": "initializeV2",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stargate",
          "type": "address"
        },
        {
          "internalType": "uint8[]",
          "name": "levelIds",
          "type": "uint8[]"
        },
        {
          "internalType": "uint256[]",
          "name": "boostPricesPerBlock",
          "type": "uint256[]"
        }
      ],
      "name": "initializeV3",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "isManagedByOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_manager",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "isTokenManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "isUnderMaturityPeriod",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "isXToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "legacyNodes",
      "outputs": [
        {
          "internalType": "contract ITokenAuction",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "maturityPeriodEndBlock",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "migrate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_manager",
          "type": "address"
        }
      ],
      "name": "migrateTokenManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_levelId",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "ownerTotalVetStaked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "ownsXToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "removeTokenManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_baseTokenURI",
          "type": "string"
        }
      ],
      "name": "setBaseURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "timestamp",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenExists",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "tokensManagedBy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "levelId",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "mintedAtBlock",
              "type": "uint64"
            },
            {
              "internalType": "uint256",
              "name": "vetAmountStaked",
              "type": "uint256"
            },
            {
              "internalType": "uint48",
              "name": "lastVetGeneratedVthoClaimTimestamp_deprecated",
              "type": "uint48"
            }
          ],
          "internalType": "struct DataTypes.Token[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "tokensOverview",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "manager",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "levelId",
              "type": "uint8"
            }
          ],
          "internalType": "struct DataTypes.TokenOverview[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "tokensOwnedBy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "levelId",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "mintedAtBlock",
              "type": "uint64"
            },
            {
              "internalType": "uint256",
              "name": "vetAmountStaked",
              "type": "uint256"
            },
            {
              "internalType": "uint48",
              "name": "lastVetGeneratedVthoClaimTimestamp_deprecated",
              "type": "uint48"
            }
          ],
          "internalType": "struct DataTypes.Token[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferBalance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "xTokensCount",
      "outputs": [
        {
          "internalType": "uint208",
          "name": "",
          "type": "uint208"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615c3e620001046000396000818161336f0152818161339801526134e00152615c3e6000f3fe6080604052600436106103cf5760003560e01c8062923f9e146103d457806301ffc9a71461040957806305a03f501461042957806306fdde0314610456578063081812fc14610478578063095ea7b3146104a55780630c0f1c84146104c75780630c394a601461050b5780630c72580f1461052d5780630dbdd3bc1461054d57806313e09e961461056d57806318160ddd1461059b5780631b55d19e146105b05780631e813caf146105d057806323b872dd146105e5578063248a9ca31461060557806329f7540b146106255780632b5c1779146106475780632c5811da146106675780632f2ff15d146106875780632f745c59146106a757806332ebc612146106c757806336568abe146106e75780633f4ba83a1461070757806342842e0e1461071c57806342966c681461073c578063454b06081461075c5780634bf5d7e91461077c5780634f1ef286146107915780634f6ccce7146107a457806352d1902d146107c457806354fd4d50146107d957806355f804b3146107ed578063561892361461080d578063570618e11461082257806359c87d141461085657806359d503751461086b5780635c975abb1461088d5780636352211e146108a2578063692b26ff146108c25780636c0360eb146108e25780636d779991146108f757806370a0823114610924578063724b4fcf14610944578063736f9035146109665780637aee01581461097b5780637bf75f6c1461099b5780638419de89146109bb5780638456cb59146109db57806384e66840146109f057806386dc4f6a14610a105780638a60c4c114610a3057806391d1485414610a5057806391ddadf414610a7057806395d89b4114610a9c578063996fa25514610ab1578063a217fddf14610ad1578063a22cb46514610ae6578063a498400914610b06578063a77ad11d14610b26578063a780f53914610b53578063a9fa6f5814610b73578063ad3cb1cc14610b93578063aef0c8ee14610bc4578063afad8f5e14610bfc578063b80777ea14610c29578063b88d4fde14610c3e578063c1ea925814610c5e578063c87b56dd14610c7e578063cd2c6efe14610c9e578063d011645c14610ccb578063d4dfed3614610cfd578063d547741f14610d1d578063d621517e14610d3d578063da1bfb3d14610d5d578063e1fac59414610d7f578063e2540d8a14610d94578063e4b50cb814610db4578063e63ab1e914610de1578063e764c7c414610e03578063e79fdfa814610e23578063e985e9c514610e38578063ea66aeb314610e58578063ec87621c14610e78578063ecf7996614610e9a578063f057248514610eba578063f72c0d8b14610eda575b600080fd5b3480156103e057600080fd5b506103f46103ef3660046143e9565b610efc565b60405190151581526020015b60405180910390f35b34801561041557600080fd5b506103f4610424366004614418565b610f2a565b34801561043557600080fd5b5061044961044436600461445a565b610f3b565b6040516104009190614477565b34801561046257600080fd5b5061046b610fc2565b604051610400919061453a565b34801561048457600080fd5b506104986104933660046143e9565b611063565b604051610400919061454d565b3480156104b157600080fd5b506104c56104c0366004614561565b611078565b005b3480156104d357600080fd5b506104e76104e236600461459c565b611087565b604080516001600160d01b03909316835263ffffffff909116602083015201610400565b34801561051757600080fd5b5061052061111e565b604051610400919061461f565b34801561053957600080fd5b506104c5610548366004614561565b6111aa565b34801561055957600080fd5b506104c56105683660046147e4565b611220565b34801561057957600080fd5b5061058d6105883660046143e9565b611425565b604051908152602001610400565b3480156105a757600080fd5b5061058d6114a8565b3480156105bc57600080fd5b506104c56105cb3660046143e9565b6114bd565b3480156105dc57600080fd5b50610498611551565b3480156105f157600080fd5b506104c56106003660046148b9565b61156d565b34801561061157600080fd5b5061058d6106203660046143e9565b611601565b34801561063157600080fd5b5061063a611621565b60405161040091906148fa565b34801561065357600080fd5b506104c5610662366004614947565b6116a8565b34801561067357600080fd5b5061063a610682366004614a2a565b611763565b34801561069357600080fd5b506104c56106a2366004614a47565b6117f9565b3480156106b357600080fd5b5061058d6106c2366004614561565b611815565b3480156106d357600080fd5b506103f46106e2366004614561565b611877565b3480156106f357600080fd5b506104c5610702366004614a47565b611903565b34801561071357600080fd5b506104c561193b565b34801561072857600080fd5b506104c56107373660046148b9565b61195b565b34801561074857600080fd5b506104c56107573660046143e9565b611976565b34801561076857600080fd5b506104c56107773660046143e9565b611a41565b34801561078857600080fd5b5061046b611ad3565b6104c561079f366004614aef565b611b46565b3480156107b057600080fd5b5061058d6107bf3660046143e9565b611b61565b3480156107d057600080fd5b5061058d611bc2565b3480156107e557600080fd5b50600361058d565b3480156107f957600080fd5b506104c5610808366004614b3e565b611bdf565b34801561081957600080fd5b5061058d611c72565b34801561082e57600080fd5b5061058d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b34801561086257600080fd5b50610498611c85565b34801561087757600080fd5b5061058d600080516020615b2983398151915281565b34801561089957600080fd5b506103f4611ca5565b3480156108ae57600080fd5b506104986108bd3660046143e9565b611cba565b3480156108ce57600080fd5b506104986108dd3660046143e9565b611cc5565b3480156108ee57600080fd5b5061046b611d48565b34801561090357600080fd5b5061091761091236600461459c565b611d52565b6040516104009190614b72565b34801561093057600080fd5b5061058d61093f36600461445a565b611e13565b34801561095057600080fd5b50610959611e6b565b6040516104009190614b85565b34801561097257600080fd5b50610498611ef2565b34801561098757600080fd5b506104c5610996366004614561565b611f0e565b3480156109a757600080fd5b5061058d6109b6366004614bc0565b611f3a565b3480156109c757600080fd5b506103f46109d63660046143e9565b612032565b3480156109e757600080fd5b506104c56120b5565b3480156109fc57600080fd5b506104c5610a0b3660046143e9565b6120d5565b348015610a1c57600080fd5b506104c5610a2b366004614dd0565b612100565b348015610a3c57600080fd5b506104c5610a4b3660046143e9565b6124e9565b348015610a5c57600080fd5b506103f4610a6b366004614a47565b6125b4565b348015610a7c57600080fd5b50610a856125ea565b60405165ffffffffffff9091168152602001610400565b348015610aa857600080fd5b5061046b612659565b348015610abd57600080fd5b506104c5610acc366004614561565b612676565b348015610add57600080fd5b5061058d600081565b348015610af257600080fd5b506104c5610b01366004614f31565b612743565b348015610b1257600080fd5b506103f4610b2136600461445a565b61274e565b348015610b3257600080fd5b50610b46610b413660046143e9565b612790565b6040516104009190614f5f565b348015610b5f57600080fd5b5061058d610b6e36600461445a565b612813565b348015610b7f57600080fd5b5061058d610b8e36600461459c565b612855565b348015610b9f57600080fd5b5061046b604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610bd057600080fd5b50610be4610bdf366004614f73565b61287b565b6040516001600160d01b039091168152602001610400565b348015610c0857600080fd5b50610c1c610c1736600461445a565b612916565b6040516104009190614fa1565b348015610c3557600080fd5b50610a8561299d565b348015610c4a57600080fd5b506104c5610c59366004614fd9565b6129e8565b348015610c6a57600080fd5b5061058d610c7936600461459c565b6129ff565b348015610c8a57600080fd5b5061046b610c993660046143e9565b612a4d565b348015610caa57600080fd5b50610cbe610cb936600461445a565b612b0d565b6040516104009190615085565b348015610cd757600080fd5b50610ceb610ce63660046143e9565b612b94565b60405160ff9091168152602001610400565b348015610d0957600080fd5b506104c5610d183660046143e9565b612bb8565b348015610d2957600080fd5b506104c5610d38366004614a47565b612c24565b348015610d4957600080fd5b506103f4610d583660046143e9565b612c40565b348015610d6957600080fd5b5061058d600080516020615ba983398151915281565b348015610d8b57600080fd5b50610be4612c64565b348015610da057600080fd5b506104c5610daf3660046150c7565b612ce7565b348015610dc057600080fd5b50610dd4610dcf3660046143e9565b612d3f565b60405161040091906150fb565b348015610ded57600080fd5b5061058d600080516020615be983398151915281565b348015610e0f57600080fd5b50610c1c610e1e36600461445a565b612deb565b348015610e2f57600080fd5b5061058d606481565b348015610e4457600080fd5b506103f4610e53366004615109565b612e25565b348015610e6457600080fd5b50610cbe610e7336600461445a565b612e64565b348015610e8457600080fd5b5061058d600080516020615bc983398151915281565b348015610ea657600080fd5b506104c5610eb5366004614a47565b612e88565b348015610ec657600080fd5b506103f4610ed53660046143e9565b612f2c565b348015610ee657600080fd5b5061058d600080516020615b6983398151915281565b600080610f0883612f50565b90506001600160a01b038116610f215750600092915050565b50600192915050565b6000610f3582612f79565b92915050565b606073__$d5cd89f76df1633386d5125db9b55cb1a4$__6378bbf88f610f5f612f9e565b846040518363ffffffff1660e01b8152600401610f7d929190615127565b600060405180830381865af4158015610f9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f35919081019061513e565b60606000610fce612fc2565b9050806000018054610fdf90615223565b80601f016020809104026020016040519081016040528092919081815260200182805461100b90615223565b80156110585780601f1061102d57610100808354040283529160200191611058565b820191906000526020600020905b81548152906001019060200180831161103b57829003601f168201915b505050505091505090565b600061106e82612fe6565b50610f358261301e565b611083828233613047565b5050565b60008073__$882f5b37a3d589eaf0cd285805dc8d05cc$__63571a48116110ac612f9e565b6040516001600160e01b031960e084901b168152600481019190915260ff861660248201526044016040805180830381865af41580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611114919061525d565b9094909350915050565b606073__$882f5b37a3d589eaf0cd285805dc8d05cc$__633a38b4b7611142612f9e565b6040518263ffffffff1660e01b815260040161116091815260200190565b600060405180830381865af415801561117d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a59190810190615371565b905090565b73__$d5cd89f76df1633386d5125db9b55cb1a4$__63fab7bb756111cc612f9e565b84846040518463ffffffff1660e01b81526004016111ec93929190615421565b60006040518083038186803b15801561120457600080fd5b505af4158015611218573d6000803e3d6000fd5b505050505050565b600080516020615b6983398151915261123881613054565b6003600061124461305e565b8054909150600160401b900460ff168061126b575080546001600160401b03808416911610155b156112895760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1781556001600160a01b0386166112cf576040516303988b8160e61b815260040160405180910390fd5b83518551146112f1576040516307e11acb60e51b815260040160405180910390fd5b60006112fb612f9e565b600b810180546001600160a01b0319166001600160a01b038a16179055905060005b86518110156113ea5773__$882f5b37a3d589eaf0cd285805dc8d05cc$__638cdca9e08389848151811061135357611353615440565b602002602001015189858151811061136d5761136d615440565b60200260200101516040518463ffffffff1660e01b81526004016113a79392919092835260ff919091166020830152604082015260600190565b60006040518083038186803b1580156113bf57600080fd5b505af41580156113d3573d6000803e3d6000fd5b5050505080806113e29061546c565b91505061131d565b5050805460ff60401b19168155604051600080516020615b4983398151915290611415908490614f5f565b60405180910390a1505050505050565b600073__$33024e28f4a0ded70fcb245aaa4d798379$__63fe18c37f611449612f9e565b846040518363ffffffff1660e01b8152600401611467929190615485565b602060405180830381865af4158015611484573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f359190615493565b6000806114b3613082565b6002015492915050565b6114c56130a6565b6114cd6130dc565b60006114d7612f9e565b6040516333c4714760e11b815290915073__$33024e28f4a0ded70fcb245aaa4d798379$__90636788e28e9061151590849033908790600401615421565b60006040518083038186803b15801561152d57600080fd5b505af4158015611541573d6000803e3d6000fd5b505050505061154e613104565b50565b600061155b612f9e565b600201546001600160a01b0316919050565b6001600160a01b0382166115a0576000604051633250574960e11b8152600401611597919061454d565b60405180910390fd5b60006115ad838333613115565b9050836001600160a01b0316816001600160a01b0316146115fb576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401611597565b50505050565b60008061160c6131d0565b60009384526020525050604090206001015490565b606073__$882f5b37a3d589eaf0cd285805dc8d05cc$__63e35bc30f611645612f9e565b6040518263ffffffff1660e01b815260040161166391815260200190565b600060405180830381865af4158015611680573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a591908101906154ac565b600080516020615b698339815191526116c081613054565b600260006116cc61305e565b8054909150600160401b900460ff16806116f3575080546001600160401b03808416911610155b156117115760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1760ff60401b19168155604051600080516020615b4983398151915290611755908490614f5f565b60405180910390a150505050565b606073__$882f5b37a3d589eaf0cd285805dc8d05cc$__63132f244f611787612f9e565b6040516001600160e01b031960e084901b168152600481019190915265ffffffffffff85166024820152604401600060405180830381865af41580156117d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3591908101906154ac565b61180282611601565b61180b81613054565b6115fb83836131f4565b600080611820613082565b905061182b84611e13565b831061184e57838360405163295f44f760e21b815260040161159792919061553a565b6001600160a01b0384166000908152602091825260408082208583529092522054905092915050565b600073__$d5cd89f76df1633386d5125db9b55cb1a4$__63698315f661189b612f9e565b85856040518463ffffffff1660e01b81526004016118bb93929190615421565b602060405180830381865af41580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc9190615553565b9392505050565b6001600160a01b038116331461192c5760405163334bd91960e11b815260040160405180910390fd5b6119368282613295565b505050565b600080516020615be983398151915261195381613054565b61154e61330d565b611936838383604051806020016040528060008152506129e8565b6000611980612f9e565b600b8101549091506001600160a01b031633146119b2573360405163d86ad9cf60e01b8152600401611597919061454d565b6119ba6130a6565b6119c26130dc565b60006119cc612f9e565b60405163ce9f367960e01b815290915073__$33024e28f4a0ded70fcb245aaa4d798379$__9063ce9f367990611a089084908790600401615485565b60006040518083038186803b158015611a2057600080fd5b505af4158015611a34573d6000803e3d6000fd5b5050505050611083613104565b6000611a4b612f9e565b600b8101549091506001600160a01b03163314611a7d573360405163d86ad9cf60e01b8152600401611597919061454d565b611a856130a6565b611a8d6130dc565b6000611a97612f9e565b6040516351a1d6eb60e01b815290915073__$33024e28f4a0ded70fcb245aaa4d798379$__906351a1d6eb90611a089084908790600401615485565b606073__$7df4da9b1a17d9d425275d1becdd020933$__634bf5d7e96040518163ffffffff1660e01b8152600401600060405180830381865af4158015611b1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a59190810190615570565b611b4e613364565b611b5782613409565b6110838282613421565b600080611b6c613082565b9050611b766114a8565b8310611b9a5760008360405163295f44f760e21b815260040161159792919061553a565b806002018381548110611baf57611baf615440565b9060005260206000200154915050919050565b6000611bcc6134d5565b50600080516020615b8983398151915290565b600080516020615bc9833981519152611bf781613054565b6000611c01612f9e565b60405163b0561d6b60e01b815290915073__$0e6659b32317c8fd29d8e9acacd76a98c6$__9063b0561d6b90611c3d90849087906004016155a4565b60006040518083038186803b158015611c5557600080fd5b505af4158015611c69573d6000803e3d6000fd5b50505050505050565b6000611c7c612f9e565b60030154905090565b6000611c8f612f9e565b54600160381b90046001600160a01b0316919050565b600080611cb061351e565b5460ff1692915050565b6000610f3582612fe6565b600073__$d5cd89f76df1633386d5125db9b55cb1a4$__63bae03e8e611ce9612f9e565b846040518363ffffffff1660e01b8152600401611d07929190615485565b602060405180830381865af4158015611d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3591906155bd565b60606111a5613542565b6040805160c081018252606080825260006020830181905292820183905281018290526080810182905260a081019190915273__$882f5b37a3d589eaf0cd285805dc8d05cc$__63d8fa39d9611da6612f9e565b6040516001600160e01b031960e084901b168152600481019190915260ff85166024820152604401600060405180830381865af4158015611deb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3591908101906155da565b600080611e1e612fc2565b90506001600160a01b038316611e4a5760006040516322718ad960e21b8152600401611597919061454d565b6001600160a01b039092166000908152600390920160205250604090205490565b606073__$882f5b37a3d589eaf0cd285805dc8d05cc$__632a08d1b4611e8f612f9e565b6040518263ffffffff1660e01b8152600401611ead91815260200190565b600060405180830381865af4158015611eca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a5919081019061560e565b6000611efc612f9e565b600b01546001600160a01b0316919050565b333014611f30573360405163d86ad9cf60e01b8152600401611597919061454d565b61108382826135dd565b600080611f45612f9e565b600b8101549091506001600160a01b03163314611f77573360405163d86ad9cf60e01b8152600401611597919061454d565b611f7f6130a6565b611f876130dc565b6000611f91612f9e565b6040516330c339f160e11b81526004810182905260ff871660248201526001600160a01b038616604482015290915073__$33024e28f4a0ded70fcb245aaa4d798379$__9063618673e290606401602060405180830381865af4158015611ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120209190615493565b92505061202b613104565b5092915050565b600073__$d5cd89f76df1633386d5125db9b55cb1a4$__63b7006ec2612056612f9e565b846040518363ffffffff1660e01b8152600401612074929190615485565b602060405180830381865af4158015612091573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f359190615553565b600080516020615be98339815191526120cd81613054565b61154e6135f7565b3330146120f7573360405163d86ad9cf60e01b8152600401611597919061454d565b61154e8161363e565b600061210a61305e565b805490915060ff600160401b82041615906001600160401b03166000811580156121315750825b90506000826001600160401b0316600114801561214d5750303b155b90508115801561215b575080155b156121795760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156121a257845460ff60401b1916600160401b1785555b60608601516001600160a01b031615806121c7575060808601516001600160a01b0316155b806121dd575060a08601516001600160a01b0316155b806121f3575060c08601516001600160a01b0316155b80612209575060e08601516001600160a01b0316155b8061222057506101208601516001600160a01b0316155b8061223757506101008601516001600160a01b0316155b15612255576040516303988b8160e61b815260040160405180910390fd5b85515115806122675750602086015151155b806122755750604086015151155b156122935760405163155796cd60e31b815260040160405180910390fd5b8561014001516000036122b9576040516363868c5560e11b815260040160405180910390fd5b856101600151516000036122e0576040516380af3b2760e01b815260040160405180910390fd5b6122f286600001518760200151613679565b6122fa61368b565b612302613693565b61230a6136a3565b61231261368b565b61231a61368b565b61232b6000801b87606001516131f4565b50612348600080516020615b6983398151915287608001516131f4565b50612365600080516020615be98339815191528760a001516131f4565b50612382600080516020615b298339815191528760c001516131f4565b50600061238d612f9e565b905060005b8761016001515181101561243a5773__$882f5b37a3d589eaf0cd285805dc8d05cc$__63587167e3838a610160015184815181106123d2576123d2615440565b60200260200101516040518363ffffffff1660e01b81526004016123f792919061569c565b60006040518083038186803b15801561240f57600080fd5b505af4158015612423573d6000803e3d6000fd5b5050505080806124329061546c565b915050612392565b5060e087015181546001600160a01b03918216600160381b02600160381b600160d81b03199091161782556101008801516001830180549183166001600160a01b03199283161790556101208901516002840180549190931691161790556101408701516003820155604087015160048201906124b7908261578e565b5050831561121857845460ff60401b19168555604051600080516020615b498339815191529061141590600190614f5f565b60006124f481613054565b60006124fe612f9e565b9050478084111561252657808460405163b7ddd88b60e01b8152600401611597929190615485565b600b8201546040516000916001600160a01b03169086908381818185875af1925050503d8060008114612575576040519150601f19603f3d011682016040523d82523d6000602084013e61257a565b606091505b50509050806125ad57600b8301546040516376ac9b2760e11b8152611597916001600160a01b031690879060040161553a565b5050505050565b6000806125bf6131d0565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b600073__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015612635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a5919061584d565b60606000612665612fc2565b9050806001018054610fdf90615223565b6000612680612f9e565b600b8101549091506001600160a01b031633146126b2573360405163d86ad9cf60e01b8152600401611597919061454d565b6126ba6130a6565b6126c26130dc565b60006126cc612f9e565b6040516333c4714760e11b815290915073__$33024e28f4a0ded70fcb245aaa4d798379$__90636788e28e9061270a90849088908890600401615421565b60006040518083038186803b15801561272257600080fd5b505af4158015612736573d6000803e3d6000fd5b5050505050611936613104565b6110833383836136b3565b600073__$3bdef20447008df1b9f923aedb41d56473$__6333c0fe64612772612f9e565b846040518363ffffffff1660e01b8152600401612074929190615127565b600073__$3bdef20447008df1b9f923aedb41d56473$__63daac67456127b4612f9e565b846040518363ffffffff1660e01b81526004016127d2929190615485565b602060405180830381865af41580156127ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f35919061586a565b600073__$3bdef20447008df1b9f923aedb41d56473$__637ea23774612837612f9e565b846040518363ffffffff1660e01b8152600401611467929190615127565b600061285f612f9e565b60ff9092166000908152600e9290920160205250604090205490565b600073__$882f5b37a3d589eaf0cd285805dc8d05cc$__638ea028a861289f612f9e565b6040516001600160e01b031960e084901b168152600481019190915260ff8616602482015265ffffffffffff85166044820152606401602060405180830381865af41580156128f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc9190615887565b606073__$d5cd89f76df1633386d5125db9b55cb1a4$__6392bc7e5061293a612f9e565b846040518363ffffffff1660e01b8152600401612958929190615127565b600060405180830381865af4158015612975573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3591908101906158a4565b600073__$7df4da9b1a17d9d425275d1becdd020933$__63b80777ea6040518163ffffffff1660e01b8152600401602060405180830381865af4158015612635573d6000803e3d6000fd5b6129f384848461156d565b6115fb84848484613758565b600080612a0a612f9e565b60ff84166000908152600582016020908152604080832060010154600e8501909252909120549192506118fc91620100009091046001600160401b031690615929565b6060612a5882612fe6565b506000612a63612f9e565b600084815260088201602052604090206001015490915060ff1673__$3bdef20447008df1b9f923aedb41d56473$__638f1f3b0e8386612aa285613868565b6040518463ffffffff1660e01b8152600401612ac093929190615940565b600060405180830381865af4158015612add573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b059190810190615570565b949350505050565b606073__$d5cd89f76df1633386d5125db9b55cb1a4$__63e2f60320612b31612f9e565b846040518363ffffffff1660e01b8152600401612b4f929190615127565b600060405180830381865af4158015612b6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3591908101906159ea565b6000612b9e612f9e565b600092835260080160205250604090206001015460ff1690565b73__$d5cd89f76df1633386d5125db9b55cb1a4$__6317f9335d612bda612f9e565b836040518363ffffffff1660e01b8152600401612bf8929190615485565b60006040518083038186803b158015612c1057600080fd5b505af41580156125ad573d6000803e3d6000fd5b612c2d82611601565b612c3681613054565b6115fb8383613295565b600073__$3bdef20447008df1b9f923aedb41d56473$__63b1dc594a612056612f9e565b600073__$3bdef20447008df1b9f923aedb41d56473$__630e692e0b612c88612f9e565b6040518263ffffffff1660e01b8152600401612ca691815260200190565b602060405180830381865af4158015612cc3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a59190615887565b600080516020615b29833981519152612cff81613054565b73__$882f5b37a3d589eaf0cd285805dc8d05cc$__63587167e3612d21612f9e565b846040518363ffffffff1660e01b81526004016111ec92919061569c565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915273__$3bdef20447008df1b9f923aedb41d56473$__63ed3c4f9d612d8c612f9e565b846040518363ffffffff1660e01b8152600401612daa929190615485565b60a060405180830381865af4158015612dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f359190615a77565b6040516339d931f160e21b815260609073__$3bdef20447008df1b9f923aedb41d56473$__9063e764c7c49061295890859060040161454d565b600080612e30612fc2565b6001600160a01b03948516600090815260059190910160209081526040808320959096168252939093525050205460ff1690565b606073__$3bdef20447008df1b9f923aedb41d56473$__63ddd6ce95612b31612f9e565b600080516020615ba9833981519152612ea081613054565b6000612eaa612f9e565b6040516366a7f29160e01b815260048101829052602481018690526001600160a01b038516604482015290915073__$d5cd89f76df1633386d5125db9b55cb1a4$__906366a7f2919060640160006040518083038186803b158015612f0e57600080fd5b505af4158015612f22573d6000803e3d6000fd5b5050505050505050565b600073__$3bdef20447008df1b9f923aedb41d56473$__6376885395612056612f9e565b600080612f5b612fc2565b6000938452600201602052505060409020546001600160a01b031690565b60006001600160e01b0319821663780e9d6360e01b1480610f355750610f35826138fa565b7fec49bc12bd9c2cfd865ff38825256c053d253acea1262d51e4c4821cc4d5b70090565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930090565b600080612ff283612f50565b90506001600160a01b038116610f3557604051637e27328960e01b815260048101849052602401611597565b600080613029612fc2565b6000938452600401602052505060409020546001600160a01b031690565b611936838383600161393a565b61154e8133613a44565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0090565b60006130b0613a6f565b8054909150600119016130d657604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6130e4611ca5565b156131025760405163d93c066560e01b815260040160405180910390fd5b565b600061310e613a6f565b6001905550565b600080613120612f9e565b6000858152600d820160205260409020549091506001600160a01b031680156131bb576000858152600d83016020908152604080832080546001600160a01b03191690556001600160a01b0384168352600c850190915290206131839086613a93565b506040516001600160a01b0382169086907f2dea8fdc0115667de4800362c74206112df0a3a139fa2c217218b27a5da2025990600090a35b6131c6868686613a9f565b9695505050505050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b6000806131ff6131d0565b905061320b84846125b4565b61328b576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556132413390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610f35565b6000915050610f35565b6000806132a06131d0565b90506132ac84846125b4565b1561328b576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610f35565b613315613ab4565b600061331f61351e565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051613359919061454d565b60405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806133eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166133df600080516020615b89833981519152546001600160a01b031690565b6001600160a01b031614155b156131025760405163703e46dd60e11b815260040160405180910390fd5b600080516020615b6983398151915261108381613054565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561347b575060408051601f3d908101601f1916820190925261347891810190615493565b60015b61349a5781604051634c9c8ce360e01b8152600401611597919061454d565b600080516020615b8983398151915281146134cb57604051632a87526960e21b815260048101829052602401611597565b6119368383613ad9565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146131025760405163703e46dd60e11b815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b606061354c612f9e565b600401805461355a90615223565b80601f016020809104026020016040519081016040528092919081815260200182805461358690615223565b80156135d35780601f106135a8576101008083540402835291602001916135d3565b820191906000526020600020905b8154815290600101906020018083116135b657829003601f168201915b5050505050905090565b611083828260405180602001604052806000815250613b2f565b6135ff6130dc565b600061360961351e565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861334c3390565b600061364d6000836000613115565b90506001600160a01b03811661108357604051637e27328960e01b815260048101839052602401611597565b613681613b46565b6110838282613b6b565b613102613b46565b61369b613b46565b613102613b99565b6136ab613b46565b613102613bb6565b60006136bd612fc2565b90506001600160a01b0383166136e85782604051630b61174360e31b8152600401611597919061454d565b6001600160a01b038481166000818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b0383163b156115fb57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061379a903390889087908790600401615a93565b6020604051808303816000875af19250505080156137d5575060408051601f3d908101601f191682019092526137d291810190615ac6565b60015b613835573d808015613803576040519150601f19603f3d011682016040523d82523d6000602084013e613808565b606091505b50805160000361382d5783604051633250574960e11b8152600401611597919061454d565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b146125ad5783604051633250574960e11b8152600401611597919061454d565b6060600061387583613bbe565b60010190506000816001600160401b0381111561389457613894614681565b6040519080825280601f01601f1916602001820160405280156138be576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846138c857509392505050565b60006001600160e01b031982166380ac58cd60e01b148061392b57506001600160e01b03198216635b5e139f60e01b145b80610f355750610f3582613c94565b6000613944612fc2565b9050818061395a57506001600160a01b03831615155b15613a1357600061396a85612fe6565b90506001600160a01b038416158015906139965750836001600160a01b0316816001600160a01b031614155b80156139a957506139a78185612e25565b155b156139c9578360405163a9fbf51f60e01b8152600401611597919061454d565b8215613a115784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080546001600160a01b0319166001600160a01b0392909216919091179055565b613a4e82826125b4565b61108357808260405163e2517d3f60e01b815260040161159792919061553a565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b60006118fc8383613cc9565b6000613aa96130dc565b612b05848484613db2565b613abc611ca5565b61310257604051638dfc202b60e01b815260040160405180910390fd5b613ae282613e40565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115613b27576119368282613e9c565b611083613f12565b613b398383613f31565b6119366000848484613758565b613b4e613f96565b61310257604051631afcd79f60e31b815260040160405180910390fd5b613b73613b46565b6000613b7d612fc2565b905080613b8a848261578e565b50600181016115fb838261578e565b613ba1613b46565b6000613bab61351e565b805460ff1916905550565b613104613b46565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310613bfd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310613c27576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310613c4557662386f26fc10000830492506010015b6305f5e1008310613c5d576305f5e100830492506008015b6127108310613c7157612710830492506004015b60648310613c83576064830492506002015b600a8310610f355760010192915050565b60006001600160e01b03198216637965db0b60e01b1480610f3557506301ffc9a760e01b6001600160e01b0319831614610f35565b6000818152600183016020526040812054801561328b576000613ced600183615ae3565b8554909150600090613d0190600190615ae3565b9050808214613d66576000866000018281548110613d2157613d21615440565b9060005260206000200154905080876000018481548110613d4457613d44615440565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d7757613d77615af6565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f35565b600080613dc0858585613fb0565b90506001600160a01b038116613dde57613dd9846140b7565b613e01565b846001600160a01b0316816001600160a01b031614613e0157613e0181856140f0565b6001600160a01b038516613e1d57613e1884614191565b612b05565b846001600160a01b0316816001600160a01b031614612b0557612b05858561425a565b806001600160a01b03163b600003613e6d5780604051634c9c8ce360e01b8152600401611597919061454d565b600080516020615b8983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051613eb99190615b0c565b600060405180830381855af49150503d8060008114613ef4576040519150601f19603f3d011682016040523d82523d6000602084013e613ef9565b606091505b5091509150613f098583836142b2565b95945050505050565b34156131025760405163b398979f60e01b815260040160405180910390fd5b6001600160a01b038216613f5b576000604051633250574960e11b8152600401611597919061454d565b6000613f6983836000613115565b90506001600160a01b038116156119365760006040516339e3563760e11b8152600401611597919061454d565b6000613fa061305e565b54600160401b900460ff16919050565b600080613fbb612fc2565b90506000613fc885612f50565b90506001600160a01b03841615613fe457613fe4818587614305565b6001600160a01b038116156140245761400160008660008061393a565b6001600160a01b0381166000908152600383016020526040902080546000190190555b6001600160a01b03861615614055576001600160a01b03861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b60006140c1613082565b600281018054600085815260039093016020908152604084208290556001820183559183529120019190915550565b60006140fa613082565b9050600061410784611e13565b600084815260018401602052604090205490915080821461415c576001600160a01b03851660009081526020848152604080832085845282528083205484845281842081905583526001860190915290208190555b50600092835260018201602090815260408085208590556001600160a01b039095168452918252838320908352905290812055565b600061419b613082565b60028101549091506000906141b290600190615ae3565b60008481526003840160205260408120546002850180549394509092849081106141de576141de615440565b906000526020600020015490508084600201838154811061420157614201615440565b60009182526020808320909101929092558281526003860190915260408082208490558682528120556002840180548061423d5761423d615af6565b600190038181906000526020600020016000905590555050505050565b6000614264613082565b90506000600161427385611e13565b61427d9190615ae3565b6001600160a01b0390941660009081526020838152604080832087845282528083208690559482526001909301909252502055565b6060826142c7576142c28261435b565b6118fc565b81511580156142de57506001600160a01b0384163b155b156142fe5783604051639996b31560e01b8152600401611597919061454d565b50806118fc565b614310838383614384565b611936576001600160a01b03831661433e57604051637e27328960e01b815260048101829052602401611597565b818160405163177e802f60e01b815260040161159792919061553a565b80511561436b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60006001600160a01b03831615801590612b055750826001600160a01b0316846001600160a01b031614806143be57506143be8484612e25565b80612b055750826001600160a01b03166143d78361301e565b6001600160a01b031614949350505050565b6000602082840312156143fb57600080fd5b5035919050565b6001600160e01b03198116811461154e57600080fd5b60006020828403121561442a57600080fd5b81356118fc81614402565b6001600160a01b038116811461154e57600080fd5b803561445581614435565b919050565b60006020828403121561446c57600080fd5b81356118fc81614435565b602080825282518282018190526000919060409081850190868401855b828110156144dd57815180518552868101516001600160a01b039081168887015286820151168686015260609081015160ff169085015260809093019290850190600101614494565b5091979650505050505050565b60005b838110156145055781810151838201526020016144ed565b50506000910152565b600081518084526145268160208601602086016144ea565b601f01601f19169290920160200192915050565b6020815260006118fc602083018461450e565b6001600160a01b0391909116815260200190565b6000806040838503121561457457600080fd5b823561457f81614435565b946020939093013593505050565b60ff8116811461154e57600080fd5b6000602082840312156145ae57600080fd5b81356118fc8161458d565b6000815160c084526145ce60c085018261450e565b905060208301511515602085015260ff6040840151166040850152606083015160018060401b038082166060870152806080860151166080870152505060a083015160a08501528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561467457603f198886030184526146628583516145b9565b94509285019290850190600101614646565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156146b9576146b9614681565b60405290565b60405160c081016001600160401b03811182821017156146b9576146b9614681565b60405161018081016001600160401b03811182821017156146b9576146b9614681565b604051608081016001600160401b03811182821017156146b9576146b9614681565b604051601f8201601f191681016001600160401b038111828210171561474e5761474e614681565b604052919050565b60006001600160401b0382111561476f5761476f614681565b5060051b60200190565b600082601f83011261478a57600080fd5b8135602061479f61479a83614756565b614726565b82815260059290921b840181019181810190868411156147be57600080fd5b8286015b848110156147d957803583529183019183016147c2565b509695505050505050565b6000806000606084860312156147f957600080fd5b833561480481614435565b92506020848101356001600160401b038082111561482157600080fd5b818701915087601f83011261483557600080fd5b813561484361479a82614756565b81815260059190911b8301840190848101908a83111561486257600080fd5b938501935b8285101561488957843561487a8161458d565b82529385019390850190614867565b9650505060408701359250808311156148a157600080fd5b50506148af86828701614779565b9150509250925092565b6000806000606084860312156148ce57600080fd5b83356148d981614435565b925060208401356148e981614435565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b8181101561493b5783516001600160d01b031683529284019291840191600101614916565b50909695505050505050565b6000602080838503121561495a57600080fd5b82356001600160401b0381111561497057600080fd5b8301601f8101851361498157600080fd5b803561498f61479a82614756565b818152606091820283018401918482019190888411156149ae57600080fd5b938501935b83851015614a0a5780858a0312156149cb5760008081fd5b6149d3614697565b85356149de81614435565b815285870135878201526040808701356149f78161458d565b90820152835293840193918501916149b3565b50979650505050505050565b65ffffffffffff8116811461154e57600080fd5b600060208284031215614a3c57600080fd5b81356118fc81614a16565b60008060408385031215614a5a57600080fd5b823591506020830135614a6c81614435565b809150509250929050565b60006001600160401b03821115614a9057614a90614681565b50601f01601f191660200190565b600082601f830112614aaf57600080fd5b8135614abd61479a82614a77565b818152846020838601011115614ad257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614b0257600080fd5b8235614b0d81614435565b915060208301356001600160401b03811115614b2857600080fd5b614b3485828601614a9e565b9150509250929050565b600060208284031215614b5057600080fd5b81356001600160401b03811115614b6657600080fd5b612b0584828501614a9e565b6020815260006118fc60208301846145b9565b6020808252825182820181905260009190848201906040850190845b8181101561493b57835160ff1683529284019291840191600101614ba1565b60008060408385031215614bd357600080fd5b8235614bde8161458d565b91506020830135614a6c81614435565b801515811461154e57600080fd5b6001600160401b038116811461154e57600080fd5b803561445581614bfc565b6001600160d01b038116811461154e57600080fd5b803561445581614c1c565b63ffffffff8116811461154e57600080fd5b803561445581614c3c565b600060608284031215614c6b57600080fd5b614c73614697565b905081356001600160401b0380821115614c8c57600080fd5b9083019060c08286031215614ca057600080fd5b614ca86146bf565b823582811115614cb757600080fd5b614cc387828601614a9e565b82525060208301359150614cd682614bee565b81602082015260408301359150614cec8261458d565b81604082015260608301359150614d0282614bfc565b816060820152614d1460808401614c11565b608082015260a083013560a0820152808452505050614d3560208301614c31565b6020820152614d4660408301614c4e565b604082015292915050565b600082601f830112614d6257600080fd5b81356020614d7261479a83614756565b82815260059290921b84018101918181019086841115614d9157600080fd5b8286015b848110156147d95780356001600160401b03811115614db45760008081fd5b614dc28986838b0101614c59565b845250918301918301614d95565b600060208284031215614de257600080fd5b81356001600160401b0380821115614df957600080fd5b908301906101808286031215614e0e57600080fd5b614e166146e1565b823582811115614e2557600080fd5b614e3187828601614a9e565b825250602083013582811115614e4657600080fd5b614e5287828601614a9e565b602083015250604083013582811115614e6a57600080fd5b614e7687828601614a9e565b604083015250614e886060840161444a565b6060820152614e996080840161444a565b6080820152614eaa60a0840161444a565b60a0820152614ebb60c0840161444a565b60c0820152614ecc60e0840161444a565b60e0820152610100614edf81850161444a565b90820152610120614ef184820161444a565b9082015261014083810135908201526101608084013583811115614f1457600080fd5b614f2088828701614d51565b918301919091525095945050505050565b60008060408385031215614f4457600080fd5b8235614f4f81614435565b91506020830135614a6c81614bee565b6001600160401b0391909116815260200190565b60008060408385031215614f8657600080fd5b8235614f918161458d565b91506020830135614a6c81614a16565b6020808252825182820181905260009190848201906040850190845b8181101561493b57835183529284019291840191600101614fbd565b60008060008060808587031215614fef57600080fd5b8435614ffa81614435565b9350602085013561500a81614435565b92506040850135915060608501356001600160401b0381111561502c57600080fd5b61503887828801614a9e565b91505092959194509250565b8051825260208082015160ff16908301526040808201516001600160401b0316908301526060808201519083015260809081015165ffffffffffff16910152565b6020808252825182820181905260009190848201906040850190845b8181101561493b576150b4838551615044565b9284019260a092909201916001016150a1565b6000602082840312156150d957600080fd5b81356001600160401b038111156150ef57600080fd5b612b0584828501614c59565b60a08101610f358284615044565b6000806040838503121561511c57600080fd5b8235614bde81614435565b9182526001600160a01b0316602082015260400190565b6000602080838503121561515157600080fd5b82516001600160401b0381111561516757600080fd5b8301601f8101851361517857600080fd5b805161518661479a82614756565b81815260079190911b820183019083810190878311156151a557600080fd5b928401925b8284101561521857608084890312156151c35760008081fd5b6151cb614704565b84518152858501516151dc81614435565b818701526040858101516151ef81614435565b908201526060858101516152028161458d565b90820152825260809390930192908401906151aa565b979650505050505050565b600181811c9082168061523757607f821691505b60208210810361525757634e487b7160e01b600052602260045260246000fd5b50919050565b6000806040838503121561527057600080fd5b825161527b81614c1c565b6020840151909250614a6c81614c3c565b600082601f83011261529d57600080fd5b81516152ab61479a82614a77565b8181528460208386010111156152c057600080fd5b612b058260208301602087016144ea565b600060c082840312156152e357600080fd5b6152eb6146bf565b82519091506001600160401b0381111561530457600080fd5b6153108482850161528c565b825250602082015161532181614bee565b602082015260408201516153348161458d565b6040820152606082015161534781614bfc565b6060820152608082015161535a81614bfc565b8060808301525060a082015160a082015292915050565b6000602080838503121561538457600080fd5b82516001600160401b038082111561539b57600080fd5b818501915085601f8301126153af57600080fd5b81516153bd61479a82614756565b81815260059190911b830184019084810190888311156153dc57600080fd5b8585015b83811015615414578051858111156153f85760008081fd5b6154068b89838a01016152d1565b8452509186019186016153e0565b5098975050505050505050565b9283526001600160a01b03919091166020830152604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161547e5761547e615456565b5060010190565b918252602082015260400190565b6000602082840312156154a557600080fd5b5051919050565b600060208083850312156154bf57600080fd5b82516001600160401b038111156154d557600080fd5b8301601f810185136154e657600080fd5b80516154f461479a82614756565b81815260059190911b8201830190838101908783111561551357600080fd5b928401925b8284101561521857835161552b81614c1c565b82529284019290840190615518565b6001600160a01b03929092168252602082015260400190565b60006020828403121561556557600080fd5b81516118fc81614bee565b60006020828403121561558257600080fd5b81516001600160401b0381111561559857600080fd5b612b058482850161528c565b828152604060208201526000612b05604083018461450e565b6000602082840312156155cf57600080fd5b81516118fc81614435565b6000602082840312156155ec57600080fd5b81516001600160401b0381111561560257600080fd5b612b05848285016152d1565b6000602080838503121561562157600080fd5b82516001600160401b0381111561563757600080fd5b8301601f8101851361564857600080fd5b805161565661479a82614756565b81815260059190911b8201830190838101908783111561567557600080fd5b928401925b8284101561521857835161568d8161458d565b8252928401929084019061567a565b828152604060208201526000825160606040840152805160c060a08501526156c861016085018261450e565b602083810151151560c0870152604084015160ff1660e08701526060808501516001600160401b0390811661010089015260808601511661012088015260a0909401516101408701528601519290915061572c908501836001600160d01b03169052565b604085015163ffffffff81166080860152915095945050505050565b601f82111561193657600081815260208120601f850160051c8101602086101561576f5750805b601f850160051c820191505b818110156112185782815560010161577b565b81516001600160401b038111156157a7576157a7614681565b6157bb816157b58454615223565b84615748565b602080601f8311600181146157f057600084156157d85750858301515b600019600386901b1c1916600185901b178555611218565b600085815260208120601f198616915b8281101561581f57888601518255948401946001909101908401615800565b508582101561583d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561585f57600080fd5b81516118fc81614a16565b60006020828403121561587c57600080fd5b81516118fc81614bfc565b60006020828403121561589957600080fd5b81516118fc81614c1c565b600060208083850312156158b757600080fd5b82516001600160401b038111156158cd57600080fd5b8301601f810185136158de57600080fd5b80516158ec61479a82614756565b81815260059190911b8201830190838101908783111561590b57600080fd5b928401925b8284101561521857835182529284019290840190615910565b8082028115828204841417610f3557610f35615456565b838152826020820152606060408201526000613f09606083018461450e565b600060a0828403121561597157600080fd5b60405160a081016001600160401b038111828210171561599357615993614681565b80604052508091508251815260208301516159ad8161458d565b602082015260408301516159c081614bfc565b60408201526060838101519082015260808301516159dd81614a16565b6080919091015292915050565b600060208083850312156159fd57600080fd5b82516001600160401b03811115615a1357600080fd5b8301601f81018513615a2457600080fd5b8051615a3261479a82614756565b81815260a09182028301840191848201919088841115615a5157600080fd5b938501935b83851015614a0a57615a68898661595f565b83529384019391850191615a56565b600060a08284031215615a8957600080fd5b6118fc838361595f565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906131c69083018461450e565b600060208284031215615ad857600080fd5b81516118fc81614402565b81810381811115610f3557610f35615456565b634e487b7160e01b600052603160045260246000fd5b60008251615b1e8184602087016144ea565b919091019291505056feb885c7fab33eebc89fe071f92830192e26ac26c5457a8375da4744f5d35edba4c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc93232a7bb6c6e0f3eb1906dee10d2f6552ddc3b681619f046711c6eeed85a80a241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0865d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220639e72270201d0205247e2cda49ea9f8df316085899a8a009d421e064d9a6ad364736f6c63430008140033",
  "deployedBytecode": "0x6080604052600436106103cf5760003560e01c8062923f9e146103d457806301ffc9a71461040957806305a03f501461042957806306fdde0314610456578063081812fc14610478578063095ea7b3146104a55780630c0f1c84146104c75780630c394a601461050b5780630c72580f1461052d5780630dbdd3bc1461054d57806313e09e961461056d57806318160ddd1461059b5780631b55d19e146105b05780631e813caf146105d057806323b872dd146105e5578063248a9ca31461060557806329f7540b146106255780632b5c1779146106475780632c5811da146106675780632f2ff15d146106875780632f745c59146106a757806332ebc612146106c757806336568abe146106e75780633f4ba83a1461070757806342842e0e1461071c57806342966c681461073c578063454b06081461075c5780634bf5d7e91461077c5780634f1ef286146107915780634f6ccce7146107a457806352d1902d146107c457806354fd4d50146107d957806355f804b3146107ed578063561892361461080d578063570618e11461082257806359c87d141461085657806359d503751461086b5780635c975abb1461088d5780636352211e146108a2578063692b26ff146108c25780636c0360eb146108e25780636d779991146108f757806370a0823114610924578063724b4fcf14610944578063736f9035146109665780637aee01581461097b5780637bf75f6c1461099b5780638419de89146109bb5780638456cb59146109db57806384e66840146109f057806386dc4f6a14610a105780638a60c4c114610a3057806391d1485414610a5057806391ddadf414610a7057806395d89b4114610a9c578063996fa25514610ab1578063a217fddf14610ad1578063a22cb46514610ae6578063a498400914610b06578063a77ad11d14610b26578063a780f53914610b53578063a9fa6f5814610b73578063ad3cb1cc14610b93578063aef0c8ee14610bc4578063afad8f5e14610bfc578063b80777ea14610c29578063b88d4fde14610c3e578063c1ea925814610c5e578063c87b56dd14610c7e578063cd2c6efe14610c9e578063d011645c14610ccb578063d4dfed3614610cfd578063d547741f14610d1d578063d621517e14610d3d578063da1bfb3d14610d5d578063e1fac59414610d7f578063e2540d8a14610d94578063e4b50cb814610db4578063e63ab1e914610de1578063e764c7c414610e03578063e79fdfa814610e23578063e985e9c514610e38578063ea66aeb314610e58578063ec87621c14610e78578063ecf7996614610e9a578063f057248514610eba578063f72c0d8b14610eda575b600080fd5b3480156103e057600080fd5b506103f46103ef3660046143e9565b610efc565b60405190151581526020015b60405180910390f35b34801561041557600080fd5b506103f4610424366004614418565b610f2a565b34801561043557600080fd5b5061044961044436600461445a565b610f3b565b6040516104009190614477565b34801561046257600080fd5b5061046b610fc2565b604051610400919061453a565b34801561048457600080fd5b506104986104933660046143e9565b611063565b604051610400919061454d565b3480156104b157600080fd5b506104c56104c0366004614561565b611078565b005b3480156104d357600080fd5b506104e76104e236600461459c565b611087565b604080516001600160d01b03909316835263ffffffff909116602083015201610400565b34801561051757600080fd5b5061052061111e565b604051610400919061461f565b34801561053957600080fd5b506104c5610548366004614561565b6111aa565b34801561055957600080fd5b506104c56105683660046147e4565b611220565b34801561057957600080fd5b5061058d6105883660046143e9565b611425565b604051908152602001610400565b3480156105a757600080fd5b5061058d6114a8565b3480156105bc57600080fd5b506104c56105cb3660046143e9565b6114bd565b3480156105dc57600080fd5b50610498611551565b3480156105f157600080fd5b506104c56106003660046148b9565b61156d565b34801561061157600080fd5b5061058d6106203660046143e9565b611601565b34801561063157600080fd5b5061063a611621565b60405161040091906148fa565b34801561065357600080fd5b506104c5610662366004614947565b6116a8565b34801561067357600080fd5b5061063a610682366004614a2a565b611763565b34801561069357600080fd5b506104c56106a2366004614a47565b6117f9565b3480156106b357600080fd5b5061058d6106c2366004614561565b611815565b3480156106d357600080fd5b506103f46106e2366004614561565b611877565b3480156106f357600080fd5b506104c5610702366004614a47565b611903565b34801561071357600080fd5b506104c561193b565b34801561072857600080fd5b506104c56107373660046148b9565b61195b565b34801561074857600080fd5b506104c56107573660046143e9565b611976565b34801561076857600080fd5b506104c56107773660046143e9565b611a41565b34801561078857600080fd5b5061046b611ad3565b6104c561079f366004614aef565b611b46565b3480156107b057600080fd5b5061058d6107bf3660046143e9565b611b61565b3480156107d057600080fd5b5061058d611bc2565b3480156107e557600080fd5b50600361058d565b3480156107f957600080fd5b506104c5610808366004614b3e565b611bdf565b34801561081957600080fd5b5061058d611c72565b34801561082e57600080fd5b5061058d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b34801561086257600080fd5b50610498611c85565b34801561087757600080fd5b5061058d600080516020615b2983398151915281565b34801561089957600080fd5b506103f4611ca5565b3480156108ae57600080fd5b506104986108bd3660046143e9565b611cba565b3480156108ce57600080fd5b506104986108dd3660046143e9565b611cc5565b3480156108ee57600080fd5b5061046b611d48565b34801561090357600080fd5b5061091761091236600461459c565b611d52565b6040516104009190614b72565b34801561093057600080fd5b5061058d61093f36600461445a565b611e13565b34801561095057600080fd5b50610959611e6b565b6040516104009190614b85565b34801561097257600080fd5b50610498611ef2565b34801561098757600080fd5b506104c5610996366004614561565b611f0e565b3480156109a757600080fd5b5061058d6109b6366004614bc0565b611f3a565b3480156109c757600080fd5b506103f46109d63660046143e9565b612032565b3480156109e757600080fd5b506104c56120b5565b3480156109fc57600080fd5b506104c5610a0b3660046143e9565b6120d5565b348015610a1c57600080fd5b506104c5610a2b366004614dd0565b612100565b348015610a3c57600080fd5b506104c5610a4b3660046143e9565b6124e9565b348015610a5c57600080fd5b506103f4610a6b366004614a47565b6125b4565b348015610a7c57600080fd5b50610a856125ea565b60405165ffffffffffff9091168152602001610400565b348015610aa857600080fd5b5061046b612659565b348015610abd57600080fd5b506104c5610acc366004614561565b612676565b348015610add57600080fd5b5061058d600081565b348015610af257600080fd5b506104c5610b01366004614f31565b612743565b348015610b1257600080fd5b506103f4610b2136600461445a565b61274e565b348015610b3257600080fd5b50610b46610b413660046143e9565b612790565b6040516104009190614f5f565b348015610b5f57600080fd5b5061058d610b6e36600461445a565b612813565b348015610b7f57600080fd5b5061058d610b8e36600461459c565b612855565b348015610b9f57600080fd5b5061046b604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610bd057600080fd5b50610be4610bdf366004614f73565b61287b565b6040516001600160d01b039091168152602001610400565b348015610c0857600080fd5b50610c1c610c1736600461445a565b612916565b6040516104009190614fa1565b348015610c3557600080fd5b50610a8561299d565b348015610c4a57600080fd5b506104c5610c59366004614fd9565b6129e8565b348015610c6a57600080fd5b5061058d610c7936600461459c565b6129ff565b348015610c8a57600080fd5b5061046b610c993660046143e9565b612a4d565b348015610caa57600080fd5b50610cbe610cb936600461445a565b612b0d565b6040516104009190615085565b348015610cd757600080fd5b50610ceb610ce63660046143e9565b612b94565b60405160ff9091168152602001610400565b348015610d0957600080fd5b506104c5610d183660046143e9565b612bb8565b348015610d2957600080fd5b506104c5610d38366004614a47565b612c24565b348015610d4957600080fd5b506103f4610d583660046143e9565b612c40565b348015610d6957600080fd5b5061058d600080516020615ba983398151915281565b348015610d8b57600080fd5b50610be4612c64565b348015610da057600080fd5b506104c5610daf3660046150c7565b612ce7565b348015610dc057600080fd5b50610dd4610dcf3660046143e9565b612d3f565b60405161040091906150fb565b348015610ded57600080fd5b5061058d600080516020615be983398151915281565b348015610e0f57600080fd5b50610c1c610e1e36600461445a565b612deb565b348015610e2f57600080fd5b5061058d606481565b348015610e4457600080fd5b506103f4610e53366004615109565b612e25565b348015610e6457600080fd5b50610cbe610e7336600461445a565b612e64565b348015610e8457600080fd5b5061058d600080516020615bc983398151915281565b348015610ea657600080fd5b506104c5610eb5366004614a47565b612e88565b348015610ec657600080fd5b506103f4610ed53660046143e9565b612f2c565b348015610ee657600080fd5b5061058d600080516020615b6983398151915281565b600080610f0883612f50565b90506001600160a01b038116610f215750600092915050565b50600192915050565b6000610f3582612f79565b92915050565b606073__$d5cd89f76df1633386d5125db9b55cb1a4$__6378bbf88f610f5f612f9e565b846040518363ffffffff1660e01b8152600401610f7d929190615127565b600060405180830381865af4158015610f9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f35919081019061513e565b60606000610fce612fc2565b9050806000018054610fdf90615223565b80601f016020809104026020016040519081016040528092919081815260200182805461100b90615223565b80156110585780601f1061102d57610100808354040283529160200191611058565b820191906000526020600020905b81548152906001019060200180831161103b57829003601f168201915b505050505091505090565b600061106e82612fe6565b50610f358261301e565b611083828233613047565b5050565b60008073__$882f5b37a3d589eaf0cd285805dc8d05cc$__63571a48116110ac612f9e565b6040516001600160e01b031960e084901b168152600481019190915260ff861660248201526044016040805180830381865af41580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611114919061525d565b9094909350915050565b606073__$882f5b37a3d589eaf0cd285805dc8d05cc$__633a38b4b7611142612f9e565b6040518263ffffffff1660e01b815260040161116091815260200190565b600060405180830381865af415801561117d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a59190810190615371565b905090565b73__$d5cd89f76df1633386d5125db9b55cb1a4$__63fab7bb756111cc612f9e565b84846040518463ffffffff1660e01b81526004016111ec93929190615421565b60006040518083038186803b15801561120457600080fd5b505af4158015611218573d6000803e3d6000fd5b505050505050565b600080516020615b6983398151915261123881613054565b6003600061124461305e565b8054909150600160401b900460ff168061126b575080546001600160401b03808416911610155b156112895760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1781556001600160a01b0386166112cf576040516303988b8160e61b815260040160405180910390fd5b83518551146112f1576040516307e11acb60e51b815260040160405180910390fd5b60006112fb612f9e565b600b810180546001600160a01b0319166001600160a01b038a16179055905060005b86518110156113ea5773__$882f5b37a3d589eaf0cd285805dc8d05cc$__638cdca9e08389848151811061135357611353615440565b602002602001015189858151811061136d5761136d615440565b60200260200101516040518463ffffffff1660e01b81526004016113a79392919092835260ff919091166020830152604082015260600190565b60006040518083038186803b1580156113bf57600080fd5b505af41580156113d3573d6000803e3d6000fd5b5050505080806113e29061546c565b91505061131d565b5050805460ff60401b19168155604051600080516020615b4983398151915290611415908490614f5f565b60405180910390a1505050505050565b600073__$33024e28f4a0ded70fcb245aaa4d798379$__63fe18c37f611449612f9e565b846040518363ffffffff1660e01b8152600401611467929190615485565b602060405180830381865af4158015611484573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f359190615493565b6000806114b3613082565b6002015492915050565b6114c56130a6565b6114cd6130dc565b60006114d7612f9e565b6040516333c4714760e11b815290915073__$33024e28f4a0ded70fcb245aaa4d798379$__90636788e28e9061151590849033908790600401615421565b60006040518083038186803b15801561152d57600080fd5b505af4158015611541573d6000803e3d6000fd5b505050505061154e613104565b50565b600061155b612f9e565b600201546001600160a01b0316919050565b6001600160a01b0382166115a0576000604051633250574960e11b8152600401611597919061454d565b60405180910390fd5b60006115ad838333613115565b9050836001600160a01b0316816001600160a01b0316146115fb576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401611597565b50505050565b60008061160c6131d0565b60009384526020525050604090206001015490565b606073__$882f5b37a3d589eaf0cd285805dc8d05cc$__63e35bc30f611645612f9e565b6040518263ffffffff1660e01b815260040161166391815260200190565b600060405180830381865af4158015611680573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a591908101906154ac565b600080516020615b698339815191526116c081613054565b600260006116cc61305e565b8054909150600160401b900460ff16806116f3575080546001600160401b03808416911610155b156117115760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1760ff60401b19168155604051600080516020615b4983398151915290611755908490614f5f565b60405180910390a150505050565b606073__$882f5b37a3d589eaf0cd285805dc8d05cc$__63132f244f611787612f9e565b6040516001600160e01b031960e084901b168152600481019190915265ffffffffffff85166024820152604401600060405180830381865af41580156117d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3591908101906154ac565b61180282611601565b61180b81613054565b6115fb83836131f4565b600080611820613082565b905061182b84611e13565b831061184e57838360405163295f44f760e21b815260040161159792919061553a565b6001600160a01b0384166000908152602091825260408082208583529092522054905092915050565b600073__$d5cd89f76df1633386d5125db9b55cb1a4$__63698315f661189b612f9e565b85856040518463ffffffff1660e01b81526004016118bb93929190615421565b602060405180830381865af41580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc9190615553565b9392505050565b6001600160a01b038116331461192c5760405163334bd91960e11b815260040160405180910390fd5b6119368282613295565b505050565b600080516020615be983398151915261195381613054565b61154e61330d565b611936838383604051806020016040528060008152506129e8565b6000611980612f9e565b600b8101549091506001600160a01b031633146119b2573360405163d86ad9cf60e01b8152600401611597919061454d565b6119ba6130a6565b6119c26130dc565b60006119cc612f9e565b60405163ce9f367960e01b815290915073__$33024e28f4a0ded70fcb245aaa4d798379$__9063ce9f367990611a089084908790600401615485565b60006040518083038186803b158015611a2057600080fd5b505af4158015611a34573d6000803e3d6000fd5b5050505050611083613104565b6000611a4b612f9e565b600b8101549091506001600160a01b03163314611a7d573360405163d86ad9cf60e01b8152600401611597919061454d565b611a856130a6565b611a8d6130dc565b6000611a97612f9e565b6040516351a1d6eb60e01b815290915073__$33024e28f4a0ded70fcb245aaa4d798379$__906351a1d6eb90611a089084908790600401615485565b606073__$7df4da9b1a17d9d425275d1becdd020933$__634bf5d7e96040518163ffffffff1660e01b8152600401600060405180830381865af4158015611b1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a59190810190615570565b611b4e613364565b611b5782613409565b6110838282613421565b600080611b6c613082565b9050611b766114a8565b8310611b9a5760008360405163295f44f760e21b815260040161159792919061553a565b806002018381548110611baf57611baf615440565b9060005260206000200154915050919050565b6000611bcc6134d5565b50600080516020615b8983398151915290565b600080516020615bc9833981519152611bf781613054565b6000611c01612f9e565b60405163b0561d6b60e01b815290915073__$0e6659b32317c8fd29d8e9acacd76a98c6$__9063b0561d6b90611c3d90849087906004016155a4565b60006040518083038186803b158015611c5557600080fd5b505af4158015611c69573d6000803e3d6000fd5b50505050505050565b6000611c7c612f9e565b60030154905090565b6000611c8f612f9e565b54600160381b90046001600160a01b0316919050565b600080611cb061351e565b5460ff1692915050565b6000610f3582612fe6565b600073__$d5cd89f76df1633386d5125db9b55cb1a4$__63bae03e8e611ce9612f9e565b846040518363ffffffff1660e01b8152600401611d07929190615485565b602060405180830381865af4158015611d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3591906155bd565b60606111a5613542565b6040805160c081018252606080825260006020830181905292820183905281018290526080810182905260a081019190915273__$882f5b37a3d589eaf0cd285805dc8d05cc$__63d8fa39d9611da6612f9e565b6040516001600160e01b031960e084901b168152600481019190915260ff85166024820152604401600060405180830381865af4158015611deb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3591908101906155da565b600080611e1e612fc2565b90506001600160a01b038316611e4a5760006040516322718ad960e21b8152600401611597919061454d565b6001600160a01b039092166000908152600390920160205250604090205490565b606073__$882f5b37a3d589eaf0cd285805dc8d05cc$__632a08d1b4611e8f612f9e565b6040518263ffffffff1660e01b8152600401611ead91815260200190565b600060405180830381865af4158015611eca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a5919081019061560e565b6000611efc612f9e565b600b01546001600160a01b0316919050565b333014611f30573360405163d86ad9cf60e01b8152600401611597919061454d565b61108382826135dd565b600080611f45612f9e565b600b8101549091506001600160a01b03163314611f77573360405163d86ad9cf60e01b8152600401611597919061454d565b611f7f6130a6565b611f876130dc565b6000611f91612f9e565b6040516330c339f160e11b81526004810182905260ff871660248201526001600160a01b038616604482015290915073__$33024e28f4a0ded70fcb245aaa4d798379$__9063618673e290606401602060405180830381865af4158015611ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120209190615493565b92505061202b613104565b5092915050565b600073__$d5cd89f76df1633386d5125db9b55cb1a4$__63b7006ec2612056612f9e565b846040518363ffffffff1660e01b8152600401612074929190615485565b602060405180830381865af4158015612091573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f359190615553565b600080516020615be98339815191526120cd81613054565b61154e6135f7565b3330146120f7573360405163d86ad9cf60e01b8152600401611597919061454d565b61154e8161363e565b600061210a61305e565b805490915060ff600160401b82041615906001600160401b03166000811580156121315750825b90506000826001600160401b0316600114801561214d5750303b155b90508115801561215b575080155b156121795760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156121a257845460ff60401b1916600160401b1785555b60608601516001600160a01b031615806121c7575060808601516001600160a01b0316155b806121dd575060a08601516001600160a01b0316155b806121f3575060c08601516001600160a01b0316155b80612209575060e08601516001600160a01b0316155b8061222057506101208601516001600160a01b0316155b8061223757506101008601516001600160a01b0316155b15612255576040516303988b8160e61b815260040160405180910390fd5b85515115806122675750602086015151155b806122755750604086015151155b156122935760405163155796cd60e31b815260040160405180910390fd5b8561014001516000036122b9576040516363868c5560e11b815260040160405180910390fd5b856101600151516000036122e0576040516380af3b2760e01b815260040160405180910390fd5b6122f286600001518760200151613679565b6122fa61368b565b612302613693565b61230a6136a3565b61231261368b565b61231a61368b565b61232b6000801b87606001516131f4565b50612348600080516020615b6983398151915287608001516131f4565b50612365600080516020615be98339815191528760a001516131f4565b50612382600080516020615b298339815191528760c001516131f4565b50600061238d612f9e565b905060005b8761016001515181101561243a5773__$882f5b37a3d589eaf0cd285805dc8d05cc$__63587167e3838a610160015184815181106123d2576123d2615440565b60200260200101516040518363ffffffff1660e01b81526004016123f792919061569c565b60006040518083038186803b15801561240f57600080fd5b505af4158015612423573d6000803e3d6000fd5b5050505080806124329061546c565b915050612392565b5060e087015181546001600160a01b03918216600160381b02600160381b600160d81b03199091161782556101008801516001830180549183166001600160a01b03199283161790556101208901516002840180549190931691161790556101408701516003820155604087015160048201906124b7908261578e565b5050831561121857845460ff60401b19168555604051600080516020615b498339815191529061141590600190614f5f565b60006124f481613054565b60006124fe612f9e565b9050478084111561252657808460405163b7ddd88b60e01b8152600401611597929190615485565b600b8201546040516000916001600160a01b03169086908381818185875af1925050503d8060008114612575576040519150601f19603f3d011682016040523d82523d6000602084013e61257a565b606091505b50509050806125ad57600b8301546040516376ac9b2760e11b8152611597916001600160a01b031690879060040161553a565b5050505050565b6000806125bf6131d0565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b600073__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015612635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a5919061584d565b60606000612665612fc2565b9050806001018054610fdf90615223565b6000612680612f9e565b600b8101549091506001600160a01b031633146126b2573360405163d86ad9cf60e01b8152600401611597919061454d565b6126ba6130a6565b6126c26130dc565b60006126cc612f9e565b6040516333c4714760e11b815290915073__$33024e28f4a0ded70fcb245aaa4d798379$__90636788e28e9061270a90849088908890600401615421565b60006040518083038186803b15801561272257600080fd5b505af4158015612736573d6000803e3d6000fd5b5050505050611936613104565b6110833383836136b3565b600073__$3bdef20447008df1b9f923aedb41d56473$__6333c0fe64612772612f9e565b846040518363ffffffff1660e01b8152600401612074929190615127565b600073__$3bdef20447008df1b9f923aedb41d56473$__63daac67456127b4612f9e565b846040518363ffffffff1660e01b81526004016127d2929190615485565b602060405180830381865af41580156127ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f35919061586a565b600073__$3bdef20447008df1b9f923aedb41d56473$__637ea23774612837612f9e565b846040518363ffffffff1660e01b8152600401611467929190615127565b600061285f612f9e565b60ff9092166000908152600e9290920160205250604090205490565b600073__$882f5b37a3d589eaf0cd285805dc8d05cc$__638ea028a861289f612f9e565b6040516001600160e01b031960e084901b168152600481019190915260ff8616602482015265ffffffffffff85166044820152606401602060405180830381865af41580156128f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc9190615887565b606073__$d5cd89f76df1633386d5125db9b55cb1a4$__6392bc7e5061293a612f9e565b846040518363ffffffff1660e01b8152600401612958929190615127565b600060405180830381865af4158015612975573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3591908101906158a4565b600073__$7df4da9b1a17d9d425275d1becdd020933$__63b80777ea6040518163ffffffff1660e01b8152600401602060405180830381865af4158015612635573d6000803e3d6000fd5b6129f384848461156d565b6115fb84848484613758565b600080612a0a612f9e565b60ff84166000908152600582016020908152604080832060010154600e8501909252909120549192506118fc91620100009091046001600160401b031690615929565b6060612a5882612fe6565b506000612a63612f9e565b600084815260088201602052604090206001015490915060ff1673__$3bdef20447008df1b9f923aedb41d56473$__638f1f3b0e8386612aa285613868565b6040518463ffffffff1660e01b8152600401612ac093929190615940565b600060405180830381865af4158015612add573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b059190810190615570565b949350505050565b606073__$d5cd89f76df1633386d5125db9b55cb1a4$__63e2f60320612b31612f9e565b846040518363ffffffff1660e01b8152600401612b4f929190615127565b600060405180830381865af4158015612b6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3591908101906159ea565b6000612b9e612f9e565b600092835260080160205250604090206001015460ff1690565b73__$d5cd89f76df1633386d5125db9b55cb1a4$__6317f9335d612bda612f9e565b836040518363ffffffff1660e01b8152600401612bf8929190615485565b60006040518083038186803b158015612c1057600080fd5b505af41580156125ad573d6000803e3d6000fd5b612c2d82611601565b612c3681613054565b6115fb8383613295565b600073__$3bdef20447008df1b9f923aedb41d56473$__63b1dc594a612056612f9e565b600073__$3bdef20447008df1b9f923aedb41d56473$__630e692e0b612c88612f9e565b6040518263ffffffff1660e01b8152600401612ca691815260200190565b602060405180830381865af4158015612cc3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a59190615887565b600080516020615b29833981519152612cff81613054565b73__$882f5b37a3d589eaf0cd285805dc8d05cc$__63587167e3612d21612f9e565b846040518363ffffffff1660e01b81526004016111ec92919061569c565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915273__$3bdef20447008df1b9f923aedb41d56473$__63ed3c4f9d612d8c612f9e565b846040518363ffffffff1660e01b8152600401612daa929190615485565b60a060405180830381865af4158015612dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f359190615a77565b6040516339d931f160e21b815260609073__$3bdef20447008df1b9f923aedb41d56473$__9063e764c7c49061295890859060040161454d565b600080612e30612fc2565b6001600160a01b03948516600090815260059190910160209081526040808320959096168252939093525050205460ff1690565b606073__$3bdef20447008df1b9f923aedb41d56473$__63ddd6ce95612b31612f9e565b600080516020615ba9833981519152612ea081613054565b6000612eaa612f9e565b6040516366a7f29160e01b815260048101829052602481018690526001600160a01b038516604482015290915073__$d5cd89f76df1633386d5125db9b55cb1a4$__906366a7f2919060640160006040518083038186803b158015612f0e57600080fd5b505af4158015612f22573d6000803e3d6000fd5b5050505050505050565b600073__$3bdef20447008df1b9f923aedb41d56473$__6376885395612056612f9e565b600080612f5b612fc2565b6000938452600201602052505060409020546001600160a01b031690565b60006001600160e01b0319821663780e9d6360e01b1480610f355750610f35826138fa565b7fec49bc12bd9c2cfd865ff38825256c053d253acea1262d51e4c4821cc4d5b70090565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930090565b600080612ff283612f50565b90506001600160a01b038116610f3557604051637e27328960e01b815260048101849052602401611597565b600080613029612fc2565b6000938452600401602052505060409020546001600160a01b031690565b611936838383600161393a565b61154e8133613a44565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0090565b60006130b0613a6f565b8054909150600119016130d657604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6130e4611ca5565b156131025760405163d93c066560e01b815260040160405180910390fd5b565b600061310e613a6f565b6001905550565b600080613120612f9e565b6000858152600d820160205260409020549091506001600160a01b031680156131bb576000858152600d83016020908152604080832080546001600160a01b03191690556001600160a01b0384168352600c850190915290206131839086613a93565b506040516001600160a01b0382169086907f2dea8fdc0115667de4800362c74206112df0a3a139fa2c217218b27a5da2025990600090a35b6131c6868686613a9f565b9695505050505050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b6000806131ff6131d0565b905061320b84846125b4565b61328b576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556132413390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610f35565b6000915050610f35565b6000806132a06131d0565b90506132ac84846125b4565b1561328b576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610f35565b613315613ab4565b600061331f61351e565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051613359919061454d565b60405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806133eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166133df600080516020615b89833981519152546001600160a01b031690565b6001600160a01b031614155b156131025760405163703e46dd60e11b815260040160405180910390fd5b600080516020615b6983398151915261108381613054565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561347b575060408051601f3d908101601f1916820190925261347891810190615493565b60015b61349a5781604051634c9c8ce360e01b8152600401611597919061454d565b600080516020615b8983398151915281146134cb57604051632a87526960e21b815260048101829052602401611597565b6119368383613ad9565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146131025760405163703e46dd60e11b815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b606061354c612f9e565b600401805461355a90615223565b80601f016020809104026020016040519081016040528092919081815260200182805461358690615223565b80156135d35780601f106135a8576101008083540402835291602001916135d3565b820191906000526020600020905b8154815290600101906020018083116135b657829003601f168201915b5050505050905090565b611083828260405180602001604052806000815250613b2f565b6135ff6130dc565b600061360961351e565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861334c3390565b600061364d6000836000613115565b90506001600160a01b03811661108357604051637e27328960e01b815260048101839052602401611597565b613681613b46565b6110838282613b6b565b613102613b46565b61369b613b46565b613102613b99565b6136ab613b46565b613102613bb6565b60006136bd612fc2565b90506001600160a01b0383166136e85782604051630b61174360e31b8152600401611597919061454d565b6001600160a01b038481166000818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b0383163b156115fb57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061379a903390889087908790600401615a93565b6020604051808303816000875af19250505080156137d5575060408051601f3d908101601f191682019092526137d291810190615ac6565b60015b613835573d808015613803576040519150601f19603f3d011682016040523d82523d6000602084013e613808565b606091505b50805160000361382d5783604051633250574960e11b8152600401611597919061454d565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b146125ad5783604051633250574960e11b8152600401611597919061454d565b6060600061387583613bbe565b60010190506000816001600160401b0381111561389457613894614681565b6040519080825280601f01601f1916602001820160405280156138be576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846138c857509392505050565b60006001600160e01b031982166380ac58cd60e01b148061392b57506001600160e01b03198216635b5e139f60e01b145b80610f355750610f3582613c94565b6000613944612fc2565b9050818061395a57506001600160a01b03831615155b15613a1357600061396a85612fe6565b90506001600160a01b038416158015906139965750836001600160a01b0316816001600160a01b031614155b80156139a957506139a78185612e25565b155b156139c9578360405163a9fbf51f60e01b8152600401611597919061454d565b8215613a115784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080546001600160a01b0319166001600160a01b0392909216919091179055565b613a4e82826125b4565b61108357808260405163e2517d3f60e01b815260040161159792919061553a565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b60006118fc8383613cc9565b6000613aa96130dc565b612b05848484613db2565b613abc611ca5565b61310257604051638dfc202b60e01b815260040160405180910390fd5b613ae282613e40565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115613b27576119368282613e9c565b611083613f12565b613b398383613f31565b6119366000848484613758565b613b4e613f96565b61310257604051631afcd79f60e31b815260040160405180910390fd5b613b73613b46565b6000613b7d612fc2565b905080613b8a848261578e565b50600181016115fb838261578e565b613ba1613b46565b6000613bab61351e565b805460ff1916905550565b613104613b46565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310613bfd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310613c27576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310613c4557662386f26fc10000830492506010015b6305f5e1008310613c5d576305f5e100830492506008015b6127108310613c7157612710830492506004015b60648310613c83576064830492506002015b600a8310610f355760010192915050565b60006001600160e01b03198216637965db0b60e01b1480610f3557506301ffc9a760e01b6001600160e01b0319831614610f35565b6000818152600183016020526040812054801561328b576000613ced600183615ae3565b8554909150600090613d0190600190615ae3565b9050808214613d66576000866000018281548110613d2157613d21615440565b9060005260206000200154905080876000018481548110613d4457613d44615440565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d7757613d77615af6565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f35565b600080613dc0858585613fb0565b90506001600160a01b038116613dde57613dd9846140b7565b613e01565b846001600160a01b0316816001600160a01b031614613e0157613e0181856140f0565b6001600160a01b038516613e1d57613e1884614191565b612b05565b846001600160a01b0316816001600160a01b031614612b0557612b05858561425a565b806001600160a01b03163b600003613e6d5780604051634c9c8ce360e01b8152600401611597919061454d565b600080516020615b8983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051613eb99190615b0c565b600060405180830381855af49150503d8060008114613ef4576040519150601f19603f3d011682016040523d82523d6000602084013e613ef9565b606091505b5091509150613f098583836142b2565b95945050505050565b34156131025760405163b398979f60e01b815260040160405180910390fd5b6001600160a01b038216613f5b576000604051633250574960e11b8152600401611597919061454d565b6000613f6983836000613115565b90506001600160a01b038116156119365760006040516339e3563760e11b8152600401611597919061454d565b6000613fa061305e565b54600160401b900460ff16919050565b600080613fbb612fc2565b90506000613fc885612f50565b90506001600160a01b03841615613fe457613fe4818587614305565b6001600160a01b038116156140245761400160008660008061393a565b6001600160a01b0381166000908152600383016020526040902080546000190190555b6001600160a01b03861615614055576001600160a01b03861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b60006140c1613082565b600281018054600085815260039093016020908152604084208290556001820183559183529120019190915550565b60006140fa613082565b9050600061410784611e13565b600084815260018401602052604090205490915080821461415c576001600160a01b03851660009081526020848152604080832085845282528083205484845281842081905583526001860190915290208190555b50600092835260018201602090815260408085208590556001600160a01b039095168452918252838320908352905290812055565b600061419b613082565b60028101549091506000906141b290600190615ae3565b60008481526003840160205260408120546002850180549394509092849081106141de576141de615440565b906000526020600020015490508084600201838154811061420157614201615440565b60009182526020808320909101929092558281526003860190915260408082208490558682528120556002840180548061423d5761423d615af6565b600190038181906000526020600020016000905590555050505050565b6000614264613082565b90506000600161427385611e13565b61427d9190615ae3565b6001600160a01b0390941660009081526020838152604080832087845282528083208690559482526001909301909252502055565b6060826142c7576142c28261435b565b6118fc565b81511580156142de57506001600160a01b0384163b155b156142fe5783604051639996b31560e01b8152600401611597919061454d565b50806118fc565b614310838383614384565b611936576001600160a01b03831661433e57604051637e27328960e01b815260048101829052602401611597565b818160405163177e802f60e01b815260040161159792919061553a565b80511561436b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60006001600160a01b03831615801590612b055750826001600160a01b0316846001600160a01b031614806143be57506143be8484612e25565b80612b055750826001600160a01b03166143d78361301e565b6001600160a01b031614949350505050565b6000602082840312156143fb57600080fd5b5035919050565b6001600160e01b03198116811461154e57600080fd5b60006020828403121561442a57600080fd5b81356118fc81614402565b6001600160a01b038116811461154e57600080fd5b803561445581614435565b919050565b60006020828403121561446c57600080fd5b81356118fc81614435565b602080825282518282018190526000919060409081850190868401855b828110156144dd57815180518552868101516001600160a01b039081168887015286820151168686015260609081015160ff169085015260809093019290850190600101614494565b5091979650505050505050565b60005b838110156145055781810151838201526020016144ed565b50506000910152565b600081518084526145268160208601602086016144ea565b601f01601f19169290920160200192915050565b6020815260006118fc602083018461450e565b6001600160a01b0391909116815260200190565b6000806040838503121561457457600080fd5b823561457f81614435565b946020939093013593505050565b60ff8116811461154e57600080fd5b6000602082840312156145ae57600080fd5b81356118fc8161458d565b6000815160c084526145ce60c085018261450e565b905060208301511515602085015260ff6040840151166040850152606083015160018060401b038082166060870152806080860151166080870152505060a083015160a08501528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561467457603f198886030184526146628583516145b9565b94509285019290850190600101614646565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156146b9576146b9614681565b60405290565b60405160c081016001600160401b03811182821017156146b9576146b9614681565b60405161018081016001600160401b03811182821017156146b9576146b9614681565b604051608081016001600160401b03811182821017156146b9576146b9614681565b604051601f8201601f191681016001600160401b038111828210171561474e5761474e614681565b604052919050565b60006001600160401b0382111561476f5761476f614681565b5060051b60200190565b600082601f83011261478a57600080fd5b8135602061479f61479a83614756565b614726565b82815260059290921b840181019181810190868411156147be57600080fd5b8286015b848110156147d957803583529183019183016147c2565b509695505050505050565b6000806000606084860312156147f957600080fd5b833561480481614435565b92506020848101356001600160401b038082111561482157600080fd5b818701915087601f83011261483557600080fd5b813561484361479a82614756565b81815260059190911b8301840190848101908a83111561486257600080fd5b938501935b8285101561488957843561487a8161458d565b82529385019390850190614867565b9650505060408701359250808311156148a157600080fd5b50506148af86828701614779565b9150509250925092565b6000806000606084860312156148ce57600080fd5b83356148d981614435565b925060208401356148e981614435565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b8181101561493b5783516001600160d01b031683529284019291840191600101614916565b50909695505050505050565b6000602080838503121561495a57600080fd5b82356001600160401b0381111561497057600080fd5b8301601f8101851361498157600080fd5b803561498f61479a82614756565b818152606091820283018401918482019190888411156149ae57600080fd5b938501935b83851015614a0a5780858a0312156149cb5760008081fd5b6149d3614697565b85356149de81614435565b815285870135878201526040808701356149f78161458d565b90820152835293840193918501916149b3565b50979650505050505050565b65ffffffffffff8116811461154e57600080fd5b600060208284031215614a3c57600080fd5b81356118fc81614a16565b60008060408385031215614a5a57600080fd5b823591506020830135614a6c81614435565b809150509250929050565b60006001600160401b03821115614a9057614a90614681565b50601f01601f191660200190565b600082601f830112614aaf57600080fd5b8135614abd61479a82614a77565b818152846020838601011115614ad257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614b0257600080fd5b8235614b0d81614435565b915060208301356001600160401b03811115614b2857600080fd5b614b3485828601614a9e565b9150509250929050565b600060208284031215614b5057600080fd5b81356001600160401b03811115614b6657600080fd5b612b0584828501614a9e565b6020815260006118fc60208301846145b9565b6020808252825182820181905260009190848201906040850190845b8181101561493b57835160ff1683529284019291840191600101614ba1565b60008060408385031215614bd357600080fd5b8235614bde8161458d565b91506020830135614a6c81614435565b801515811461154e57600080fd5b6001600160401b038116811461154e57600080fd5b803561445581614bfc565b6001600160d01b038116811461154e57600080fd5b803561445581614c1c565b63ffffffff8116811461154e57600080fd5b803561445581614c3c565b600060608284031215614c6b57600080fd5b614c73614697565b905081356001600160401b0380821115614c8c57600080fd5b9083019060c08286031215614ca057600080fd5b614ca86146bf565b823582811115614cb757600080fd5b614cc387828601614a9e565b82525060208301359150614cd682614bee565b81602082015260408301359150614cec8261458d565b81604082015260608301359150614d0282614bfc565b816060820152614d1460808401614c11565b608082015260a083013560a0820152808452505050614d3560208301614c31565b6020820152614d4660408301614c4e565b604082015292915050565b600082601f830112614d6257600080fd5b81356020614d7261479a83614756565b82815260059290921b84018101918181019086841115614d9157600080fd5b8286015b848110156147d95780356001600160401b03811115614db45760008081fd5b614dc28986838b0101614c59565b845250918301918301614d95565b600060208284031215614de257600080fd5b81356001600160401b0380821115614df957600080fd5b908301906101808286031215614e0e57600080fd5b614e166146e1565b823582811115614e2557600080fd5b614e3187828601614a9e565b825250602083013582811115614e4657600080fd5b614e5287828601614a9e565b602083015250604083013582811115614e6a57600080fd5b614e7687828601614a9e565b604083015250614e886060840161444a565b6060820152614e996080840161444a565b6080820152614eaa60a0840161444a565b60a0820152614ebb60c0840161444a565b60c0820152614ecc60e0840161444a565b60e0820152610100614edf81850161444a565b90820152610120614ef184820161444a565b9082015261014083810135908201526101608084013583811115614f1457600080fd5b614f2088828701614d51565b918301919091525095945050505050565b60008060408385031215614f4457600080fd5b8235614f4f81614435565b91506020830135614a6c81614bee565b6001600160401b0391909116815260200190565b60008060408385031215614f8657600080fd5b8235614f918161458d565b91506020830135614a6c81614a16565b6020808252825182820181905260009190848201906040850190845b8181101561493b57835183529284019291840191600101614fbd565b60008060008060808587031215614fef57600080fd5b8435614ffa81614435565b9350602085013561500a81614435565b92506040850135915060608501356001600160401b0381111561502c57600080fd5b61503887828801614a9e565b91505092959194509250565b8051825260208082015160ff16908301526040808201516001600160401b0316908301526060808201519083015260809081015165ffffffffffff16910152565b6020808252825182820181905260009190848201906040850190845b8181101561493b576150b4838551615044565b9284019260a092909201916001016150a1565b6000602082840312156150d957600080fd5b81356001600160401b038111156150ef57600080fd5b612b0584828501614c59565b60a08101610f358284615044565b6000806040838503121561511c57600080fd5b8235614bde81614435565b9182526001600160a01b0316602082015260400190565b6000602080838503121561515157600080fd5b82516001600160401b0381111561516757600080fd5b8301601f8101851361517857600080fd5b805161518661479a82614756565b81815260079190911b820183019083810190878311156151a557600080fd5b928401925b8284101561521857608084890312156151c35760008081fd5b6151cb614704565b84518152858501516151dc81614435565b818701526040858101516151ef81614435565b908201526060858101516152028161458d565b90820152825260809390930192908401906151aa565b979650505050505050565b600181811c9082168061523757607f821691505b60208210810361525757634e487b7160e01b600052602260045260246000fd5b50919050565b6000806040838503121561527057600080fd5b825161527b81614c1c565b6020840151909250614a6c81614c3c565b600082601f83011261529d57600080fd5b81516152ab61479a82614a77565b8181528460208386010111156152c057600080fd5b612b058260208301602087016144ea565b600060c082840312156152e357600080fd5b6152eb6146bf565b82519091506001600160401b0381111561530457600080fd5b6153108482850161528c565b825250602082015161532181614bee565b602082015260408201516153348161458d565b6040820152606082015161534781614bfc565b6060820152608082015161535a81614bfc565b8060808301525060a082015160a082015292915050565b6000602080838503121561538457600080fd5b82516001600160401b038082111561539b57600080fd5b818501915085601f8301126153af57600080fd5b81516153bd61479a82614756565b81815260059190911b830184019084810190888311156153dc57600080fd5b8585015b83811015615414578051858111156153f85760008081fd5b6154068b89838a01016152d1565b8452509186019186016153e0565b5098975050505050505050565b9283526001600160a01b03919091166020830152604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161547e5761547e615456565b5060010190565b918252602082015260400190565b6000602082840312156154a557600080fd5b5051919050565b600060208083850312156154bf57600080fd5b82516001600160401b038111156154d557600080fd5b8301601f810185136154e657600080fd5b80516154f461479a82614756565b81815260059190911b8201830190838101908783111561551357600080fd5b928401925b8284101561521857835161552b81614c1c565b82529284019290840190615518565b6001600160a01b03929092168252602082015260400190565b60006020828403121561556557600080fd5b81516118fc81614bee565b60006020828403121561558257600080fd5b81516001600160401b0381111561559857600080fd5b612b058482850161528c565b828152604060208201526000612b05604083018461450e565b6000602082840312156155cf57600080fd5b81516118fc81614435565b6000602082840312156155ec57600080fd5b81516001600160401b0381111561560257600080fd5b612b05848285016152d1565b6000602080838503121561562157600080fd5b82516001600160401b0381111561563757600080fd5b8301601f8101851361564857600080fd5b805161565661479a82614756565b81815260059190911b8201830190838101908783111561567557600080fd5b928401925b8284101561521857835161568d8161458d565b8252928401929084019061567a565b828152604060208201526000825160606040840152805160c060a08501526156c861016085018261450e565b602083810151151560c0870152604084015160ff1660e08701526060808501516001600160401b0390811661010089015260808601511661012088015260a0909401516101408701528601519290915061572c908501836001600160d01b03169052565b604085015163ffffffff81166080860152915095945050505050565b601f82111561193657600081815260208120601f850160051c8101602086101561576f5750805b601f850160051c820191505b818110156112185782815560010161577b565b81516001600160401b038111156157a7576157a7614681565b6157bb816157b58454615223565b84615748565b602080601f8311600181146157f057600084156157d85750858301515b600019600386901b1c1916600185901b178555611218565b600085815260208120601f198616915b8281101561581f57888601518255948401946001909101908401615800565b508582101561583d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561585f57600080fd5b81516118fc81614a16565b60006020828403121561587c57600080fd5b81516118fc81614bfc565b60006020828403121561589957600080fd5b81516118fc81614c1c565b600060208083850312156158b757600080fd5b82516001600160401b038111156158cd57600080fd5b8301601f810185136158de57600080fd5b80516158ec61479a82614756565b81815260059190911b8201830190838101908783111561590b57600080fd5b928401925b8284101561521857835182529284019290840190615910565b8082028115828204841417610f3557610f35615456565b838152826020820152606060408201526000613f09606083018461450e565b600060a0828403121561597157600080fd5b60405160a081016001600160401b038111828210171561599357615993614681565b80604052508091508251815260208301516159ad8161458d565b602082015260408301516159c081614bfc565b60408201526060838101519082015260808301516159dd81614a16565b6080919091015292915050565b600060208083850312156159fd57600080fd5b82516001600160401b03811115615a1357600080fd5b8301601f81018513615a2457600080fd5b8051615a3261479a82614756565b81815260a09182028301840191848201919088841115615a5157600080fd5b938501935b83851015614a0a57615a68898661595f565b83529384019391850191615a56565b600060a08284031215615a8957600080fd5b6118fc838361595f565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906131c69083018461450e565b600060208284031215615ad857600080fd5b81516118fc81614402565b81810381811115610f3557610f35615456565b634e487b7160e01b600052603160045260246000fd5b60008251615b1e8184602087016144ea565b919091019291505056feb885c7fab33eebc89fe071f92830192e26ac26c5457a8375da4744f5d35edba4c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc93232a7bb6c6e0f3eb1906dee10d2f6552ddc3b681619f046711c6eeed85a80a241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0865d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220639e72270201d0205247e2cda49ea9f8df316085899a8a009d421e064d9a6ad364736f6c63430008140033",
  "linkReferences": {
    "contracts/mocks/Stargate/StargateNFT/libraries/Clock.sol": {
      "Clock": [
        {
          "length": 20,
          "start": 7131
        },
        {
          "length": 20,
          "start": 9970
        },
        {
          "length": 20,
          "start": 10917
        }
      ]
    },
    "contracts/mocks/Stargate/StargateNFT/libraries/Levels.sol": {
      "Levels": [
        {
          "length": 20,
          "start": 4496
        },
        {
          "length": 20,
          "start": 4646
        },
        {
          "length": 20,
          "start": 5164
        },
        {
          "length": 20,
          "start": 5929
        },
        {
          "length": 20,
          "start": 6251
        },
        {
          "length": 20,
          "start": 7818
        },
        {
          "length": 20,
          "start": 8051
        },
        {
          "length": 20,
          "start": 9382
        },
        {
          "length": 20,
          "start": 10627
        },
        {
          "length": 20,
          "start": 11781
        }
      ]
    },
    "contracts/mocks/Stargate/StargateNFT/libraries/MintingLogic.sol": {
      "MintingLogic": [
        {
          "length": 20,
          "start": 5421
        },
        {
          "length": 20,
          "start": 5613
        },
        {
          "length": 20,
          "start": 6882
        },
        {
          "length": 20,
          "start": 7085
        },
        {
          "length": 20,
          "start": 8390
        },
        {
          "length": 20,
          "start": 10210
        }
      ]
    },
    "contracts/mocks/Stargate/StargateNFT/libraries/Settings.sol": {
      "Settings": [
        {
          "length": 20,
          "start": 7447
        }
      ]
    },
    "contracts/mocks/Stargate/StargateNFT/libraries/Token.sol": {
      "Token": [
        {
          "length": 20,
          "start": 10326
        },
        {
          "length": 20,
          "start": 10392
        },
        {
          "length": 20,
          "start": 10523
        },
        {
          "length": 20,
          "start": 11139
        },
        {
          "length": 20,
          "start": 11592
        },
        {
          "length": 20,
          "start": 11628
        },
        {
          "length": 20,
          "start": 11888
        },
        {
          "length": 20,
          "start": 12033
        },
        {
          "length": 20,
          "start": 12140
        },
        {
          "length": 20,
          "start": 12340
        }
      ]
    },
    "contracts/mocks/Stargate/StargateNFT/libraries/TokenManager.sol": {
      "TokenManager": [
        {
          "length": 20,
          "start": 4163
        },
        {
          "length": 20,
          "start": 4784
        },
        {
          "length": 20,
          "start": 6527
        },
        {
          "length": 20,
          "start": 7629
        },
        {
          "length": 20,
          "start": 8506
        },
        {
          "length": 20,
          "start": 10782
        },
        {
          "length": 20,
          "start": 11285
        },
        {
          "length": 20,
          "start": 11454
        },
        {
          "length": 20,
          "start": 12253
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/mocks/Stargate/StargateNFT/libraries/Clock.sol": {
      "Clock": [
        {
          "length": 20,
          "start": 6871
        },
        {
          "length": 20,
          "start": 9710
        },
        {
          "length": 20,
          "start": 10657
        }
      ]
    },
    "contracts/mocks/Stargate/StargateNFT/libraries/Levels.sol": {
      "Levels": [
        {
          "length": 20,
          "start": 4236
        },
        {
          "length": 20,
          "start": 4386
        },
        {
          "length": 20,
          "start": 4904
        },
        {
          "length": 20,
          "start": 5669
        },
        {
          "length": 20,
          "start": 5991
        },
        {
          "length": 20,
          "start": 7558
        },
        {
          "length": 20,
          "start": 7791
        },
        {
          "length": 20,
          "start": 9122
        },
        {
          "length": 20,
          "start": 10367
        },
        {
          "length": 20,
          "start": 11521
        }
      ]
    },
    "contracts/mocks/Stargate/StargateNFT/libraries/MintingLogic.sol": {
      "MintingLogic": [
        {
          "length": 20,
          "start": 5161
        },
        {
          "length": 20,
          "start": 5353
        },
        {
          "length": 20,
          "start": 6622
        },
        {
          "length": 20,
          "start": 6825
        },
        {
          "length": 20,
          "start": 8130
        },
        {
          "length": 20,
          "start": 9950
        }
      ]
    },
    "contracts/mocks/Stargate/StargateNFT/libraries/Settings.sol": {
      "Settings": [
        {
          "length": 20,
          "start": 7187
        }
      ]
    },
    "contracts/mocks/Stargate/StargateNFT/libraries/Token.sol": {
      "Token": [
        {
          "length": 20,
          "start": 10066
        },
        {
          "length": 20,
          "start": 10132
        },
        {
          "length": 20,
          "start": 10263
        },
        {
          "length": 20,
          "start": 10879
        },
        {
          "length": 20,
          "start": 11332
        },
        {
          "length": 20,
          "start": 11368
        },
        {
          "length": 20,
          "start": 11628
        },
        {
          "length": 20,
          "start": 11773
        },
        {
          "length": 20,
          "start": 11880
        },
        {
          "length": 20,
          "start": 12080
        }
      ]
    },
    "contracts/mocks/Stargate/StargateNFT/libraries/TokenManager.sol": {
      "TokenManager": [
        {
          "length": 20,
          "start": 3903
        },
        {
          "length": 20,
          "start": 4524
        },
        {
          "length": 20,
          "start": 6267
        },
        {
          "length": 20,
          "start": 7369
        },
        {
          "length": 20,
          "start": 8246
        },
        {
          "length": 20,
          "start": 10522
        },
        {
          "length": 20,
          "start": 11025
        },
        {
          "length": 20,
          "start": 11194
        },
        {
          "length": 20,
          "start": 11993
        }
      ]
    }
  }
}
